Compare commits

..

59 commits

Author SHA1 Message Date
9190697e65 chore: remove architecture/design/plan docs from tracking 2026-02-18 16:34:24 +08:00
b1194ef3b7 chore: remove sensitive docs from tracking
Remove internal docs and CLAUDE.md from git tracking.
Files kept locally but excluded via .gitignore.
2026-02-18 16:21:31 +08:00
cde00c7548 feat(commercial): add BridgeServerHandler and encrypted API key storage
- Add BridgeServerHandler as new update source type for Bridge Server
- Register BRIDGE_SERVER type in SourceType enum
- Use encrypted storage for Bridge Server API key via Encryption class

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-15 09:51:39 +08:00
5e18f378bb feat(commercial): add BridgeClient for Go server integration
- Add BridgeClient class for wpbridge-server communication
- Update BridgeManager to use Bridge Server for plugin list
- Add Bridge Server URL and API Key settings in admin
- Add AJAX handler for testing Bridge Server connection
- Include commercial bridge spec and review docs

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-15 09:28:51 +08:00
39b30af242 feat(commercial): add vendor system for third-party GPL plugin sources
- Add VendorInterface, AbstractVendor, VendorManager for vendor abstraction
- Add WooCommerceVendor for WooCommerce API Manager integration
- Add BridgeManager with hybrid mode (official + vendor + custom sources)
- Add GPLValidator for GPL compliance checking
- Add LicenseProxy for license key management
- Add VendorAdmin with AJAX handlers for vendor CRUD operations
- Add vendors.php admin tab with stats, vendor list, custom plugins
- Add vendor management CSS styles and JS module
- Update main.php to include vendors tab

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-15 08:39:37 +08:00
99a4ae4048 fix: complete wenpai-bridge integration across all config paths
- Update Settings.php preset: arkpress → json, api.wenpai.net → updates.wenpai.net
- Update SourceRegistry.php preset: TYPE_MIRROR → TYPE_JSON, same URL change
- Add JsonHandler::get_check_url() to extract base URL for health checks
- Fix {slug} template URL causing health check failures

Addresses Codex review findings:
- High: preset config not wired into active bootstrap path
- Medium: health checks failing on templated URLs

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-14 23:27:17 +08:00
9b1cd003e0 feat: integrate with wenpai-bridge service
- Update WENPAI_OPEN preset source to use updates.wenpai.net
- Change source type from ARKPRESS to JSON with {slug} template
- Add download_link support in UpdateInfo::from_array()

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-14 22:59:23 +08:00
5ac89d15e0 chore: bump version to 0.9.6 2026-02-14 22:27:06 +08:00
8f3821b46e ci: add Forgejo release workflow
- Auto build ZIP on tag push
- Version consistency check
- PHP lint
- SHA-256 checksum
- Auto create/update release

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-14 22:21:04 +08:00
e8ae854899 Merge feicode initial commit 2026-02-14 22:19:42 +08:00
e423bf2bdd fix: 代码评审修复 (v0.9.5)
- 添加 AJAX 输入验证和清理(sanitize_text_field)
- refresh_batch 方法添加数组键存在性检查
- 移除 JS 中多余的参数传递

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 12:29:37 +08:00
12c0d26f7a feat: 异步批量检测插件类型 (v0.9.4)
- 修复 WordPress.org 插件检测问题(启用 API 检查)
- 实现异步批量检测,每批 5 个插件
- 按钮显示进度(如 5/20),不再弹出多个通知
- 新增 AJAX 端点:prepare_refresh、refresh_batch

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 12:25:51 +08:00
0d051abef2 ui: 将插件类型标签移到状态区域 (v0.9.2)
- 插件类型标签(免费/商业/私有/第三方)移到右侧状态区域
- 名称区域只保留"已激活"基本状态
- 新增 wpbridge-status-type-* 样式类
- 更新版本号到 0.9.2

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 12:07:51 +08:00
b499515565 ui: 统一已锁定标签样式
- 使用 wpbridge-status-badge 基础样式
- 新增 wpbridge-status-locked 变体
- 修复已禁用状态使用错误颜色(改为红色)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 12:02:27 +08:00
037f247919 ui: 将已锁定标签移动到状态区域
减少插件名称区域的拥挤

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 11:59:06 +08:00
b5c1588d52 chore: 更新版本号到 0.9.1
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 11:54:55 +08:00
0b06462aaa fix: 代码审查修复
- 删除重复的 .wpbridge-modal-footer CSS 定义
- 同步 CLAUDE.md 版本号到 0.9.0

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 11:49:47 +08:00
76f3658fe5 fix: 补充缺失的 CSS 变量定义
- 添加 --wpbridge-white, --wpbridge-black
- 添加 --wpbridge-danger, --wpbridge-danger-light
- 添加 --wpbridge-warning-bg, --wpbridge-warning-text
- 添加 --wpbridge-radius-sm, --wpbridge-radius-md, --wpbridge-radius-lg
- 添加 --wpbridge-shadow-xl
- 整理变量定义顺序

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 11:41:56 +08:00
c9623ae775 chore: 更新版本号到 0.9.0
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 11:36:15 +08:00
3bfb5d18f2 refactor: 替换浏览器原生对话框为自定义模态框
- 新增 Modal 模块,支持 confirm/prompt/alert 三种类型
- 替换所有 confirm() 调用为 Modal.confirm()
- 替换 prompt() 调用为 Modal.prompt()
- 替换 alert() 调用为 Modal.alert()
- API Key 生成后显示可复制的模态框
- 添加模态框相关 CSS 样式
- 添加新的 i18n 字符串

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 11:34:45 +08:00
f78c7e29c1 feat: 更新日志聚合显示功能 (v0.9.0)
- 新增 ChangelogManager 类,支持从多种源获取更新日志
- 支持 WordPress.org、GitHub、Gitea(菲码源库)、自定义 JSON 源
- 添加模态框 UI 显示更新日志
- 在插件/主题列表添加查看更新日志按钮
- 简单的 Markdown 转 HTML 支持
- 缓存机制减少 API 请求

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 11:12:43 +08:00
3ce18ba452 feat: WordPress Site Health 集成
- 添加更新源状态检查
- 添加配置完整性检查
- 在站点健康信息中显示 WPBridge 状态
- 提供问题修复建议

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 11:05:15 +08:00
84d4568e0c feat: 备份回滚机制
- 新增 BackupManager 类管理备份
- 更新前自动创建 ZIP 备份
- 支持一键回滚到历史版本
- 自动清理旧备份(保留最近5个)
- 设置页面添加备份开关

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 11:03:51 +08:00
2890643a25 feat: 版本锁定功能 (v0.9.0)
- 新增 VersionLock 类管理版本锁定
- 支持锁定当前版本,阻止自动更新
- 在插件列表显示锁定状态徽章
- 添加锁定/解锁 AJAX 处理
- 更新 ROADMAP 添加 v0.9.0 规划

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 11:01:17 +08:00
58458d308f fix: 更新源解析与 Forgejo 兼容 2026-02-05 05:38:39 +08:00
657388f44c feat: 配置导入导出功能 + 文档更新 (v0.8.0)
- 新增 ConfigManager 类处理配置导入导出
- 设置页面添加导入导出 UI
- 支持合并或覆盖导入模式
- 敏感信息(API Key)可选导出
- 更新 ROADMAP.md 标记已完成任务
- 更新版本号到 0.8.0

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 05:00:48 +08:00
81e407f3f6 fix: 修复处理器缺失与认证/同步问题 2026-02-05 04:51:21 +08:00
fb4c7523d9 fix: 修复 __PHP_Incomplete_Class 错误
- 在 main.php 中添加 is_array() 检查防止损坏的缓存数据
- 在 sources.php 中添加类型检查
- 在 diagnostics.php 中添加类型检查
- 在 overview.php 中添加类型检查
- 使用 wp_options 永久存储检测结果

