init biliup-next

This commit is contained in:
theshy
2026-04-01 00:44:58 +08:00
commit d0cf1fd0df
127 changed files with 15582 additions and 0 deletions

156
docs/plugin-system.md Normal file
View File

@ -0,0 +1,156 @@
# Plugin System
## Goal
插件系统的目标不是“让任何东西都能热插拔”,而是为未来的能力替换和扩展提供稳定边界。
优先支持:
- 转录提供者替换
- 歌曲识别提供者替换
- 上传器替换
- 评论策略替换
- 合集策略替换
- 输入源扩展
## Design Principles
借鉴 OpenClaw 的思路,采用 `manifest-first` + `registry` 设计。
原则:
- 插件先注册元信息,再执行运行时代码
- 控制面优先读取 manifest 和 schema
- 核心系统只依赖抽象接口和 registry
- 插件配置必须可校验
## Plugin Composition
每个插件由两部分组成:
### 1. Manifest
描述插件的元信息和配置能力。
例如:
```json
{
"id": "codex-song-detector",
"name": "Codex Song Detector",
"version": "0.1.0",
"type": "song_detector",
"entrypoint": "plugins.codex_song_detector.runtime:register",
"configSchema": "plugins/codex_song_detector/config.schema.json",
"capabilities": ["song_detect"],
"enabledByDefault": true
}
```
### 2. Runtime
真正实现业务逻辑的代码。
## Registry
系统启动时统一构建 registry。
registry 负责:
- 注册插件能力
- 按类型查找实现
- 根据配置激活当前 provider
### Registry Types
- `ingest_provider`
- `transcribe_provider`
- `song_detector`
- `split_provider`
- `publish_provider`
- `comment_strategy`
- `collection_strategy`
## Plugin Loading Flow
```text
Discover manifests
-> Validate manifests
-> Register capabilities in registry
-> Load plugin config schema
-> Validate plugin config
-> Activate runtime implementation
```
## Why Manifest-First
这样设计有 4 个直接好处:
- 管理台可以在不执行插件代码时展示插件信息
- UI 可以根据 schema 渲染配置表单
- 系统可以提前发现缺失字段或不兼容版本
- 插件运行失败不会影响元数据层的可见性
## Suggested Plugin Boundaries
### Transcribe Provider
示例:
- `groq`
- `openai`
- `local_whisper`
### Song Detector
示例:
- `codex`
- `rule_engine`
- `custom_llm`
### Publish Provider
示例:
- `biliup_cli`
- `bilibili_api`
### Collection Strategy
示例:
- `default_song_collection`
- `title_match_full_video`
- `manual_binding`
## Control Plane Integration
插件系统必须服务于控制面。
因此管理台至少需要知道:
- 当前有哪些插件
- 每个插件类型是什么
- 当前启用的是哪一个
- 配置是否有效
- 最近一次健康检查结果
## Restrictions
为了避免再次走向“任意脚本散落”,插件系统需要约束:
- 插件不得直接修改核心数据库结构
- 插件不得绕过统一配置系统
- 插件不得私自写独立日志目录作为唯一状态来源
- 插件不得直接互相调用具体实现
## Initial Strategy
第一阶段不追求真正的第三方插件生态。
先实现“内置插件化”:
- 核心仓库内提供多个 provider
- 统一用 manifest + registry 管理
- 等边界稳定后,再考虑开放外部插件目录