插件市场系统
模块概述
版本: v0.34.0 状态: ✅ 已实现 IPC处理器: 22个 最后更新: 2026-02-15
插件市场系统提供完整的插件生命周期管理,包括发现、安装、更新、卸载和社区交互。支持四层技能加载机制,内置哈希校验和沙箱隔离安全保护。
核心特性
- 插件市场: 浏览、搜索、分类筛选社区插件
- 生命周期管理: 安装、启用、禁用、更新、卸载全流程
- 四层加载: bundled → marketplace → managed → workspace 优先级覆盖
- 安全保护: SHA-256 哈希校验、沙箱隔离、权限声明
- 自动更新: 后台检查更新,支持自动/手动升级
- 社区交互: 评分、评论、下载统计
1. 架构设计
1.1 整体架构图
┌──────────────────────────────────────────────────────────────────┐
│ 前端 (Vue3) │
├──────────────────────────────────────────────────────────────────┤
│ PluginMarketplace │ PluginDetail │ InstalledPlugins │ Settings │
│ ↓ ↓ ↓ ↓ │
│ Pinia Store: marketplace.ts │
└──────────────────────────────────────────────────────────────────┘
↕ IPC (22个通道)
┌──────────────────────────────────────────────────────────────────┐
│ 主进程 (Electron) │
├──────────────────────────────────────────────────────────────────┤
│ marketplace-ipc.js (22个处理器) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ MarketplaceClient │ PluginInstaller │ PluginUpdater │ │
│ └─────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ PluginSandbox │ SkillLoader (四层) │ Database │ │
│ └─────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
↕ HTTPS
┌──────────────────────────────────────────────────────────────────┐
│ 插件注册中心 (远程服务) │
├──────────────────────────────────────────────────────────────────┤
│ REST API │ 插件包存储 │ 评分系统 │ 下载统计 │ DID认证 │
└──────────────────────────────────────────────────────────────────┘1.2 四层技能加载
workspace/ (最高优先级) ← 用户工作区自定义
↑
managed/ ← 用户手动管理的技能
↑
marketplace/ ← 从市场安装的插件技能 [v0.34.0新增]
↑
bundled/ (最低优先级) ← 内置技能 (code-review, git-commit, explain-code)高优先级层的同名技能会覆盖低优先级层。
1.3 核心组件
| 组件 | 文件 | 行数 | 说明 |
|---|---|---|---|
| MarketplaceClient | marketplace-client.js | ~400 | HTTP客户端,DID认证 |
| PluginInstaller | plugin-installer.js | ~350 | 下载、校验、安装 |
| PluginUpdater | plugin-updater.js | ~280 | 后台更新检查 |
| PluginSandbox | plugin-sandbox.js | ~320 | 沙箱隔离执行 |
| MarketplaceIPC | marketplace-ipc.js | ~350 | 22个IPC处理器 |
2. 核心模块
2.1 MarketplaceClient
插件市场 HTTP 客户端,使用 DID 身份认证访问远程 REST API。
功能特性:
- HTTPS 通信,DID 签名认证
- 搜索、分类浏览、排序
- 插件详情、版本列表获取
- 评分、评论提交
- 下载链接获取
核心方法:
javascript
class MarketplaceClient {
// 搜索插件
async search(query, options = {}) { }
// 获取分类列表
async getCategories() { }
// 获取插件详情
async getPluginDetail(pluginId) { }
// 获取版本列表
async getVersions(pluginId) { }
// 获取下载链接
async getDownloadUrl(pluginId, version) { }
// 提交评分
async submitRating(pluginId, rating, review) { }
// 获取推荐插件
async getFeatured() { }
// 获取热门插件
async getPopular(category, page) { }
}API 端点:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/plugins | 插件列表/搜索 |
| GET | /api/v1/plugins/:id | 插件详情 |
| GET | /api/v1/plugins/:id/versions | 版本列表 |
| GET | /api/v1/plugins/:id/download | 下载链接 |
| POST | /api/v1/plugins/:id/ratings | 提交评分 |
| GET | /api/v1/categories | 分类列表 |
| GET | /api/v1/featured | 推荐插件 |
| GET | /api/v1/popular | 热门排行 |
2.2 PluginInstaller
插件安装器,负责下载、校验、解压和注册。
安装流程:
下载插件包 (.zip)
↓
SHA-256 哈希校验
↓
解压到临时目录
↓
验证 manifest.json (名称/版本/权限声明)
↓
检查依赖兼容性
↓
复制到 marketplace/ 目录
↓
注册到数据库 (installed_plugins)
↓
加载技能到 SkillLoader核心方法:
javascript
class PluginInstaller {
// 安装插件
async install(pluginId, version) { }
// 卸载插件
async uninstall(pluginId) { }
// 启用插件
async enable(pluginId) { }
// 禁用插件
async disable(pluginId) { }
// 验证插件包完整性
async verifyPackage(filePath, expectedHash) { }
// 获取已安装插件列表
async getInstalled() { }
// 获取插件信息
async getPluginInfo(pluginId) { }
}manifest.json 格式:
json
{
"name": "my-plugin",
"version": "1.0.0",
"displayName": "我的插件",
"description": "插件描述",
"author": "did:key:z...",
"category": "productivity",
"permissions": ["file:read", "llm:query"],
"skills": ["my-skill"],
"minAppVersion": "0.34.0",
"dependencies": {}
}2.3 PluginUpdater
后台更新检查器,支持自动和手动更新。
功能特性:
- 定时检查更新 (默认每6小时)
- 版本比较 (semver)
- 自动下载和安装
- 更新历史记录
- 回滚支持
核心方法:
javascript
class PluginUpdater {
// 检查所有插件更新
async checkAllUpdates() { }
// 检查单个插件更新
async checkUpdate(pluginId) { }
// 执行更新
async update(pluginId, targetVersion) { }
// 批量更新
async updateAll() { }
// 获取更新历史
async getUpdateHistory(pluginId) { }
// 回滚到上一版本
async rollback(pluginId) { }
// 设置自动更新
async setAutoUpdate(pluginId, enabled) { }
}3. 数据模型
3.1 installed_plugins
| 字段 | 类型 | 说明 |
|---|---|---|
| id | TEXT PK | 插件ID |
| name | TEXT | 插件名称 |
| display_name | TEXT | 显示名称 |
| version | TEXT | 当前版本 |
| description | TEXT | 插件描述 |
| author_did | TEXT | 作者DID |
| category | TEXT | 分类 |
| permissions | TEXT(JSON) | 权限声明 |
| enabled | BOOLEAN | 是否启用 |
| auto_update | BOOLEAN | 是否自动更新 |
| install_path | TEXT | 安装路径 |
| package_hash | TEXT | 包SHA-256哈希 |
| installed_at | INTEGER | 安装时间 |
| updated_at | INTEGER | 最后更新时间 |
| marketplace_url | TEXT | 市场页面URL |
3.2 plugin_update_history
| 字段 | 类型 | 说明 |
|---|---|---|
| id | TEXT PK | 记录ID (UUID) |
| plugin_id | TEXT FK | 插件ID |
| from_version | TEXT | 旧版本 |
| to_version | TEXT | 新版本 |
| status | TEXT | 状态 (success/failed/rolled_back) |
| changelog | TEXT | 变更日志 |
| updated_at | INTEGER | 更新时间 |
| backup_path | TEXT | 备份路径 (用于回滚) |
4. IPC接口 (22个)
4.1 市场浏览 (6个)
| 通道 | 说明 | 参数 |
|---|---|---|
marketplace:search | 搜索插件 | query: string, options: |
marketplace:get-categories | 获取分类 | - |
marketplace:get-detail | 获取插件详情 | pluginId: string |
marketplace:get-versions | 获取版本列表 | pluginId: string |
marketplace:get-featured | 获取推荐插件 | - |
marketplace:get-popular | 获取热门插件 | category: string, page: number |
4.2 安装管理 (7个)
| 通道 | 说明 | 参数 |
|---|---|---|
plugin:install | 安装插件 | pluginId: string, version: string |
plugin:uninstall | 卸载插件 | pluginId: string |
plugin:enable | 启用插件 | pluginId: string |
plugin:disable | 禁用插件 | pluginId: string |
plugin:get-installed | 获取已安装列表 | - |
plugin:get-info | 获取插件信息 | pluginId: string |
plugin:verify-package | 验证包完整性 | filePath: string, expectedHash: string |
4.3 更新管理 (5个)
| 通道 | 说明 | 参数 |
|---|---|---|
plugin:check-updates | 检查所有更新 | - |
plugin:check-update | 检查单个更新 | pluginId: string |
plugin:update | 执行更新 | pluginId: string, targetVersion: string |
plugin:update-all | 批量更新 | - |
plugin:get-update-history | 获取更新历史 | pluginId: string |
4.4 配置和社区 (4个)
| 通道 | 说明 | 参数 |
|---|---|---|
plugin:set-auto-update | 设置自动更新 | pluginId: string, enabled: boolean |
plugin:rollback | 回滚版本 | pluginId: string |
marketplace:submit-rating | 提交评分 | pluginId: string, rating: number, review: string |
marketplace:get-ratings | 获取评分 | pluginId: string |
5. 前端页面
5.1 PluginMarketplacePage.vue
插件市场主页:
- 推荐插件轮播
- 分类标签筛选 (全部/效率/AI/安全/开发/数据)
- 搜索框,支持关键字搜索
- 插件卡片列表: 名称、描述、评分、下载量
- 排序: 热门/最新/评分最高
- 分页加载
5.2 PluginDetailPage.vue
插件详情页:
- 插件信息 (名称、版本、作者、分类)
- 详细描述和截图
- 版本历史和变更日志
- 权限声明列表
- 安装/更新/卸载按钮
- 用户评分和评论列表
5.3 InstalledPluginsPage.vue
已安装插件管理:
- 已安装插件列表
- 启用/禁用切换开关
- 更新提示徽章
- 一键全部更新
- 卸载确认对话框
- 自动更新设置
5.4 Pinia Store: marketplace.ts
typescript
interface MarketplaceState {
searchResults: PluginInfo[];
categories: Category[];
featured: PluginInfo[];
popular: PluginInfo[];
installedPlugins: InstalledPlugin[];
currentPlugin: PluginDetail | null;
availableUpdates: UpdateInfo[];
loading: boolean;
searchQuery: string;
currentCategory: string;
}6. 安全设计
6.1 包完整性校验
- 所有插件包使用 SHA-256 哈希校验
- 下载时从注册中心获取预期哈希值
- 校验失败拒绝安装并提示用户
6.2 沙箱隔离
- 插件在受限沙箱环境中执行
- 文件系统访问限制在声明的权限范围内
- 不允许直接访问 Node.js 核心模块 (child_process, net 等)
- IPC 通道访问受权限声明控制
6.3 权限控制
- 插件必须在 manifest.json 中声明所需权限
- 安装时向用户展示权限列表并请求确认
- 运行时强制执行权限检查
- 支持细粒度权限:
file:read,file:write,llm:query,network:fetch
6.4 DID 认证
- 市场 API 使用 DID 签名认证
- 插件作者身份通过 DID 验证
- 评分和评论关联 DID 身份防刷
7. 文件结构
desktop-app-vue/src/main/marketplace/
├── marketplace-client.js # HTTP客户端,DID认证
├── plugin-installer.js # 下载、校验、安装
├── plugin-updater.js # 后台更新检查
├── plugin-sandbox.js # 沙箱隔离执行
└── marketplace-ipc.js # 22个IPC处理器
desktop-app-vue/src/renderer/
├── pages/marketplace/
│ ├── PluginMarketplacePage.vue # 市场主页
│ ├── PluginDetailPage.vue # 插件详情
│ └── InstalledPluginsPage.vue # 已安装管理
└── stores/marketplace.ts # 市场状态管理
.chainlesschain/plugins/
├── marketplace/ # 从市场安装的插件
│ ├── plugin-a/
│ │ ├── manifest.json
│ │ └── skills/
│ └── plugin-b/
└── backups/ # 更新回滚备份8. 相关文档
文档版本: 1.0 最后更新: 2026-02-15