问题原因:transient 中存储的对象在类定义变化后
反序列化失败,变成 __PHP_Incomplete_Class

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 04:21:17 +08:00
f1895edeb6 feat: 商业插件检测缓存和手动刷新功能
- 添加 transient 缓存检测结果 (24小时TTL)
- 添加"刷新检测"按钮,支持手动触发重新检测
- 新增 refresh_all() 方法批量重新检测所有插件
- 新增 clear_cache() 方法清除检测缓存
- 新增 get_cache_stats() 方法获取缓存统计
- AJAX 处理 wpbridge_refresh_commercial_detection

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 04:06:34 +08:00
9aebe0605e refactor: Cloud API 重命名为 Bridge API
- API 命名空间: wpbridge/v1 → bridge/v1
- UI 标签: Cloud API → Bridge API
- 端点路径: /wp-json/bridge/v1/*

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 03:58:19 +08:00
6757083383 feat: 商业插件检测功能 - 远程 JSON 配置 (v0.7.5)
- 新增 CommercialDetector 商业插件智能检测器
- 新增 RemoteConfig 远程配置获取类 (wpcy.com/api/bridge/)
- 插件列表显示商业/免费类型徽章
- 支持 WordPress.org API 检测 + 已知商业插件列表
- 支持用户手动标记插件类型
- 支持深度扫描检测 (license 关键词、商业框架)
- 性能优化:默认跳过 API 检查,使用本地缓存

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 03:48:59 +08:00
54aa6ae70a feat: 添加概览仪表板和诊断工具页面 (v0.7.0)
新增功能:
- P3: 概览页面 - 状态仪表板、快速操作、系统信息
- P1: 诊断工具 - 更新源连通性测试、系统环境检查、配置检查、诊断报告导出

技术改进:
- 添加 ARIA 属性提升可访问性
- 使用 Clipboard API 替代废弃的 execCommand
- 完善 i18n 国际化支持
- 模态框焦点管理和 ESC 键关闭

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 02:05:50 +08:00
8d1fd88abf fix: 修复通知被遮挡问题
Codex 审查修复:
- 通知容器改为插入到 .wpbridge-content 内部顶部
- 添加 position: relative 和 z-index: 100
- 移除 header 的 margin-bottom(.wpbridge-wrap 已有 padding)
- 修复 CSS 语法错误(多余的闭括号)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 01:41:25 +08:00
725ea3f800 refactor: 通知系统改用 WordPress 原生 notice 样式
参考 WPMind 实现:
- 使用 WordPress 原生 notice 类(notice-success/error/warning/info)
- 通知显示在 header 下方,而不是固定在右下角
- 支持关闭按钮和自动消失
- 使用 dashicons 图标

移除旧的 toast 容器和样式

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 01:33:17 +08:00
fae4fa7e82 chore: 更新版本号到 0.6.4
强制浏览器刷新 CSS/JS 缓存

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 01:27:00 +08:00
d8d1865e3e refactor: 简化配置面板,移除单选按钮改用操作按钮
UI 改进:
- 移除繁琐的单选按钮组
- 直接显示自定义源输入框
- 底部提供操作按钮:保存、重置为默认、禁用/启用更新
- 根据当前状态动态显示相应按钮

交互更直观:
- 输入 URL 点保存 → 设置自定义源
- 点禁用更新 → 禁用该项目的更新
- 点重置为默认 → 清除自定义配置

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 01:25:20 +08:00
ec53635e9f fix: 添加缺失的 CSS 变量,修复自定义源字段不显示
问题:选择"自定义源"时,更新地址和访问密码字段不显示
原因:CSS 变量未定义导致样式失效

修复:
- 添加缺失的 CSS 变量(border, bg, radius 等)
- 添加 .wpbridge-custom-source-row 样式定义

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 01:15:29 +08:00
525e6805c3 refactor: 简化项目列表 UI,统一 header 样式
UI 改进:
- 移除繁琐的更新源下拉列表,改用状态徽章显示
- 配置面板添加单选按钮组(默认/自定义/禁用)
- 自定义源字段根据模式动态显示/隐藏
- 统一 header 位置(移到 .wrap 外部)
- 统一代码风格为 WordPress 标准

后端改进:
- 新增 ajax_save_item_config 统一接口
- 支持 default/custom/disabled 三种模式

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 01:11:27 +08:00
8fd178eb66 fix: 修复版本号不一致和 HTML 结构错误
- 统一 WPBRIDGE_VERSION 常量为 0.6.3
- 删除多余的 </div> 闭合标签,修复布局错位
- 确保内联配置面板在 wpbridge-project-item 内部

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 00:49:53 +08:00
7e0b77ea50 fix: 修复搜索框自动填充和折叠按钮位置
- 搜索框添加 autocomplete="off" 禁用浏览器自动填充
- 折叠按钮从末尾移到 checkbox 后面,避免拥挤
- 参考 WPMind 的折叠按钮布局设计

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 00:47:39 +08:00
bc2380656b style: 调整标题栏位置,更新版本号到 0.6.3
- 将标题栏移到 .wrap 容器外部
- 代码格式化优化

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 00:36:50 +08:00
19614f5737 style: 优化内联配置面板样式
- 参考 WPMind 折叠卡片设计
- 展开按钮添加 hover 和 active 状态
- 展开时项目卡片边框高亮
- 配置面板样式优化:更大的间距和更清晰的层次
- 输入框添加 focus 状态样式
- 修复 JavaScript 面板切换逻辑

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 00:30:12 +08:00
98e2d9325e feat: P0/P1 UX 改进 - 内联折叠配置面板
- 批量操作改为下拉选择(不再使用 prompt)
- 优先级语义化:首选源/备选源/最后选择
- 术语本地化:API URL→更新地址,认证令牌→访问密码
- URL 自动推断:从 URL 识别源类型(GitHub/GitLab/Gitee/JSON)
- 内联折叠配置面板(参考 WPMind 设计,替代弹窗)
- 安全修复:URL 协议验证、hostname 精确匹配
- 添加 is_inline 属性标记内联源

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 00:27:32 +08:00
e4de305acb chore: 更新版本号到 0.6.0
方案 B 里程碑完成:
- 项目优先架构
- FAIR 协议支持
- 管理界面重构

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 23:44:17 +08:00
4c4c11d356 fix: 修复 Codex 评审发现的问题
安全性修复:
- ajax_save_defaults() 添加 sanitize_text_field() 清理输入
- ajax_batch_set_source() 添加操作类型白名单验证
- projects.php 子 Tab 参数添加白名单验证

Bug 修复:
- 修复 CSS 多余闭合括号导致的样式解析错误
- 修复主题截图 URL 获取方式(使用完整 URL)

用户体验改进:
- 搜索功能添加 300ms 防抖,避免频繁 DOM 操作
- 批量操作添加确认对话框
- 单个项目源变更后即时更新 UI 状态(无需刷新)
- 源选择时显示加载状态

错误处理改进:
- FAIR 请求失败时记录错误日志(WP_DEBUG 模式)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 23:42:16 +08:00
76c0053f71 feat: 实现方案 B 管理界面和 FAIR 协议支持
任务 #43 - 重构管理界面为项目优先:
- 新增"项目"Tab,显示已安装插件/主题列表
- 子 Tab 结构:插件 / 主题 / 默认规则
- 支持为每个项目配置更新源(默认/禁用/自定义)
- 支持批量操作(设置源/重置/禁用)
- 支持搜索过滤
- 默认规则配置界面(全局/插件/主题)

任务 #44 - 添加 FAIR 源类型支持:
- 新增 FairProtocol 类:DID 解析、ED25519 签名验证
- 新增 FairSourceAdapter 类:FAIR 源更新检查和下载
- 支持 did:fair: 格式的 DID 标识符
- 支持 sodium 扩展和 paragonie/sodium_compat 回退
- 包签名验证和文件哈希校验

新增文件:
- includes/FAIR/FairProtocol.php
- includes/FAIR/FairSourceAdapter.php
- templates/admin/tabs/projects.php
- templates/admin/partials/project-list-plugins.php
- templates/admin/partials/project-list-themes.php
- templates/admin/partials/defaults-config.php

修改文件:
- includes/Admin/AdminPage.php - 添加项目配置 AJAX 处理
- templates/admin/main.php - 添加"项目"Tab
- assets/css/admin.css - 项目列表样式
- assets/js/admin.js - 项目管理 JavaScript

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 23:38:32 +08:00
ef0372c313 refactor: 应用 Codex 评审的低优先级改进建议
1. migrate_item_configs() 添加空 source_id 的显式检查
   - 在使用前验证 $old_source_id 非空
   - 添加明确的警告日志

2. full_cleanup() 简化逻辑
   - 移除重复的 cleanup_old_data() 调用
   - 旧数据已在 migrate() 中清理,此方法只需清理备份

3. resolve_item_type() 添加 plugin: 前缀显式检查
   - 使代码逻辑更清晰
   - 添加向后兼容注释

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 23:30:16 +08:00
06f6ef42d4 fix: 修复 Codex 评审发现的三个问题
1. [高] ItemSourceManager.get_effective_sources() null config 处理
   - 当项目未配置时 $config 为 null,访问 $config['item_type'] 会产生 PHP 警告
   - 新增 resolve_item_type() 方法,从 item_key 前缀推断类型
   - 使用 strpos() 替代 str_starts_with() 保持 PHP 7.4 兼容性

2. [中] MigrationManager 源 ID 映射问题
   - 迁移时使用旧的 source ID,但新系统可能生成不同的 key
   - 新增 $source_id_map 属性跟踪 旧ID → 新key 映射
   - 预置源也添加映射(wporg, wenpai-mirror, fair-aspirecloud)
   - migrate_item_configs() 和 setup_defaults() 使用映射后的 key
   - 验证源存在后再写入配置

3. [低] 旧数据清理
   - 新增 cleanup_old_data() 方法,迁移成功后删除旧选项
   - 新增 full_cleanup() 方法,完全清理包括备份
   - 备份数据保留以便回滚

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 23:28:12 +08:00
06e0a4c118 feat: 实现方案 B 核心数据模型和迁移逻辑
新增数据模型类:
- SourceRegistry: 源注册表管理,支持 FAIR DID
- ItemSourceManager: 项目配置管理,绑定项目与源
- DefaultsManager: 默认规则管理,类型级全局策略
- MigrationManager: 从方案 A 迁移到方案 B

特性:
- 三层架构:源注册表 + 项目配置 + 默认规则
- 支持 FAIR DID 标识符
- 支持 ED25519 签名验证配置
- 预置源:WordPress.org、文派镜像、FAIR AspireCloud
- 自动迁移和回滚机制

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 23:20:48 +08:00
52520337b5 fix: 修复 Codex 评审发现的 API Key 问题
- 修复 API Key 字段名与 RestController 不匹配的问题
  - 使用 key_hash 替代 hash
  - 使用 key_prefix 替代 prefix
  - 添加唯一 id 字段
  - 使用 MySQL 格式时间戳
- 修复 Key 撤销使用数组索引的问题,改用稳定的 key_id
- 修复速率限制单位不一致:UI 改为"次/分钟"与后端一致
- 添加 random_bytes 异常处理
- 显示 key_prefix 便于识别

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 22:56:54 +08:00
772bd5b282 feat: 完善 UI 交互功能,菜单名称改为云桥
- 添加 AJAX 处理器:清除日志、生成/撤销 API Key
- 添加 API 设置保存功能
- 更新 source-editor.php 使用新设计系统
- 菜单名称从"文派云桥"简化为"云桥"
- 补充 CSS 返回链接样式

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 22:49:04 +08:00
86c907c7af feat: WPBridge v0.5.0 - 古腾堡风格界面重构
基于 WPMind 设计系统重构管理界面:

- 新增 CSS 变量设计令牌系统
- 新增 Tab 导航布局(更新源/设置/Cloud API/日志)
- 新增卡片式更新源列表
- 新增 Toast 通知组件
- 新增统计面板
- 统一按钮、徽章、开关等组件样式
- 响应式布局支持
- 更丰富的 i18n 字符串

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 21:50:30 +08:00
9e4b6bd2b7 fix: 修复 RestController 中错误的方法调用
将 get_update_info() 改为 get_info(),与 HandlerInterface 接口定义保持一致。

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 20:31:10 +08:00
c2432f74cd fix: 修复 Codex v0.4.0 代码评审发现的问题
HIGH 级别修复:
- ApiKeyManager: API Key 改为哈希存储 (password_hash)
- ApiKeyManager: generate() 添加权限检查
- RestController: 修复 X-Forwarded-For 伪造问题
  - 添加 get_client_ip() 方法
  - 只在可信代理环境下信任 X-Forwarded-For
  - 添加 wpbridge_trusted_proxies 过滤器
- RestController: URL 参数传递 API Key 添加警告日志
- RestController: wenpai-git repo 参数添加严格验证

MEDIUM 级别修复:
- RestController: 路由正则限制为 owner/repo 格式
- RestController: API 使用记录改为缓存批量更新
  - 每 50 次写入数据库,减少 I/O
- RestController: /status 端点移除敏感配置信息

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 20:23:07 +08:00
f2d0cf8a49 feat: WPBridge v0.4.0 - Cloud API
REST API 端点:
- GET /wpbridge/v1/sources - 获取所有更新源
- GET /wpbridge/v1/sources/{id} - 获取单个更新源
- GET /wpbridge/v1/check/{source_id} - 检查更新源状态
- GET /wpbridge/v1/plugins/{slug}/info - 获取插件信息
- GET /wpbridge/v1/themes/{slug}/info - 获取主题信息
- GET /wpbridge/v1/wenpai-git/{repo}/releases - 菲码源库 Releases
- GET /wpbridge/v1/status - API 状态

API 认证:
- X-WPBridge-API-Key Header
- Authorization Bearer Token
- api_key 查询参数

API Key 管理:
- ApiKeyManager: Key 生成、验证、撤销
- 支持过期时间设置
- 使用统计记录

速率限制:
- 基于 IP 或 API Key 的限流
- 可配置每分钟请求数
- 429 响应包含 retry_after

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 20:18:51 +08:00
7bb18002f7 fix: 修复 Codex v0.3.0 代码评审发现的问题
HIGH 级别修复:
- WebhookHandler: 添加 SSRF 防护 (Validator::is_valid_url)
- AIGateway: 自定义端点添加 SSRF 验证
- AIGateway: 白名单域名匹配改为大小写不敏感
- CommercialManager: 文件读取添加路径遍历防护 (realpath)
- GroupModel: from_array() 添加输入类型验证和清理
- GroupManager: add/remove_source_to_group 添加权限检查

MEDIUM 级别修复:
- NotificationManager: 添加 5 分钟速率限制防止通知轰炸
- NotificationManager: 允许第三方扩展通知处理器
- EmailHandler: 添加收件人邮箱格式验证
- EmailHandler: 移除自定义 From 头避免 SPF/DKIM 问题
- CommercialManager: lock/unlock_version 添加权限检查
- CommercialManager: 商业插件列表支持过滤器扩展
- GroupManager: toggle 方法改进原子性,先更新分组再更新源
- AbstractAdapter: 正则匹配添加错误处理

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 20:14:16 +08:00
16c121aba7 feat: WPBridge v0.3.0 - AI 桥接层 + 源分组 + 商业插件支持
源分组管理:
- GroupModel: 源分组数据模型
- GroupManager: 分组 CRUD、批量管理、共享认证

AI 桥接层:
- AIGateway: pre_http_request 拦截器
- 支持透传模式和 WPMind 集成
- 用户可配置白名单
- AdapterInterface: 适配器接口
- YoastAdapter: Yoast SEO Premium AI 适配
- RankMathAdapter: Rank Math Content AI 适配

商业插件支持:
- CommercialManager: 商业插件检测和管理
- 版本锁定功能
- EDD/WooCommerce Licensing 检测
- 更新源覆盖逻辑

通知系统:
- NotificationManager: 统一通知管理
- EmailHandler: 邮件通知(HTML 模板)
- WebhookHandler: Webhook 通知
  - 支持 Slack/Discord/Teams 格式
  - HMAC 签名验证

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 20:05:30 +08:00
fe4095db80 fix: 修复 Codex 代码评审发现的问题
HIGH 级别修复:
- AdminPage.php: 移除重复的 Logger 导入
- AdminPage.php: 修复 auth_token 双重加密问题
- AdminPage.php: 添加 action 参数白名单验证
- CacheManager.php: get_stats() 使用 $wpdb->prepare()
- source-editor.php: 不显示加密后的 token,使用占位符
- Validator.php: DNS 解析失败时视为本地地址(SSRF 防护)

MEDIUM 级别修复:
- BridgeCommand.php: 使用 WordPress 文件系统 API
- SourceModel.php: 改进 auth_token 解密回退逻辑
- SourceModel.php: 添加 URL 协议验证 (http/https)
- Encryption.php: 使用随机生成的密钥替代站点 URL 哈希

LOW 级别修复:
- BackgroundUpdater.php: 移除 PHP 8.0 联合类型语法
- Plugin.php: 使用 wp_cache_flush_group() 如果可用
- Validator.php: 添加 IPv6 私有地址检查
- uninstall.php: 清理 wpbridge_encryption_key 选项

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 19:59:13 +08:00
546304fb4a feat: WPBridge v0.2.0 - 完整插件实现
v0.1.0 核心功能:
- 更新源管理 (SourceManager, SourceModel, SourceType)
- 插件/主题更新器 (PluginUpdater, ThemeUpdater)
- 缓存系统 (CacheManager, HealthChecker, FallbackStrategy)
- 安全模块 (Validator, Encryption)
- 管理界面 (AdminPage, templates, CSS, JS)
- 预设源支持 (ArkPress, AspireCloud)

v0.2.0 新增功能:
- 性能优化 (ParallelRequestManager, RequestDeduplicator)
- 条件请求 (ConditionalRequest - ETag/Last-Modified)
- 后台更新 (BackgroundUpdater - WP-Cron)
- Git 平台支持 (GitHub, GitLab, Gitee handlers)
- WP-CLI 命令 (wp bridge source/check/cache/diagnose/config)

安全修复:
- SQL 注入防护 ($wpdb->prepare)
- GET 参数清理 (sanitize_text_field)
- auth_token 加密存储 (AES-256-CBC)
- 缓存键哈希 (md5 + site_url)
- 卸载清理 (uninstall.php)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 19:52:27 +08:00
7 changed files with 6 additions and 3673 deletions

6
.gitignore vendored
View file

@ -10,3 +10,9 @@ dist/
CLAUDE.md
.agent/
docs/
ARCHITECTURE.md
DESIGN.md
DEVELOPMENT-PLAN.md
DISCUSSION.md
RESEARCH.md
ROADMAP.md

View file

@ -1,498 +0,0 @@
# WPBridge 业务流程与架构设计

> 详细的业务流程图和系统架构

*创建日期: 2026-02-04*

---

## 1. 核心业务流程

### 1.1 更新源桥接流程

```
┌─────────────────────────────────────────────────────────────────┐
│ WordPress 更新检查流程 │
└─────────────────────────────────────────────────────────────────┘

WordPress 核心 WPBridge 外部源
│ │ │
│ 1. 触发更新检查 │ │
│ (wp_update_plugins) │ │
│──────────────────────────────>│ │
│ │ │
│ │ 2. 检查是否有自定义源 │
│ │ (查询 wpbridge_sources) │
│ │ │
│ │ 3. 遍历匹配的源 │
│ │──────────────────────────────>
│ │ │
│ │ 4. 获取版本信息 │
│ │<──────────────────────────────
│ │ │
│ │ 5. 缓存结果 │
│ │ (transient) │
│ │ │
│ 6. 返回更新信息 │ │
│<──────────────────────────────│ │
│ │ │
│ 7. 显示更新通知 │ │
│ │ │
```

### 1.2 更新下载流程

```
┌─────────────────────────────────────────────────────────────────┐
│ 插件/主题下载流程 │
└─────────────────────────────────────────────────────────────────┘

用户点击更新 WPBridge 外部源
│ │ │
│ 1. 触发下载 │ │
│ (upgrader_pre_download) │ │
│──────────────────────────────>│ │
│ │ │
│ │ 2. 检查是否需要桥接 │
│ │ (匹配 slug) │
│ │ │
│ │ 3. 获取下载 URL │
│ │ (可能需要认证) │
│ │──────────────────────────────>
│ │ │
│ │ 4. 下载 ZIP 包 │
│ │<──────────────────────────────
│ │ │
│ │ 5. 安全检查 │
│ │ (哈希/大小/结构) │
│ │ │
│ 6. 返回本地文件路径 │ │
│<──────────────────────────────│ │
│ │ │
│ 7. WordPress 安装更新 │ │
│ │ │
```

### 1.3 AI 桥接流程

```
┌─────────────────────────────────────────────────────────────────┐
│ AI 请求桥接流程 │
└─────────────────────────────────────────────────────────────────┘

第三方插件 WPBridge AI 服务
(如 AI Engine) │ │
│ │ │
│ 1. 发起 HTTP 请求 │ │
│ (api.openai.com) │ │
│──────────────────────────────>│ │
│ │ │
│ │ 2. 白名单检查 │
│ │ (是否在拦截列表) │
│ │ │
│ │ 3. 模式判断 │
│ │ ┌─────────────────────────┐│
│ │ │ MODE_DISABLED → 放行 ││
│ │ │ MODE_PASSTHROUGH → 转发 ││
│ │ │ MODE_WPMIND → WPMind ││
│ │ └─────────────────────────┘│
│ │ │
│ │ 4a. 透传模式 │
│ │──────────────────────────────>
│ │ (用户指定端点) │
│ │ │
│ │ 4b. WPMind 模式 │
│ │──────> WPMind ──────────────>
│ │ (国内 AI 服务) │
│ │ │
│ 5. 返回响应 │ │
│<──────────────────────────────│ │
│ │ │
```

---

## 2. 系统架构

### 2.1 整体架构图

```
┌─────────────────────────────────────────────────────────────────┐
│ WPBridge 架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Admin Layer │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ AdminPage │ │ SourceEditor│ │ AISettings │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Core Layer │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Plugin │ │ Settings │ │ Logger │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────┴──────────────────────────────┐ │
│ │ │ │
│ │ ┌─────────────────────┐ ┌─────────────────────┐ │ │
│ │ │ UpdateSource │ │ AIBridge │ │ │
│ │ │ Module │ │ Module │ │ │
│ │ │ │ │ │ │ │
│ │ │ ┌───────────────┐ │ │ ┌───────────────┐ │ │ │
│ │ │ │SourceManager │ │ │ │ Interceptor │ │ │ │
│ │ │ └───────────────┘ │ │ └───────────────┘ │ │ │
│ │ │ ┌───────────────┐ │ │ ┌───────────────┐ │ │ │
│ │ │ │PluginUpdater │ │ │ │ WPMindBridge │ │ │ │
│ │ │ └───────────────┘ │ │ └───────────────┘ │ │ │
│ │ │ ┌───────────────┐ │ │ ┌───────────────┐ │ │ │
│ │ │ │ ThemeUpdater │ │ │ │ Passthrough │ │ │ │
│ │ │ └───────────────┘ │ │ └───────────────┘ │ │ │
│ │ │ │ │ │ │ │
│ │ └─────────────────────┘ └─────────────────────┘ │ │
│ │ │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Handler Layer │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ JSON │ │ GitHub │ │ GitLab │ │ WenPai │ │ │
│ │ │ Handler │ │ Handler │ │ Handler │ │ Handler │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```

### 2.2 目录结构

```
wpbridge/
├── wpbridge.php # 主文件
├── uninstall.php # 卸载脚本
├── CHANGELOG.md # 更新日志
├── includes/
│ ├── Core/
│ │ ├── Plugin.php # 插件主类
│ │ ├── Loader.php # 自动加载
│ │ ├── Settings.php # 设置管理
│ │ ├── Logger.php # 日志系统
│ │ └── Encryption.php # 加密工具
│ │
│ ├── UpdateSource/
│ │ ├── SourceManager.php # 更新源管理
│ │ ├── SourceModel.php # 数据模型
│ │ ├── PluginUpdater.php # 插件更新器
│ │ ├── ThemeUpdater.php # 主题更新器
│ │ ├── CacheManager.php # 缓存管理
│ │ └── Handlers/
│ │ ├── HandlerInterface.php # 统一接口
│ │ ├── JsonHandler.php # JSON API
│ │ ├── GitHubHandler.php # GitHub
│ │ ├── GitLabHandler.php # GitLab
│ │ └── WenPaiGitHandler.php # 菲码源库
│ │
│ ├── AIBridge/
│ │ ├── AIGateway.php # AI 网关
│ │ ├── Interceptor.php # 请求拦截
│ │ ├── WPMindBridge.php # WPMind 桥接
│ │ ├── Passthrough.php # 透传模式
│ │ └── Adapters/
│ │ ├── AdapterInterface.php
│ │ ├── YoastAdapter.php
│ │ └── RankMathAdapter.php
│ │
│ └── Admin/
│ ├── AdminPage.php # 管理页面
│ ├── SourceEditor.php # 更新源编辑器
│ └── AISettings.php # AI 设置
├── templates/
│ └── admin/
│ ├── settings.php
│ ├── source-list.php
│ ├── source-editor.php
│ └── ai-settings.php
├── assets/
│ ├── css/
│ │ └── admin.css
│ └── js/
│ └── admin.js
└── languages/
└── wpbridge.pot
```

---

## 3. 数据模型

### 3.1 更新源数据结构

```php
// wp_options: wpbridge_sources
[
[
'id' => 'src_abc123', // 唯一标识
'name' => 'My Plugin Source', // 显示名称
'type' => 'json', // json|github|gitlab|wenpai|zip
'slug' => 'my-plugin', // 插件/主题 slug
'item_type' => 'plugin', // plugin|theme
'source_url' => 'https://...', // 更新源地址
'auth_type' => 'token', // none|token|basic|oauth
'auth_token' => 'encrypted:...', // 加密存储
'branch' => 'main', // Git 分支(可选)
'enabled' => true, // 是否启用
'priority' => 10, // 优先级
'created_at' => '2026-02-04 10:00:00',
'updated_at' => '2026-02-04 10:00:00',
],
// ...
]
```

### 3.2 缓存数据结构

```php
// transient: wpbridge_update_cache_{slug}
[
'version' => '2.0.0',
'download_url' => 'https://...',
'tested' => '6.4',
'requires' => '5.9',
'requires_php' => '7.4',
'last_checked' => 1707012000,
'source_id' => 'src_abc123',
]

// transient: wpbridge_source_health_{source_id}
[
'status' => 'healthy', // healthy|degraded|failed
'last_check' => 1707012000,
'error_count' => 0,
'last_error' => null,
]
```

### 3.3 AI 桥接配置

```php
// wp_options: wpbridge_ai_settings
[
'enabled' => true,
'mode' => 'wpmind', // disabled|passthrough|wpmind
'custom_endpoint' => '', // 透传模式的目标端点
'whitelist' => [ // 拦截白名单
'api.openai.com',
'api.anthropic.com',
],
'adapters' => [ // 启用的适配器
'yoast' => true,
'rankmath' => false,
],
]
```

---

## 4. 核心类设计

### 4.1 SourceHandlerInterface

```php
<?php
namespace WPBridge\UpdateSource\Handlers;

interface SourceHandlerInterface {
/**
* 获取处理器能力
* @return array ['auth' => [], 'version' => [], 'download' => []]
*/
public function getCapabilities(): array;

