# core/ — 插件微内核

ShowenV2 的核心框架，所有插件通过此内核注册、通信和管理。

## 模块说明

| 文件 | 说明 |
|------|------|
| `message.rs` | 类型安全消息协议：`Envelope` / `Destination` / `Message` 枚举，全部支持 Serialize/Deserialize |
| `plugin.rs` | `Plugin` trait 定义 + `PluginInfo` / `PluginContext` |
| `service_manager.rs` | 中央调度器：插件注册、依赖拓扑排序、消息路由、动态插件错误策略 (PluginState) |
| `config.rs` | `AppConfig` 配置解析/验证，支持状态机、转场、显示参数等 |
| `dispatch.rs` | 文本命令解析器（BLE/WebSocket 用），转换为类型安全的 `Envelope` |
| `plugin_abi.rs` | C FFI 边界类型：`PluginVTable` / `FfiString` / `FfiResult` / `SendCallback` |
| `dynamic_plugin.rs` | `DynamicPlugin`：通过 `libloading` 加载 `.so`，实现 `Plugin` trait，JSON 序列化跨 FFI |
| `plugin_loader.rs` | 扫描 `plugin_store/` 目录，解析 `manifest.json` / `registry.json`，加载动态插件 |
| `version_manager.rs` | 版本管理：切换、回退、稳定标记、垃圾回收 |
| `plugin_repo.rs` | 远程插件仓库 HTTP 客户端：下载 tar.gz、校验、安装 |
| `tests.rs` | 核心模块单元测试 |

## 消息流

```
插件 A → Envelope{from, to, message} → ServiceManager → 插件 B
                                            ↓
                                      Manager 消息处理
                                      (Shutdown/ConfigReload/...)
```

## 动态插件加载流

```
plugin_store/
├── registry.json          ← PluginLoader 读取
└── my-plugin/
    └── 1.0.0/
        ├── manifest.json  ← 清单 (id, version, dependencies, error_policy)
        └── libmy_plugin.so ← DynamicPlugin 通过 libloading 加载
```
