plugin-system · v1.0.0 · 2026-07-30 · sha256 b9f114c600d150ac
plugin-system v1.0.0A
Immutable. This exact content is served forever at /api/v1/blob/b9f114c600d150ac.
---
name: plugin-system
version: 1.0.0
type: tool
author: BACH Team
created: 2026-02-21
updated: 2026-03-12
description: 用于 Python 应用程序的通用插件系统。自动发现、验证、容错。零依赖(仅使用 Python 标准库)。
standalone: true
anthropic_compatible: true
bach_compatible: true
bach_origin: true
category: dev
tags: [plugin, framework, extensibility, cli, architecture]
language: zh
status: active
dependencies: {'tools': [], 'services': [], 'protocols': [], 'python': []}
provenance: {'origin': 'bach', 'origin_path': 'MODULAR_AGENTS/plugins', 'origin_version': '1.0.0', 'origin_repo': 'github.com/ellmos-ai/bach', 'last_sync_from_origin': '2026-03-12', 'last_sync_to_origin': None, 'local_changes_since_sync': False}
---
> **中文** — `plugin-system` 官方中文版本。
# 插件系统 (中文)
适用于 Python CLI 应用程序的容错插件系统。
故障插件绝不会阻止应用程序其余部分的运行。
## 核心特性
- **自动发现:** 自动查找目录中的插件
- **验证:** 检查每个插件类上的 `name`、`version`、`execute()`
- **容错性:** 故障插件会被记录日志但不会被加载
- **零依赖:** 仅依赖 Python 标准库
## 文件
```
scripts/
plugin_system.py Core: PluginBase (ABC) + PluginManager
cli_demo.py Demo CLI with argparse
test_plugin_system.py 16+ unit tests
examples/
hello.py Hello World plugin
calculator.py Calculator plugin
systeminfo.py System Info plugin
```
## 快速开始
### 1. 创建插件
```python
from plugin_system import PluginBase
class MyPlugin(PluginBase):
name = "MyPlugin"
version = "1.0.0"
def execute(self, *args, **kwargs):
return {"status": "ok", "message": "Hello!"}
```
### 2. 使用 PluginManager
```python
from plugin_system import PluginManager
manager = PluginManager(plugins_dir="./my_plugins")
plugins = manager.discover_plugins()
# List all plugins (Deutsch)
manager.list_plugins()
# Execute a plugin (Deutsch)
success, result = manager.execute_plugin("MyPlugin", param="value")
if success:
print(result)
```
### 3. 集成到您的应用程序
```python
class MyApp:
def __init__(self):
self.plugins = PluginManager("./plugins")
self.plugins.discover_plugins()
def run_command(self, command, **params):
success, result = self.plugins.execute_plugin(command, **params)
return result if success else None
```
## 插件接口
每个插件必须:
| 要求 | 详细信息 |
|------|----------|
| 继承 `PluginBase` | `from plugin_system import PluginBase` |
| 设置 `name` | 类属性,不能为空 |
| 设置 `version` | 类属性,语义化版本 |
| 实现 `execute()` | 接收任意 `*args, **kwargs` |
## 容错机制
| 错误类型 | 行为 |
|----------|------|
| 插件中存在 SyntaxError | 跳过该插件,加载其余部分 |
| 缺少必需属性 | 插件被标记为 `is_valid=False` |
| `execute()` 抛出异常 | 返回 `(False, error_message)` |
| 目录中没有插件 | 返回空列表,不会崩溃 |
## 变更日志
### 1.0.0 (2026-03-12)
- 从 MODULAR_AGENTS/plugins 迁移至 skill 库
- PluginBase ABC + PluginManager
- 3 个示例插件 (Hello, Calculator, SystemInfo)
- 16+ 个单元测试
- 基于 argparse 的 CLI 演示