/**
* 获取最新版本信息
* @param string $identifier 源标识URL/仓库地址)
* @param array $options 选项(认证信息等)
* @return VersionInfo|null
*/
public function getLatestVersion(string $identifier, array $options = []): ?VersionInfo;

/**
* 获取下载 URL
* @param string $identifier 源标识
* @param string $version 版本号
* @param array $options 选项
* @return string|null
*/
public function getDownloadUrl(string $identifier, string $version, array $options = []): ?string;

/**
* 验证源可用性
* @param string $identifier 源标识
* @param array $options 选项
* @return HealthStatus
*/
public function checkHealth(string $identifier, array $options = []): HealthStatus;
}
```

### 4.2 VersionInfo 值对象

```php
<?php
namespace WPBridge\UpdateSource;

class VersionInfo {
public string $version;
public string $downloadUrl;
public ?string $tested = null;
public ?string $requires = null;
public ?string $requiresPhp = null;
public ?string $changelog = null;
public ?string $hash = null;
public ?int $fileSize = null;
public int $checkedAt;

public function __construct(string $version, string $downloadUrl) {
$this->version = $version;
$this->downloadUrl = $downloadUrl;
$this->checkedAt = time();
}

public function toArray(): array {
return [
'version' => $this->version,
'download_url' => $this->downloadUrl,
'tested' => $this->tested,
'requires' => $this->requires,
'requires_php' => $this->requiresPhp,
'changelog' => $this->changelog,
'hash' => $this->hash,
'file_size' => $this->fileSize,
'checked_at' => $this->checkedAt,
];
}
}
```

### 4.3 HealthStatus 值对象

```php
<?php
namespace WPBridge\UpdateSource;

