# ShowenV2 — 数字生命窗口平台

基于 Rust 的跨平台插件微内核架构，支持全息/VR/AR/屏幕显示，承载虚拟宠物、数字人、AI 歌姬、3D 模型等数字生命内容。

## 架构概览

```
ShowenV2/
├── src/
│   ├── core/              # 插件微内核
│   │   ├── message.rs     # 类型安全消息协议 (Serialize/Deserialize)
│   │   ├── plugin.rs      # Plugin trait 定义
│   │   ├── service_manager.rs  # 生命周期管理 + 消息路由 + 错误策略
│   │   ├── config.rs      # 配置解析/验证
│   │   ├── dispatch.rs    # 文本命令解析
│   │   ├── plugin_abi.rs  # C FFI 类型 (动态插件边界)
│   │   ├── dynamic_plugin.rs   # DynamicPlugin (libloading)
│   │   ├── plugin_loader.rs    # plugin_store/ 扫描/加载
│   │   ├── version_manager.rs  # 版本切换/回退/GC
│   │   └── plugin_repo.rs     # 远程仓库 HTTP 客户端
│   └── plugins/           # 功能插件
│       ├── video/         # 视频播放引擎 (OpenCV)
│       ├── http/          # Web UI + REST API (warp)
│       ├── ble/           # BLE 配网 (D-Bus BlueZ)
│       ├── wifi/          # WiFi 管理 (nmcli)
│       └── screen/        # 屏幕管理 (防息屏/光标)
├── plugin-sdk/            # 动态插件开发 SDK
├── plugins/
│   └── example-plugin/    # 示例动态插件 (cdylib)
├── configs/               # 配置文件 (状态机 JSON)
├── clients/               # 外部控制客户端应用
└── souls/                 # 团队成员档案
```

## 技术栈

- **语言**: Rust (edition 2018)
- **视频**: OpenCV 0.66
- **HTTP**: warp + tokio
- **BLE**: D-Bus + BlueZ (GATT)
- **WiFi**: nmcli
- **插件加载**: libloading
- **远程仓库**: ureq + flate2 + tar

## 动态插件系统

ShowenV2 支持两种插件模式：

1. **静态插件** — 编译时链接，5 个内置插件 (video, http, ble, wifi, screen)
2. **动态插件** — 运行时加载 `.so` 文件，通过 `extern "C"` FFI + JSON 序列化通信

动态插件特性：
- 多版本管理 (`plugin_store/` 目录结构)
- 远程仓库下载安装 (HTTP + tar.gz)
- 错误自动回退 (AutoRollback / DisableAndLog)
- REST API 管理 (`/api/plugins/*`)

## 快速开始

```bash
# 验证配置
cargo run -- --validate --config configs/dog_state_machine.json

# 运行
cargo run -- --config configs/dog_state_machine.json

# 测试
cargo test --workspace
```

## 硬件与平台定位

- **平台定位**: ShowenV2 是通用数字生命窗口平台，不局限于“全息宠物播放器”
- **分辨率支持**: 支持 8K 以内所有分辨率显示
- **显示类型**: 支持 AR、VR、XR、普通屏幕、全息显示、投影、LED 矩阵，以及任何可运行的显示设备
- **当前调试环境**: Debian 11 KDE 桌面 (`ARM64` / `aarch64`)
- **跨平台策略**: 当前以 Linux/ARM64 为主，架构已为扩展到其他平台预留空间
