插件管理 plugins

这个技能用于管理和配置插件以扩展软件功能,关键词包括插件安装、插件卸载、插件配置、插件启用、插件禁用。

低代码开发 0 次安装 0 次浏览 更新于 3/5/2026

插件 - 完整的API参考

安装、管理和配置插件以扩展Clodds的功能。


聊天命令

列出插件

/plugins                                   列出已安装的插件
/plugins available                          浏览可用插件
/plugins search <query>                     搜索插件注册表

安装/移除

/plugins install <name>                     从注册表安装
/plugins install <url>                      从URL安装
/plugins uninstall <id>                     移除插件
/plugins update <id>                        更新插件
/plugins update-all                         更新所有插件

启用/禁用

/plugins enable <id>                        启用插件
/plugins disable <id>                       禁用插件
/plugins restart <id>                      重启插件

配置

/plugins config <id>                        查看插件设置
/plugins set <id> <key> <value>             更新设置
/plugins reset <id>                         重置为默认

TypeScript API参考

创建插件管理器

import { createPluginManager } from 'clodds/plugins';

const plugins = createPluginManager({
  // 插件目录
  pluginDir: './plugins',

  // 注册表URL
  registry: 'https://plugins.clodds.ai',

  // 自动更新
  autoUpdate: true,
  updateCheckIntervalMs: 86400000,  // 每日
});

列出插件

// 获取已安装的插件
const installed = plugins.list();

for (const plugin of installed) {
  console.log(`${plugin.id}: ${plugin.name} v${plugin.version}`);
  console.log(`  状态: ${plugin.status}`);  // 'enabled' | 'disabled' | 'error'
  console.log(`  描述: ${plugin.description}`);
}

安装插件

// 从注册表安装
await plugins.install('advanced-charts');

// 从URL安装
await plugins.install('https://github.com/user/plugin/releases/latest/plugin.zip');

// 从本地路径安装
await plugins.install('/path/to/plugin');

启用/禁用

// 启用插件
await plugins.enable('advanced-charts');

// 禁用插件
await plugins.disable('advanced-charts');

// 检查状态
const status = plugins.getStatus('advanced-charts');
console.log(`启用: ${status.enabled}`);

配置插件

// 获取插件设置
const settings = plugins.getSettings('advanced-charts');
console.log(settings);

// 更新设置
await plugins.setSettings('advanced-charts', {
  theme: 'dark',
  refreshInterval: 5000,
});

// 重置为默认
await plugins.resetSettings('advanced-charts');

卸载插件

await plugins.uninstall('advanced-charts');

创建自定义插件

// plugins/my-plugin/index.ts
import { Plugin, PluginContext } from 'clodds/plugins';

export default class MyPlugin implements Plugin {
  id = 'my-plugin';
  name = '我的自定义插件';
  version = '1.0.0';
  description = '增加自定义功能';

  // 默认设置
  defaultSettings = {
    enabled: true,
    threshold: 0.5,
  };

  async onLoad(ctx: PluginContext) {
    console.log('插件已加载!');

    // 注册命令
    ctx.registerCommand({
      name: 'my-command',
      description: '做一些很酷的事情',
      handler: async (args) => {
        return `结果: ${args.join(' ')}`;
      },
    });

    // 注册工具
    ctx.registerTool({
      name: 'my-tool',
      description: '一个自定义工具',
      execute: async (params) => {
        return { result: 'success' };
      },
    });

    // 订阅事件
    ctx.on('message', async (msg) => {
      if (msg.content.includes('hello')) {
        await ctx.reply('你好!');
      }
    });
  }

  async onUnload(ctx: PluginContext) {
    console.log('插件已卸载!');
  }

  async onSettingsChange(settings: any, ctx: PluginContext) {
    console.log('设置已更新:', settings);
  }
}

插件生命周期

// 事件
plugins.on('installed', (plugin) => {
  console.log(`已安装: ${plugin.name}`);
});

plugins.on('enabled', (plugin) => {
  console.log(`已启用: ${plugin.name}`);
});

plugins.on('disabled', (plugin) => {
  console.log(`已禁用: ${plugin.name}`);
});

plugins.on('error', (plugin, error) => {
  console.error(`插件错误: ${plugin.name}`, error);
});

插件结构

my-plugin/
├── index.ts          # 主插件文件
├── package.json      # 插件元数据
├── settings.json     # 默认设置
├── commands/         # 命令处理器
├── tools/            # 工具定义
└── assets/           # 静态资产

package.json

{
  "name": "my-plugin",
  "version": "1.0.0",
  "description": "我的自定义插件",
  "main": "index.ts",
  "clodds": {
    "minVersion": "0.1.0",
    "permissions": ["network", "storage"],
    "commands": ["my-command"],
    "tools": ["my-tool"]
  }
}

插件权限

权限 访问
network HTTP/WebSocket请求
storage 本地文件存储
exec 命令行执行
trading 交易API
memory 用户内存访问

最佳实践

  1. 最小权限 —— 只请求你需要的
  2. 错误处理 —— 不要在插件错误时崩溃
  3. 干净的卸载 —— 在卸载时释放资源
  4. 版本兼容性 —— 检查minVersion
  5. 文档设置 —— 解释配置选项