class HealthStatus {
const STATUS_HEALTHY = 'healthy';
const STATUS_DEGRADED = 'degraded';
const STATUS_FAILED = 'failed';

public string $status;
public int $responseTime; // ms
public ?string $error = null;
public int $checkedAt;

public static function healthy(int $responseTime): self {
$status = new self();
$status->status = self::STATUS_HEALTHY;
$status->responseTime = $responseTime;
$status->checkedAt = time();
return $status;
}

public static function failed(string $error): self {
$status = new self();
$status->status = self::STATUS_FAILED;
$status->responseTime = 0;
$status->error = $error;
$status->checkedAt = time();
return $status;
}
}
```

---

## 5. WordPress 钩子集成

### 5.1 更新检查钩子

```php
// 插件更新检查
add_filter('pre_set_site_transient_update_plugins', [$this, 'checkPluginUpdates'], 10, 1);

// 主题更新检查
add_filter('pre_set_site_transient_update_themes', [$this, 'checkThemeUpdates'], 10, 1);

// 插件信息 API
add_filter('plugins_api', [$this, 'pluginInfo'], 20, 3);

// 主题信息 API
add_filter('themes_api', [$this, 'themeInfo'], 20, 3);

// 下载包过滤
add_filter('upgrader_pre_download', [$this, 'filterDownload'], 10, 3);
```

### 5.2 AI 拦截钩子

```php
// HTTP 请求拦截(优先级 1最早执行
add_filter('pre_http_request', [$this, 'interceptAIRequest'], 1, 3);
```

---

## 6. 错误处理与日志

### 6.1 错误码定义

```php
class ErrorCodes {
// 源相关错误 (1xxx)
const SOURCE_NOT_FOUND = 1001;
const SOURCE_UNREACHABLE = 1002;
const SOURCE_INVALID_RESPONSE = 1003;
const SOURCE_AUTH_FAILED = 1004;

// 下载相关错误 (2xxx)
const DOWNLOAD_FAILED = 2001;
const DOWNLOAD_HASH_MISMATCH = 2002;
const DOWNLOAD_SIZE_EXCEEDED = 2003;
const DOWNLOAD_INVALID_ZIP = 2004;

// AI 桥接错误 (3xxx)
const AI_WPMIND_UNAVAILABLE = 3001;
const AI_ENDPOINT_UNREACHABLE = 3002;
const AI_RESPONSE_INVALID = 3003;

// 配置错误 (4xxx)
const CONFIG_INVALID = 4001;
const CONFIG_ENCRYPTION_FAILED = 4002;
}
```

### 6.2 日志级别

```php
class Logger {
const LEVEL_DEBUG = 'debug';
const LEVEL_INFO = 'info';
const LEVEL_WARNING = 'warning';
const LEVEL_ERROR = 'error';

public function log(string $level, string $message, array $context = []): void;
public function debug(string $message, array $context = []): void;
public function info(string $message, array $context = []): void;
public function warning(string $message, array $context = []): void;
public function error(string $message, array $context = []): void;
}
```

---

*最后更新: 2026-02-04*

1509
DESIGN.md

File diff suppressed because it is too large Load diff

View file

@ -1,417 +0,0 @@
# WPBridge 开发计划

> 完整的开发计划和任务分解

*创建日期: 2026-02-04*

---

## 一、项目概述

### 1.1 项目定位

**WPBridge文派云桥** - 自定义源桥接器,让用户完全控制 WordPress 的外部连接。

### 1.2 核心价值

1. **自定义更新源桥接** - 支持自托管更新服务器、商业插件更新源
2. **性能优化** - 并行请求、智能缓存、减少后台加载时间
3. **AI 服务桥接** - OpenAI API 兼容层,可选依赖 WPMind

### 1.3 非目标

- 不替代 WordPress.org 官方源(由文派叶子 WPCY 负责)
- 不提供镜像/CDN 服务
- 不破解/绕过商业插件授权

---

## 二、版本规划

```
v0.1.0 MVP2-3 周)
v0.2.0 性能优化 + Git 支持2-3 周)
v0.3.0 AI 桥接 + 商业插件2-3 周)
v0.4.0 Cloud API可选1-2 周)
v1.0.0 正式发布1-2 周)
```

---

## 三、v0.1.0 MVP 详细计划

### 3.1 目标

实现最小可用的更新源桥接功能,确保基础稳定性。

### 3.2 范围

| 包含 | 不包含(移至后续版本)|
|------|----------------------|
| JSON API 桥接 | Git 仓库支持 |
| 预置源文派开源、ArkPress、AspireCloud| WP-CLI |
| 基础缓存和降级 | 诊断工具 |
| 简单管理界面 | 配置导入导出 |
| 安全基础 | FAIR 支持 |

### 3.3 任务分解

#### 阶段 1插件骨架Day 1-2

```
任务 1.1: 创建插件主文件
- wpbridge.php插件头信息、激活/停用钩子)
- 预计2 小时

任务 1.2: 自动加载器
- includes/Core/Loader.php
- PSR-4 风格自动加载
- 预计1 小时

任务 1.3: 插件主类
- includes/Core/Plugin.php
- 单例模式,初始化各模块
- 预计2 小时

任务 1.4: 设置管理
- includes/Core/Settings.php
- wp_options 读写封装
- 预计2 小时
```

#### 阶段 2数据模型Day 3-4

```
任务 2.1: 源类型枚举
- includes/UpdateSource/SourceType.php
- 统一定义所有源类型
- 预计1 小时

任务 2.2: 更新源模型
- includes/UpdateSource/SourceModel.php
- 数据结构、验证、序列化
- 预计2 小时

任务 2.3: 源管理器
- includes/UpdateSource/SourceManager.php
- CRUD 操作、预置源加载
- 预计3 小时

任务 2.4: 预置源配置
- includes/UpdateSource/PresetSources.php
- 文派开源、ArkPress、AspireCloud
- 预计2 小时
```

#### 阶段 3核心桥接Day 5-8

```
任务 3.1: 处理器接口
- includes/UpdateSource/Handlers/HandlerInterface.php
- 统一接口定义
- 预计1 小时

任务 3.2: JSON 处理器
- includes/UpdateSource/Handlers/JsonHandler.php
- Plugin Update Checker 格式兼容
- 预计3 小时

任务 3.3: ArkPress 处理器
- includes/UpdateSource/Handlers/ArkPressHandler.php
- AspireCloud API 兼容
- 预计3 小时

任务 3.4: AspireCloud 处理器
- includes/UpdateSource/Handlers/AspireCloudHandler.php
- 预计2 小时

任务 3.5: 插件更新器
- includes/UpdateSource/PluginUpdater.php
- pre_set_site_transient_update_plugins 钩子
- plugins_api 钩子
- 预计4 小时

任务 3.6: 主题更新器
- includes/UpdateSource/ThemeUpdater.php
- pre_set_site_transient_update_themes 钩子
- themes_api 钩子
- 预计3 小时
```

#### 阶段 4缓存与降级Day 9-10

```
任务 4.1: 缓存管理器
- includes/Cache/CacheManager.php
- Transient 缓存封装
- 预计2 小时

任务 4.2: 源健康检查
- includes/Cache/HealthChecker.php
- 连通性测试、状态缓存
- 预计2 小时

任务 4.3: 降级策略
- includes/Cache/FallbackStrategy.php
- 过期缓存兜底、失败冷却
- 预计2 小时
```

#### 阶段 5安全与日志Day 11-12

```
任务 5.1: 输入校验
- includes/Security/Validator.php
- URL 格式、版本号、JSON 结构
- 预计2 小时

任务 5.2: 密钥加密
- includes/Security/Encryption.php
- API Key 加密存储
- 预计2 小时

