Skip to content

插件市场 (plugin)

Headless 命令 — 不依赖桌面 GUI,直接使用核心包运行。适用于服务器、CI/CD、容器化等无桌面环境。

核心特性

  • 📦 插件安装: 安装/卸载/更新插件完整生命周期
  • 🔄 启停控制: 单独启用/禁用已安装的插件
  • 🛒 注册表/市场: 搜索和浏览插件注册表
  • ⚙️ 插件设置: 每个插件独立的键值对配置
  • 📊 安装统计: 已安装数、已启用数、注册表总数
  • 🎯 技能集成: 插件可声明技能,安装时自动部署到 marketplace 层

系统架构

plugin 命令 → plugin.js (Commander) → plugin-manager.js

                  ┌────────────────────────┼────────────────────────┐
                  ▼                        ▼                        ▼
           插件生命周期               插件设置                 注册表/市场
        install/remove/update    get/set settings          search/browse
                  │                        │                        │
                  ▼                        ▼                        ▼
           plugins 表            plugin_settings 表       plugin_registry 表

概述

CLI Phase 5 — 插件安装、管理和注册表搜索。

命令概览

bash
chainlesschain plugin list                         # 列出已安装插件
chainlesschain plugin install <name> --version <v> # 安装插件
chainlesschain plugin remove <name>                # 卸载插件
chainlesschain plugin enable <name>                # 启用插件
chainlesschain plugin disable <name>               # 禁用插件
chainlesschain plugin update <name> --version <v>  # 更新插件
chainlesschain plugin info <name>                  # 插件详情
chainlesschain plugin search <query>               # 搜索注册表
chainlesschain plugin registry                     # 浏览注册表
chainlesschain plugin summary                      # 安装统计

功能说明

插件生命周期

  • installPlugin — 安装插件(记录名称、版本、作者、权限等)
  • enablePlugin / disablePlugin — 启用/禁用
  • removePlugin — 卸载(同时清理设置)
  • updatePlugin — 更新版本

插件设置

  • setPluginSetting(db, pluginName, key, value) — 设置配置项
  • getPluginSetting — 读取单个配置
  • getPluginSettings — 读取所有配置

注册表/市场

  • registerInMarketplace — 注册插件到市场
  • searchRegistry — 按名称/描述搜索(模糊匹配)
  • listRegistry — 浏览所有注册表插件(按下载量排序)

统计

  • getPluginSummary — 已安装数、已启用数、注册表总数

插件技能集成

插件可在 manifest 中声明技能,安装时自动部署到 marketplace 技能层:

bash
chainlesschain plugin install my-plugin --manifest ./manifest.json

manifest.json 示例:

json
{
  "name": "my-plugin",
  "version": "1.0.0",
  "skills": [
    { "name": "my-skill", "path": "skills/my-skill" }
  ]
}

安装时技能目录复制到 <userData>/marketplace/skills/,卸载时自动清理。

数据库表

表名说明
plugins已安装插件(名称、版本、状态、启停标记)
plugin_settings插件配置键值对
plugin_registry注册表/市场目录
plugin_skills插件-技能关联(插件名、技能名、技能路径)

配置参考

bash
# CLI 选项
--version <v>            # 插件版本 (install / update)
--manifest <path>        # 插件 manifest.json 路径 (含技能声明)
--json                   # JSON 格式输出

# 环境变量
CHAINLESSCHAIN_DB_PATH     # plugins / plugin_settings / plugin_registry 存储
CHAINLESSCHAIN_DATA_DIR    # marketplace 技能部署根目录
PLUGIN_REGISTRY_URL        # 注册表镜像地址
PLUGIN_MARKETPLACE_SKILLS  # marketplace 技能目录覆盖

性能指标

操作目标实际状态
plugin list< 100ms~50ms
plugin install (无技能)< 300ms~180ms
plugin install (含技能复制)< 800ms~500ms
plugin search (模糊匹配)< 150ms~80ms
plugin enable / disable< 100ms~40ms
plugin summary< 120ms~60ms

测试覆盖率

✅ plugin-manager.test.js  - 覆盖 CLI 主要路径
  ├── 参数解析
  ├── 正常路径
  ├── 错误处理
  └── JSON 输出

安全考虑

  • 插件安装记录权限信息,支持权限审计
  • 卸载时级联清理插件设置数据
  • 注册表搜索仅匹配名称和描述,不执行代码

使用示例

场景 1:搜索并安装插件

bash
chainlesschain plugin search "markdown"
chainlesschain plugin install markdown-plus --version 1.0.0
chainlesschain plugin list

在注册表中搜索 Markdown 相关插件,安装指定版本后确认已成功安装。

场景 2:管理插件状态

bash
chainlesschain plugin disable markdown-plus
chainlesschain plugin enable markdown-plus
chainlesschain plugin summary

临时禁用不需要的插件以减少资源占用,需要时重新启用。查看安装统计概览。

场景 3:卸载并清理插件

bash
chainlesschain plugin info markdown-plus
chainlesschain plugin remove markdown-plus

查看插件详情确认后卸载,卸载时自动清理插件配置和关联的技能文件。

故障排查

问题解决方案
install 失败确认数据库已初始化:chainlesschain db init
search 无结果尝试更短的关键词,或用 registry 浏览全部
enable 报插件不存在确认插件已安装:chainlesschain plugin list

关键文件

  • packages/cli/src/commands/plugin.js — 命令实现
  • packages/cli/src/lib/plugin-manager.js — 插件管理库

相关文档

依赖

  • 纯 Node.js crypto(ID 生成)
  • 无外部依赖

基于 MIT 许可发布