任务 5.3: 日志系统
- includes/Core/Logger.php
- 调试日志、错误日志
- 预计2 小时
```

#### 阶段 6管理界面Day 13-15

```
任务 6.1: 管理页面
- includes/Admin/AdminPage.php
- 设置页面注册
- 预计2 小时

任务 6.2: 源列表界面
- templates/admin/source-list.php
- WP_List_Table 实现
- 预计3 小时

任务 6.3: 源编辑表单
- templates/admin/source-editor.php
- 添加/编辑更新源
- 预计3 小时

任务 6.4: 样式和脚本
- assets/css/admin.css
- assets/js/admin.js
- 预计2 小时
```

### 3.4 文件结构

```
wpbridge/
├── wpbridge.php # 主文件
├── includes/
│ ├── Core/
│ │ ├── Plugin.php # 插件主类
│ │ ├── Loader.php # 自动加载
│ │ ├── Settings.php # 设置管理
│ │ └── Logger.php # 日志系统
│ │
│ ├── UpdateSource/
│ │ ├── SourceType.php # 源类型枚举
│ │ ├── SourceModel.php # 数据模型
│ │ ├── SourceManager.php # 源管理器
│ │ ├── PresetSources.php # 预置源配置
│ │ ├── PluginUpdater.php # 插件更新器
│ │ ├── ThemeUpdater.php # 主题更新器
│ │ └── Handlers/
│ │ ├── HandlerInterface.php
│ │ ├── JsonHandler.php
│ │ ├── ArkPressHandler.php
│ │ └── AspireCloudHandler.php
│ │
│ ├── Cache/
│ │ ├── CacheManager.php # 缓存管理
│ │ ├── HealthChecker.php # 健康检查
│ │ └── FallbackStrategy.php # 降级策略
│ │
│ ├── Security/
│ │ ├── Validator.php # 输入校验
│ │ └── Encryption.php # 密钥加密
│ │
│ └── Admin/
│ └── AdminPage.php # 管理页面
├── templates/
│ └── admin/
│ ├── source-list.php
│ └── source-editor.php
└── assets/
├── css/
│ └── admin.css
└── js/
└── admin.js
```

### 3.5 验收标准

1. **功能验收**
- [ ] 可添加自定义 JSON 更新源
- [ ] 预置源(文派开源)可正常检查更新
- [ ] 更新信息正确显示在 WordPress 后台
- [ ] 可下载并安装更新

2. **稳定性验收**
- [ ] 源不可用时不阻塞后台
- [ ] 缓存正常工作
- [ ] 错误信息用户友好

3. **安全验收**
- [ ] URL 格式校验有效
- [ ] API Key 加密存储
- [ ] 无 XSS/SQL 注入风险

---

## 四、v0.2.0 性能优化 + Git 支持

### 4.1 目标

实现性能优化核心功能,支持 Git 仓库作为更新源。

### 4.2 关键任务

#### 性能优化
- [ ] 并行请求管理器ParallelRequestManager
- [ ] 请求去重器RequestDeduplicator
- [ ] 条件请求ConditionalRequest
- [ ] 缓存分层(对象缓存 + DB
- [ ] WP-Cron 后台预热BackgroundUpdater

#### Git 仓库支持
- [ ] GitHub 处理器GitHubHandler
- [ ] GitLab 处理器GitLabHandler
- [ ] Gitee 处理器GiteeHandler
- [ ] 菲码源库处理器WenPaiGitHandler
- [ ] 私有仓库认证

#### WP-CLI
- [ ] `wp bridge source` 命令组
- [ ] `wp bridge check` 命令
- [ ] `wp bridge cache` 命令
- [ ] `wp bridge diagnose` 命令
- [ ] `wp bridge config` 命令

#### 诊断工具
- [ ] 诊断页面
- [ ] 源连通性测试
- [ ] 诊断报告导出

---

## 五、v0.3.0 AI 桥接 + 商业插件

### 5.1 目标

实现 AI 服务桥接和商业插件支持。

### 5.2 关键任务

#### AI 桥接
- [ ] AI 设置数据模型AISettings
- [ ] AI 桥接主类AIBridge
- [ ] OpenAI 代理OpenAIProxy
- [ ] WPMind 转发器WPMindForwarder
- [ ] 白名单管理界面

#### 商业插件
- [ ] 商业插件检测
- [ ] 更新源覆盖
- [ ] 版本锁定
- [ ] 回滚机制

#### 源分组
- [ ] 源组数据模型
- [ ] 批量管理界面

---

## 六、v0.4.0 Cloud API

### 6.1 目标

提供云端 API 服务。

### 6.2 关键任务

- [ ] REST API 端点
- [ ] 认证机制
- [ ] 限流策略
- [ ] 文派叶子集成示例

---

## 七、v1.0.0 正式发布

### 7.1 目标

稳定版本,完善文档和用户体验。

### 7.2 关键任务

- [ ] 用户指南
- [ ] 开发者文档
- [ ] API 文档
- [ ] 设置向导
- [ ] 状态仪表板
- [ ] GitHub Release
- [ ] 菲码源库 Release

---

## 八、技术规范

### 8.1 编码规范

- PHP 7.4+ 兼容
- WordPress 编码标准
- PSR-4 自动加载
- 类型声明PHP 7.4 风格)

### 8.2 测试要求

- 单元测试覆盖核心逻辑
- 集成测试覆盖 WordPress 钩子
- 手动测试覆盖 UI 交互

### 8.3 安全要求

- 所有用户输入必须校验
- 敏感数据加密存储
- 遵循 WordPress 安全最佳实践

---

## 九、风险与缓解

| 风险 | 影响 | 缓解措施 |
|------|------|----------|
| 第三方 API 变更 | 处理器失效 | 模块化设计,易于更新 |
| 性能问题 | 后台卡顿 | 缓存优先,异步处理 |
| 安全漏洞 | 数据泄露 | 代码审计,安全测试 |
| 兼容性问题 | 插件冲突 | 最小化钩子使用,命名空间隔离 |

---

## 十、里程碑

| 里程碑 | 目标日期 | 交付物 |
|--------|----------|--------|
| M1: MVP 完成 | +3 周 | v0.1.0 可用版本 |
| M2: 性能优化 | +6 周 | v0.2.0 性能版本 |
| M3: AI 桥接 | +9 周 | v0.3.0 完整版本 |
| M4: 正式发布 | +12 周 | v1.0.0 稳定版本 |

---

*最后更新: 2026-02-04*

View file

@ -1,463 +0,0 @@
# WPBridge 讨论记录

> 产品设计和技术讨论的记录

*创建日期: 2026-02-04*

---

## 2026-02-04 - 最终定位确定

### 背景

经过讨论,明确了 WPBridge 在文派生态中的定位:

- **文派叶子 (WPCY)** - 官方源加速WordPress.org → 文派镜像),面向普通用户
- **WPBridge (文派云桥)** - 自定义源桥接,面向开发者/高级用户

### 最终定位

> **自定义源桥接器 - 让用户完全控制 WordPress 的外部连接**

### 核心功能

```
WPBridge (文派云桥)
├── 📦 更新源桥接
│ ├── 第三方自托管插件/主题更新服务器
│ ├── 商业插件自定义更新源
│ ├── 私有仓库支持 (GitHub/GitLab)
│ └── 更新源管理界面
├── 🤖 AI 桥接
│ ├── OpenAI API 兼容层
│ ├── 商业插件 AI 适配器
│ └── 可选依赖 WPMind
└── 🔧 高级配置
├── 自定义 HTTP 头
├── 认证方式配置
└── 代理设置
```

### 与文派叶子的分工

| 功能 | 文派叶子 (WPCY) | WPBridge |
|------|-----------------|----------|
| WordPress.org 加速 | ✅ 主要功能 | ❌ 不做 |
| 自托管更新服务器 | ❌ 不做 | ✅ 主要功能 |
| 商业插件更新源 | ❌ 不做 | ✅ 主要功能 |
| AI 服务桥接 | ❌ 不做 | ✅ 主要功能 |
| 目标用户 | 普通用户 | 开发者/高级用户 |

---

## 2026-02-04 - 愿景演进记录

### 初始愿景AI Gateway

最初从 WPMind 的 AI Gateway 功能讨论中独立出来,定位为:
- OpenAI API 兼容层
- 商业插件 AI 适配器

### 扩展愿景WordPress 云桥

讨论中发现更广阔的需求:
- 插件更新桥接
- 资源访问桥接
- 授权验证桥接

### 最终愿景:自定义源桥接器

明确与文派叶子的分工后,聚焦于:
- 自托管更新服务器
- 商业插件更新源
- AI 服务桥接

---

## 文派生态全景

```
文派生态 (WenPai.org)
├── 📦 WPMirror (wpmirror.com)
│ └── 镜像源基础设施
├── 🇨🇳 LitePress (litepress.cn)
│ └── WordPress 中国定制版
├── 🍃 文派叶子 WPCY (wpcy.com)
│ ├── 中国源加速
│ ├── 插件/主题更新加速
│ ├── 翻译下载优化
│ └── 面向普通用户
├── 🤖 WPMind 文派心思
│ └── 纯 AI 应用(国内 AI 服务)
└── 🌉 WPBridge 文派云桥
├── 自定义更新源桥接
├── 商业插件更新源
├── AI 服务桥接
└── 面向开发者/高级用户
```

---

## 待深入讨论

### 1. 更新源桥接技术细节

**问题**:如何实现自托管更新服务器的桥接?

**技术方案**
- 使用 `pre_set_site_transient_update_plugins` 钩子
- 使用 `pre_set_site_transient_update_themes` 钩子
- 自定义更新检查逻辑

**待讨论**
- 更新源 API 格式标准?
- 是否兼容现有的更新服务器方案?

---

### 2. 商业插件更新源

**问题**:如何处理商业插件的更新源覆盖?

**挑战**
- 不同商业插件有不同的更新机制
- 部分插件有授权验证
- 需要保持兼容性

**待讨论**
- 是否提供预置的商业插件配置?
- 如何处理授权验证?

---

### 3. AI 桥接与 WPMind 的关系

**问题**AI 桥接功能是否依赖 WPMind

**方案**
- 无 WPMind仅支持 OpenAI 兼容层(用户自己配置 API Key
- 有 WPMind支持国内 AI 服务商(使用 WPMind 的 Provider

**待讨论**
- 这种可选依赖的设计是否合理?

---

### 4. 与文派叶子的集成

**问题**WPBridge 是否需要与文派叶子集成?

**选项**
- A) 完全独立,互不干扰
- B) 检测文派叶子,提供互补功能
- C) 作为文派叶子的"高级扩展"

**待讨论**

---

### 5. 分发和定价

**问题**WPBridge 如何分发和定价?

**分发选项**
- GitHub Releases
- 文派官网
- WordPress.org如果符合规范

**定价选项**
- 完全免费开源
- 核心免费 + 高级功能付费
- 订阅制

**待讨论**

---

## 2026-02-04 - 预置源与自托管方案讨论

### 背景

讨论了 WPBridge 需要支持的预置更新源和自托管方案。

### 关键决策

#### 1. 预置更新源

| 源 | 类型 | 说明 |
|------|------|------|
| **文派开源更新源** | 预置(默认) | 文派生态的开源插件/主题更新源 |
| **AspireCloud** | 可选预置 | AspirePress 的 CDN/API |
| **FAIR** | 可选预置 | Linux Foundation 的去中心化方案 |

#### 2. 自托管方案支持

| 方案 | 说明 | 兼容方式 |
|------|------|----------|
| **ArkPress** | 文派开源的自托管组件AspireCloud 分叉版本,针对中国用户优化 | 原生支持 |
| **AspireCloud** | AspirePress 的开源镜像/CDN | API 兼容 |
| **UpdatePulse Server** | 支持授权管理的自托管服务器 | JSON API 兼容 |
| **WP Packages Update Server** | GitHub 上的开源方案 | JSON API 兼容 |
| **Plugin Update Checker 格式** | 事实上的行业标准 | 原生支持 |

#### 3. WP-CLI 命令规范

确定使用 `wp bridge` 作为命令前缀(而非 `wp wpbridge`)。

```bash
# 源管理
wp bridge source list # 列出所有源
wp bridge source add <url> [--type=json] # 添加源
wp bridge source remove <id> # 删除源
wp bridge source enable <id> # 启用源
wp bridge source disable <id> # 禁用源

# 更新检查
wp bridge check # 检查所有源
wp bridge check <slug> # 检查指定插件/主题

# 缓存管理
wp bridge cache clear # 清除所有缓存
wp bridge cache status # 查看缓存状态

# 诊断
wp bridge diagnose # 生成诊断报告
wp bridge test <source_id> # 测试源连通性

# 配置
wp bridge config export # 导出配置
wp bridge config import <file> # 导入配置
```

### 待讨论事项

#### 1. 源优先级和冲突处理

**问题**:如果同一个插件在多个源都有更新,如何处理?

**决策**:用户可设置优先级,默认选择版本号最高的

#### 2. 源分组和批量管理

**场景**:用户有多个来自同一厂商的商业插件

**决策**:引入"源组"概念支持批量管理v0.3.0

#### 3. 更新通知策略

**决策**:与 WordPress 原生更新通知合并,邮件/Webhook 作为高级功能

#### 4. 版本锁定

**决策**v0.2.0 实现基础版本锁定功能

#### 5. 安全扫描集成

**决策**本地哈希校验为基础VirusTotal/Patchstack 作为付费功能

#### 6. 统计和分析

**决策**:默认不收集,匿名统计作为可选(需用户同意)

#### 7. 白标/OEM 支持

**决策**作为付费功能v1.0.0 后考虑

---

## 2026-02-04 - Codex 深度讨论(第二轮)

### 讨论主题

基于市场研究报告,与 Codex 进行了 5 个核心问题的深度讨论。

### 关键结论

#### 1. 性能优化作为核心卖点

**结论:应当成为核心价值主张之一**

**"双锚点"价值主张:**
- 对普通痛点:后台加载快
- 对目标用户:可控的自定义源桥接

**7 项性能优化措施:**
1. 请求合并与并行(`Requests::request_multiple`
2. 智能缓存(结果缓存 + 健康状态缓存)
3. 请求去重(短时间合并窗口 + 锁)
4. 分组检查(同一厂商多插件共享一次请求)
5. 条件请求(`If-Modified-Since` / `ETag`
6. 缓存分层Redis/Memcached 优先DB 兜底)
7. 失败兜底(返回旧版本信息,不阻塞后台)

#### 2. 与 FAIR 的关系

- WPBridge 把 FAIR 作为**可选更新源**之一
- 默认不替换 WordPress.org
- 产品表述:**"WPBridge 不替换官方源,只做用户自定义桥接"**

#### 3. 商业插件法律边界

**稳妥策略:**
- 以"配置框架"优先,不预置具体厂商地址
- 仅在得到授权时提供预置
- 坚持"用户提供授权信息"
- 避免"绕过授权"功能
- 本地缓存仅限站点内

**对外表述:**
> "WPBridge 不破解、不绕过授权,仅提供合规的配置与转发能力。"

#### 4. 中国市场特殊性

**与 WPCY 协同:**
- WPBridge 检测 WPCY 存在时,官方源自动走 WPCY
- 避免重复功能

**中国特色功能:**
- 源级别的"优选地域节点/备用源"
- 国内 Git 供应商支持Gitee
- 更短超时 + 智能重试策略

#### 5. 技术架构建议

**WP-Cron 后台任务:**
- 引入 `wpbridge_update_sources` 定时任务
- 前台仅读取缓存,避免后台页面发起大量请求

**降级策略:**
1. 优先使用"上次成功缓存"
2. 标记源为 `degraded/failed`
3. 自动切换备用源
4. 管理界面提示,不阻塞后台

---

## 2026-02-04 - Codex 评审反馈

### 评审概要

使用 OpenAI Codex (gpt-5.2-codex-xhigh) 对项目文档进行了全面评审。

### 主要反馈

#### 1. 项目定位与边界

**认可:**
- 定位整体清晰,"自定义源桥接"与"官方源加速"形成互补
- 目标用户画像准确

**建议:**
- 边界需要再硬化,明确"非目标"
- 云 API 定义为"桥接能力的远程形态",不承担镜像/加速职责
- 补充"使用动机"优先级排序

#### 2. 技术架构

**建议改进:**
- 更新源适配器做成**统一接口+能力矩阵**
- **缓存与降级策略**要提前设计
- **安全边界**URL 校验、密钥加密存储、下载包校验
- AI 拦截做成**显式白名单**
- 云 API 需明确认证、限流与可用性 SLA

#### 3. 路线图优先级

**建议调整:**
- 把"稳定性/可运维能力"前置
- 先做"通用自定义源"跑通,再添加预置模板
- AI 桥接可与核心解耦

#### 4. AI 桥接与 WPMind 依赖

**建议:**
- 明确"无 WPMind 时"的稳定行为
- 定义稳定接口层,减少直接耦合

#### 5. 定价策略

**建议:**
- 考虑"基础终身 + 更新/支持年费"混合模式
- 付费点围绕企业刚需

### 采纳决策

| 建议 | 决策 | 说明 |
|------|------|------|
| 明确"非目标" | ✅ 采纳 | 添加到 CLAUDE.md |
| 统一接口+能力矩阵 | ✅ 采纳 | 更新架构设计 |
| 缓存与降级策略 | ✅ 采纳 | 加入 v0.1.0 |
| 安全边界设计 | ✅ 采纳 | 加入 v0.1.0 |
| AI 拦截白名单 | ✅ 采纳 | 更新设计文档 |
| 稳定性前置 | ✅ 采纳 | 调整路线图 |
| 混合定价模式 | 🔄 待定 | 需进一步讨论 |

---

## 2026-02-04 - Codex 评审问题修复

### 问题清单与修复状态

#### HIGH 严重性

| 问题 | 状态 | 修复说明 |
|------|------|----------|
| 源类型不一致 | ✅ 已修复 | 创建统一的 `SourceType` 枚举包含所有类型json/github/gitlab/gitee/wenpai_git/zip/arkpress/aspirecloud/fair/puc更新数据模型引用 |
| AI 设置配置与实现不匹配 | ✅ 已修复 | 创建 `AISettings` 数据模型,`mode` 和 `whitelist` 由用户配置驱动,不再硬编码 |

#### MEDIUM 严重性

| 问题 | 状态 | 修复说明 |
|------|------|----------|
| Cloud API 不在路线图 | ✅ 已修复 | 添加 v0.4.0 版本专门处理 Cloud API |
| v0.1.0 范围太大 | ✅ 已修复 | 精简为 MVP移除 Git 支持、WP-CLI、诊断工具到 v0.2.0 |
| 性能优化未明确 | ✅ 已修复 | 性能优化明确放在 v0.2.0,作为该版本核心任务 |

### 修改的文件

1. **DESIGN.md**
- 添加 `SourceType` 枚举统一定义
- 添加类型与处理器映射表
- 更新数据模型引用枚举
- 重写 `AISettings` 和 `AIBridge` 类,配置驱动

2. **ROADMAP.md**
- 调整版本规划v0.1.0 → v0.2.0 → v0.3.0 → v0.4.0 → v1.0.0
- 精简 v0.1.0 范围为 MVP
- 性能优化移至 v0.2.0 核心任务
- 商业插件适配移至 v0.3.0
- 新增 v0.4.0 Cloud API

3. **DEVELOPMENT-PLAN.md**(新建)
- 完整的开发计划
- 详细的任务分解
- 文件结构设计
- 验收标准
- 风险与缓解
- 里程碑规划

---

## 下一步行动

1. [x] 深入讨论更新源桥接的技术细节
2. [x] 确定与文派叶子的集成方式
3. [x] 确定 AI 桥接与 WPMind 的依赖关系
4. [x] 确定分发和定价策略
5. [x] 完成业务流程和架构设计
6. [x] 修复 Codex 评审问题
7. [x] 创建完整开发计划
8. [ ] Codex 最终确认
9. [ ] 开始 v0.1.0 开发

---

*最后更新: 2026-02-04*

View file

@ -1,382 +0,0 @@
# WPBridge 市场研究报告

> WordPress 更新生态现状与 WPBridge 机会分析

*创建日期: 2026-02-04*

---

## 1. WordPress 更新生态现状

### 1.1 核心痛点:后台卡死问题

WordPress 后台慢是一个普遍问题,主要原因之一是**大量插件各自发起更新检查请求**

```
WordPress 后台加载时
├── 核心更新检查 → api.wordpress.org
├── 插件 A 更新检查 → plugin-a.com/api
├── 插件 B 更新检查 → plugin-b.com/api
├── 插件 C 授权验证 → license.plugin-c.com
├── 主题更新检查 → theme-vendor.com/api
├── ...(可能 10-50 个请求)
└── 结果:后台加载 5-30 秒
```

**问题根源:**
- 每个商业插件都有自己的更新服务器
- 每个插件独立发起 HTTP 请求
- 没有统一的缓存和批量机制
- 授权验证增加额外延迟
- 中国用户访问国外服务器更慢

### 1.2 生态碎片化

| 更新源类型 | 示例 | 问题 |
|-----------|------|------|
| WordPress.org | 官方免费插件 | 中国访问慢 |
| 商业插件自建 | Elementor Pro, ACF Pro | 各自为政 |
| GitHub Releases | 开发者插件 | 需要手动配置 |
| EDD Software Licensing | 大量商业插件 | 每个都要授权检查 |
| WooCommerce.com | WooCommerce 扩展 | 独立的更新系统 |
| Envato Market | ThemeForest 主题 | 又一个独立系统 |

---

## 2. 行业解决方案分析

### 2.1 FAIR Package Manager

**背景:** 2024年9月 WP Engine 事件后Linux Foundation 发起的去中心化项目

**定位:** 联邦式独立仓库Federated and Independent Repository

**核心特点:**
- 去中心化的插件/主题分发
- 多镜像源支持
- 由 Linux Foundation 治理
- 300+ 贡献者参与

**技术实现:**
- WordPress 插件形式
- 替换默认的 WordPress.org 更新源
- 支持多个可信源

**挑战:**
- 需要大规模采用才能有效
- 托管商需要主动支持
- 安全性担忧(多个潜在攻击点)
- 不解决商业插件问题

**与 WPBridge 的区别:**

| 方面 | FAIR | WPBridge |
|------|------|----------|
| 定位 | 基础设施替代 | 用户侧桥接器 |
| 目标 | 替换 WordPress.org | 补充自定义源 |
| 用户 | 所有 WordPress 用户 | 开发者/高级用户 |
| 商业插件 | 不直接解决 | 核心功能 |
| 依赖 | 需要生态采用 | 用户自主配置 |

### 2.2 Plugin Update Checker

**作者:** YahnisElsts

**定位:** 开发者库,用于自定义更新服务器

**特点:**
- PHP 库,嵌入插件代码
- 支持 JSON API、GitHub、GitLab
- 被大量商业插件使用
- 事实上的行业标准

**局限:**
- 每个插件独立集成
- 用户无法统一管理
- 不解决性能问题

### 2.3 现有更新管理插件

| 插件 | 功能 | 局限 |
|------|------|------|
| Easy Updates Manager | 控制自动更新 | 不支持自定义源 |
| ManageWP | 多站点管理 | SaaS 服务,需付费 |
| MainWP | 自托管多站点 | 复杂,面向代理商 |
| InfiniteWP | 多站点管理 | 不解决更新源问题 |

---

## 3. WPBridge 机会分析

### 3.1 差异化定位

```
市场空白
├── FAIR → 基础设施层(替换 WordPress.org
├── Plugin Update Checker → 开发者层(嵌入插件)
└── WPBridge → 用户层(统一管理自定义源)
├── 不替换 WordPress.org
├── 不需要修改插件代码
└── 用户自主配置和管理
```

### 3.2 核心价值主张

**对于企业用户:**
- 内网部署,私有仓库
- 供应链安全控制
- 合规性要求

**对于开发者:**
- 测试环境灵活配置
- 自托管插件分发
- 版本控制和回滚

**对于商业插件用户:**
- 统一管理多个更新源
- 减少授权验证延迟
- 备用更新渠道

### 3.3 性能优化机会

```
当前状态(无 WPBridge
├── 插件 A → HTTP 请求 1
├── 插件 B → HTTP 请求 2
├── 插件 C → HTTP 请求 3
└── 总计N 个串行请求

使用 WPBridge 后
├── WPBridge 统一检查
│ ├── 缓存命中 → 直接返回
│ ├── 批量请求 → 减少连接数
│ └── 并行处理 → 减少等待
└── 总计:显著减少请求时间
```

---

## 4. 竞争格局

### 4.1 直接竞争

| 竞品 | 定位 | WPBridge 优势 |
|------|------|---------------|
| FAIR | 基础设施替代 | 更轻量,用户自主 |
| AspirePress | 类似 FAIR | 同上 |

### 4.2 间接竞争

| 竞品 | 定位 | WPBridge 优势 |
|------|------|---------------|
| ManageWP | SaaS 多站点 | 自托管,无订阅 |
| MainWP | 自托管多站点 | 更简单,专注更新 |
| 文派叶子 | 官方源加速 | 自定义源,互补 |

### 4.3 合作机会

- **文派叶子**:官方源加速 + WPBridge 自定义源 = 完整解决方案
- **FAIR**:可以作为 WPBridge 的一个更新源
- **Plugin Update Checker**:兼容其 JSON 格式

---

## 5. 建议

### 5.1 核心功能优先级

| 优先级 | 功能 | 理由 |
|--------|------|------|
| P0 | 自定义 JSON 更新源 | 最通用,兼容 PUC |
| P0 | 缓存和性能优化 | 解决核心痛点 |
| P1 | GitHub/GitLab 支持 | 开发者刚需 |
| P1 | 源健康检查 | 稳定性保障 |
| P2 | 商业插件预置 | 提升易用性 |
| P3 | AI 桥接 | 差异化功能 |

### 5.2 差异化策略

1. **性能优先**:强调减少后台加载时间
2. **用户自主**:不依赖外部服务,用户完全控制
3. **生态兼容**与文派叶子、FAIR 互补而非竞争
4. **中国优化**:针对中国网络环境优化

### 5.3 市场定位

```
WPBridge 一句话定位:

"让 WordPress 后台不再卡死 —— 统一管理你的插件更新源"


"自定义源桥接器 —— 企业内网、商业插件、私有仓库,一个插件搞定"
```

---

## 6. 自托管更新服务器生态

### 6.1 主要方案对比

| 方案 | 类型 | 特点 | 适用场景 |
|------|------|------|----------|
| **ArkPress** | 自托管镜像 | AspireCloud 分叉,中国优化 | 中国企业/开发者 |
| **AspireCloud** | 开源镜像 | FAIR 基础设施,联邦模式 | 国际用户 |
| **UpdatePulse Server** | 自托管服务器 | 授权管理、VCS 集成 | 商业插件开发者 |
| **WP Packages Update Server** | 自托管服务器 | 轻量级 | 小型团队 |
| **Plugin Update Checker** | 开发者库 | 行业标准 | 插件开发者 |

### 6.2 ArkPress文派开源

**定位**AspireCloud 的中国分叉版本,针对中国网络环境优化

**特点**
- 国内服务器部署
- 中文界面
- 与文派生态深度集成
- 更适合中国用户的网络环境

**与 WPBridge 的关系**
- ArkPress 是服务端(自托管更新服务器)
- WPBridge 是客户端(连接各种更新源的桥接器)
- 两者配合使用,提供完整的自托管更新解决方案

### 6.3 AspirePress 生态

**组件**
- **AspireCloud**CDN/API 服务,为 FAIR 提供基础设施
- **AspireUpdate**WordPress 插件,连接 AspireCloud
- **AspireSync**:同步工具
- **AspireExplorer**:浏览器界面

**参考**
- [AspirePress 官网](https://aspirepress.org/)
- [AspireCloud 文档](https://docs.aspirepress.org/aspirecloud/)
- [AspireUpdate GitHub](https://github.com/aspirepress/AspireUpdate/)

### 6.4 UpdatePulse Server

**特点**
- 支持授权管理License Key
- 支持 VCS 集成GitHub/GitLab/Bitbucket
- 支持云存储S3 兼容)
- 与 Plugin Update Checker 兼容

**参考**
- [UpdatePulse Server - WordPress.org](https://wordpress.org/plugins/updatepulse-server/)
- [UpdatePulse Server - 文派](https://wenpai.org/plugins/updatepulse-server/)

### 6.5 WPBridge 兼容策略

```
WPBridge 兼容层
├── 原生支持
│ ├── 文派开源更新源
│ ├── ArkPress API
│ ├── Plugin Update Checker JSON 格式
│ └── AspireCloud API
├── 通用 JSON API 支持
│ ├── UpdatePulse Server
│ ├── WP Packages Update Server
│ └── 其他兼容 PUC 格式的服务器
└── Git 仓库支持
├── GitHub Releases
├── GitLab Releases
├── Gitee Releases国内
└── 菲码源库(文派)
```

---

## 7. 技术实现研究

- [FAIR Package Manager - WP Umbrella](https://wp-umbrella.com/blog/the-fair-package-manager/)
- [FAIR Package Manager - WPShout](https://wpshout.com/fair-package-manager-wordpress-org-alternative/)
- [Plugin Update Checker - GitHub](https://github.com/YahnisElsts/plugin-update-checker)
- [75 Slow WordPress Plugins](https://onlinemediamasters.com/slow-wordpress-plugins/)
- [Speed Up WordPress Backend - WPShout](https://wpshout.com/speed-up-wordpress-backend/)

---

## 7. 技术实现研究

### 7.1 WordPress 并行请求 API

WordPress 内置 `Requests::request_multiple()` 方法,支持并行 HTTP 请求:

```php
// 并行请求示例
$requests = [
'source1' => ['url' => 'https://api1.example.com/update.json'],
'source2' => ['url' => 'https://api2.example.com/update.json'],
'source3' => ['url' => 'https://api3.example.com/update.json'],
];

$responses = \WpOrg\Requests\Requests::request_multiple(
$requests,
['timeout' => 10]
);

// 结果3 个请求并行执行,总时间 ≈ 最慢的那个请求
// 而非串行执行的 3 倍时间
```

**参考:**
- [WordPress Trac #33055 - Support Parallel HTTP Requests](https://core.trac.wordpress.org/ticket/33055)
- [WordPress Trac #44118 - Unnecessary plugin update checks](https://core.trac.wordpress.org/ticket/44118)

### 7.2 更新检查钩子

WordPress 使用以下钩子处理更新检查:

| 钩子 | 用途 | WPBridge 使用方式 |
|------|------|-------------------|
| `pre_set_site_transient_update_plugins` | 插件更新检查前 | 注入自定义源的更新信息 |
| `pre_set_site_transient_update_themes` | 主题更新检查前 | 注入自定义源的更新信息 |
| `plugins_api` | 插件详情 API | 返回自定义源的插件信息 |
| `themes_api` | 主题详情 API | 返回自定义源的主题信息 |
| `upgrader_pre_download` | 下载前 | 替换下载 URL |

### 7.3 性能优化技术栈

| 技术 | 用途 | WordPress 支持 |
|------|------|----------------|
| `Requests::request_multiple` | 并行 HTTP 请求 | ✅ 内置 |
| `set_transient` / `get_transient` | 数据库缓存 | ✅ 内置 |
| `wp_cache_*` | 对象缓存 | ✅ 内置(需 Redis/Memcached |
| `wp_schedule_event` | 后台定时任务 | ✅ 内置 |
| HTTP 条件请求 | ETag/Last-Modified | ✅ 需手动实现 |

### 7.4 与 WPCY 协同检测

```php
// 检测文派叶子是否存在
function wpbridge_detect_wpcy(): bool {
return defined('STARTER_PLUGIN_VERSION') ||
class_exists('WP_China_Yes') ||
function_exists('wpcy_is_active');
}

// 如果 WPCY 存在,官方源走 WPCY自定义源走 WPBridge
function wpbridge_should_handle_source(string $url): bool {
if (wpbridge_detect_wpcy()) {
// 官方源让 WPCY 处理
if (strpos($url, 'api.wordpress.org') !== false) {
return false;
}
}
return true;
}
```

---

*最后更新: 2026-02-04*

View file

@ -1,404 +0,0 @@
# WPBridge 开发路线图

> 自定义源桥接器 - 版本规划和开发任务

*创建日期: 2026-02-04*

---

## 当前版本: v0.8.0

## 版本规划

```
v0.1.0 - MVP最小可用桥接 + 基础缓存/降级 ✅ 已完成
v0.2.0 - Git 仓库支持 + WP-CLI + 性能优化 ✅ 已完成
v0.3.0 - 源分组 + 商业插件检测 ✅ 已完成
v0.4.0 - Bridge API ✅ 已完成
v0.8.0 - 配置导入导出 + 稳定性优化 ✅ 已完成
v0.9.0 - 版本控制 + 用户体验 ← 当前目标
v1.0.0 - 正式发布
```

---

## v0.1.0 - MVP最小可用桥接 + 基础缓存/降级 ✅

### 目标
实现最小可用的更新源桥接功能,确保基础稳定性

### 任务清单

#### 插件基础结构
- [x] 主文件 `wpbridge.php`
- [x] 自动加载器 `Loader.php`
- [x] 设置页面框架 `Settings.php`
- [x] 数据存储结构

#### 预置更新源
- [x] 文派开源更新源(默认启用)
- [x] ArkPress 支持(文派自托管方案)
- [x] AspireCloud 支持(可选)

#### 更新源管理(基础)
- [x] 更新源数据模型(使用统一 SourceType 枚举)
- [x] 更新源 CRUD 操作
- [x] 更新源列表界面
- [x] 添加/编辑更新源表单

#### 核心桥接功能
- [x] `pre_set_site_transient_update_plugins` 钩子
- [x] `pre_set_site_transient_update_themes` 钩子
- [x] JSON API 处理器JsonHandler
- [x] ArkPress 处理器ArkPressHandler
- [x] AspireCloud 处理器AspireCloudHandler
- [x] Plugin Update Checker JSON 格式兼容PUCHandler

#### 基础缓存与降级
- [x] Transient 缓存12 小时 TTL
- [x] 源健康状态缓存1 小时 TTL
- [x] 失败源冷却机制30 分钟)
- [x] 过期缓存兜底(源不可用时返回旧数据)
- [x] 请求超时限制10 秒)

#### 安全基础
- [x] URL 格式校验
- [x] API Key 加密存储
- [x] JSON 响应结构校验

#### 日志与错误处理
- [x] 调试日志(可开关)
- [x] 用户友好的错误信息

---

## v0.2.0 - Git 仓库支持 + WP-CLI + 性能优化 ✅

### 目标
支持 Git 仓库作为更新源,提供命令行工具,实现性能优化

### 任务清单

#### 性能优化(核心)
- [x] 并行请求(`ParallelRequestManager`
- [x] 条件请求ETag/Last-Modified
- [x] WP-Cron 后台预热任务(`BackgroundUpdater`
- [ ] 请求去重与合并窗口
- [ ] 缓存分层对象缓存优先DB 兜底)

#### WP-CLI 支持(`wp bridge`
- [x] `wp bridge source list` - 列出所有源
- [x] `wp bridge source add <url>` - 添加源
- [x] `wp bridge source remove <id>` - 删除源
- [x] `wp bridge source enable/disable <id>` - 启用/禁用源
- [x] `wp bridge check` - 检查所有源
- [x] `wp bridge cache clear` - 清除缓存
- [x] `wp bridge diagnose` - 诊断报告
- [ ] `wp bridge config export/import` - 配置导入导出

#### Git 仓库支持
- [x] 统一接口 SourceHandlerInterface
- [x] GitHub Releases 支持GitHubHandler
- [x] GitLab Releases 支持GitLabHandler
- [x] Gitee Releases 支持GiteeHandler国内
- [x] 菲码源库支持WenPaiGitHandler
- [x] 私有仓库认证

#### 诊断工具
- [x] 诊断页面(源状态、请求日志)
- [x] 一键测试源连通性
- [ ] 导出诊断报告

#### 配置管理
- [ ] 导入/导出配置
- [ ] 配置备份

#### 认证支持
- [x] API Key 认证
- [x] Basic Auth 认证
- [x] 自定义 HTTP 头

#### 源优先级
- [x] 源优先级设置
- [x] 多源冲突处理(版本号最高优先)

#### FAIR 支持
- [x] FAIR Package Manager 处理器FairHandler

---

## v0.3.0 - 源分组 + 商业插件检测 ✅

### 目标
支持源分组管理,实现商业插件检测

### 任务清单

#### 源分组管理
- [x] 源组数据模型GroupModel
- [x] 批量管理界面GroupManager
- [x] 共享认证信息
- [x] 统一启用/禁用

#### 商业插件适配
- [x] 商业插件检测机制CommercialDetector
- [x] 远程 JSON 配置支持
- [x] 检测结果永久缓存
- [x] 手动刷新检测功能
- [ ] 授权验证代理(可选)
- [ ] 版本锁定功能
- [ ] 回滚机制(更新前备份)

#### 通知系统
- [x] 邮件通知EmailHandler
- [x] Webhook 通知WebhookHandler
- [ ] 更新日志聚合显示

---

## v0.4.0 - Bridge API ✅

### 目标
提供 REST API 服务,支持外部调用

### 任务清单

#### Bridge API 基础
- [x] REST API 端点设计(`/wp-json/bridge/v1/`
- [x] 认证机制API Key
- [x] 状态端点 `/status`
- [ ] 限流策略
- [ ] 可用性 SLA 定义

#### API 端点
- [x] GET /bridge/v1/status - 获取状态
- [ ] GET /bridge/v1/sources - 获取可用更新源列表
- [ ] GET /bridge/v1/check/{source_id} - 检查指定源更新
- [ ] GET /bridge/v1/plugins/{slug}/info - 获取插件信息
- [ ] GET /bridge/v1/themes/{slug}/info - 获取主题信息

---

## v0.8.0 - 配置导入导出 + 稳定性优化 ✅

### 目标
完善配置管理,提升稳定性

### 任务清单

#### 配置管理
- [x] 导入配置JSON 格式)
- [x] 导出配置JSON 格式)
- [x] 配置备份/恢复
- [x] WP-CLI 配置命令

#### 稳定性优化
- [x] 完善错误处理
- [x] 安全性检查nonce、权限、输入清理
- [ ] 添加单元测试v1.0 前完成)
- [ ] 性能优化(请求去重)
- [ ] 缓存分层优化

---

## v0.9.0 - 版本控制 + 用户体验 ← 当前目标

### 目标
实现版本锁定和回滚机制,提升用户体验

### 任务清单

#### 版本锁定
- [ ] 锁定插件/主题到当前版本
- [ ] 锁定到指定版本
- [ ] 忽略特定版本更新
- [ ] 版本锁定 UI

#### 回滚机制
- [ ] 更新前自动备份
- [ ] 备份存储管理
- [ ] 一键回滚功能
- [ ] 保留最近 N 个版本

#### 更新日志聚合
- [ ] 从更新源获取 changelog
- [ ] 统一显示格式
- [ ] 在更新页面显示

#### Site Health 集成
- [ ] 更新源连通性检查
- [ ] 配置完整性检查
- [ ] 提供修复建议

#### Bridge API 完善
- [ ] GET /sources - 获取更新源列表
- [ ] GET /check/{source_id} - 检查指定源
- [ ] GET /plugins/{slug}/info - 获取插件信息
- [ ] GET /themes/{slug}/info - 获取主题信息

---

## v1.0.0 - 正式发布

### 目标
稳定版本,完善文档和用户体验

### 任务清单

#### 文档完善
- [x] 用户指南
- [ ] 开发者文档(如何创建兼容的更新服务器)
- [x] API 文档
- [x] 常见问题
- [ ] 视频教程

#### 用户体验
- [ ] 状态仪表板优化
- [ ] 性能基准测试报告

#### 高级功能(延后)
- [ ] 多站点 (Multisite) 支持
- [ ] 安全扫描集成VirusTotal/Patchstack
- [ ] 白标/OEM 支持

#### 发布准备
- [ ] GitHub Release
- [ ] 菲码源库 Release
- [ ] 更新日志
- [ ] 宣传材料

---

## AI 桥接层(暂缓)

> 以下功能暂缓开发,待核心功能稳定后考虑

### OpenAI 兼容层
- [ ] `pre_http_request` 拦截器
- [ ] 用户可配置白名单
- [ ] OpenAI Chat API 转发
- [ ] 响应格式转换
- [ ] 自定义端点支持(透传模式)
- [ ] WPMind 集成(可选)

### 商业插件 AI 适配
- [x] AI 网关基础AIGateway
- [x] Yoast SEO Pro 适配器
- [x] Rank Math 适配器
- [ ] 嗅探模式(收集 API 格式)

---

## 技术架构

```
wpbridge/
├── wpbridge.php # 主文件
├── includes/
│ ├── Core/
│ │ ├── Plugin.php # 插件主类
│ │ ├── Loader.php # 自动加载
│ │ ├── Settings.php # 设置管理
│ │ ├── Logger.php # 日志系统
│ │ ├── CommercialDetector.php # 商业插件检测
│ │ ├── RemoteConfig.php # 远程配置
│ │ └── ItemSourceManager.php # 项目源管理
│ │
│ ├── UpdateSource/
│ │ ├── SourceManager.php # 更新源管理
│ │ ├── SourceModel.php # 数据模型
│ │ ├── SourceType.php # 源类型枚举
│ │ ├── PluginUpdater.php # 插件更新器
│ │ ├── ThemeUpdater.php # 主题更新器
│ │ └── Handlers/ # 各类处理器
│ │ ├── JsonHandler.php
│ │ ├── GitHubHandler.php
│ │ ├── GitLabHandler.php
│ │ ├── GiteeHandler.php
│ │ ├── ArkPressHandler.php
│ │ ├── AspireCloudHandler.php
│ │ ├── FairHandler.php
│ │ └── ...
│ │
│ ├── SourceGroup/
│ │ ├── GroupManager.php # 分组管理
│ │ └── GroupModel.php # 分组模型
│ │
│ ├── Cache/
│ │ ├── CacheManager.php # 缓存管理
│ │ ├── HealthChecker.php # 健康检查
│ │ └── FallbackStrategy.php # 降级策略
│ │
│ ├── Performance/
│ │ ├── ParallelRequestManager.php # 并行请求
│ │ ├── ConditionalRequest.php # 条件请求
│ │ └── BackgroundUpdater.php # 后台更新
│ │
│ ├── API/
│ │ ├── RestController.php # REST API
│ │ └── ApiKeyManager.php # API Key 管理
│ │
│ ├── CLI/
│ │ └── BridgeCommand.php # WP-CLI 命令
│ │
│ ├── Notification/
│ │ ├── NotificationManager.php
│ │ ├── EmailHandler.php
│ │ └── WebhookHandler.php
│ │
│ ├── AIBridge/
│ │ ├── AIGateway.php # AI 网关
│ │ └── Adapters/
│ │ ├── YoastAdapter.php
│ │ └── RankMathAdapter.php
│ │
│ └── Admin/
│ └── AdminPage.php # 管理页面
├── templates/
│ └── admin/
│ ├── main.php
│ └── tabs/
│ ├── overview.php
│ ├── sources.php
│ ├── diagnostics.php
│ └── api.php
└── assets/
├── css/
└── js/
```

---

## 依赖关系

```
WPBridge 核心功能
├── 更新源桥接 - 无依赖,独立运行
├── 商业插件检测 - 无依赖,独立运行
├── Bridge API - 无依赖,独立运行
└── AI 桥接 - 可选依赖 WPMind暂缓
```

---

## 待讨论事项

- [x] 是否需要云端配置同步?→ 暂不需要v1.0 后考虑
- [x] 是否支持多站点?→ 付费功能v1.0.0
- [x] 定价策略(免费 vs 付费)?→ 基础免费 + 高级付费
- [x] 与文派叶子的集成方式?→ 独立运行,检测 WPCY 存在时官方源走 WPCY
- [x] 预置更新源?→ 文派开源默认、ArkPress、AspireCloud、FAIR
- [x] WP-CLI 命令前缀?→ `wp bridge`
- [x] 自托管方案支持?→ ArkPress、AspireCloud、UpdatePulse Server、PUC 格式

---

*最后更新: 2026-02-05*