Files

84 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# EasyCon 插件化方案 v5 —— 与 Maa v2 设计大纲融合
基于 dev@82555df3 · 参照 docs/Maa-EasyCon-dev维护与v2设计大纲-20261020.md(主人自己的取舍)
与 DeepSeek Harness(Cordis) 插件机制 · 2026-11-03 · 喵月
v1/v2/v3/v4 作废声明见文末。
## 一、定位修正:插件化 = Maa v2 的扩展层,不另起炉灶
主人 10-20 的 v2 大纲已经定了大方向:
- 三入口共存:ECS 直达 / Maa Pipeline + RunEcs / 现有 Flow(兼容入口);
- 信息→决策→执行三层节点目录;数据边与执行边分开;
- Maa 适配层五组件(CustomController/CustomRecognition/MaaOcr/RunEcs/ResourceGeneration);
- V2-0 契约冻结 → V2-1 适配器 → V2-2 run.ecs → V2-3 Pipeline/Flow 互操作 → V2-4 决策节点 → V2-5 MCU 公共子集。
**本方案不做的事**:另造 PluginKit 宿主、引入 DI 容器、发明新的贡献模型。
**本方案做的事**:把"插件"定义为 **v2 节点目录与 Maa 适配层的第三方扩展单元**——
插件交付的东西,正是 v2 大纲已经预留挂点的四类对象。
## 二、四个插件点(全部挂在 v2 已规划的挂点上)
| 插件点 | v2 挂点(已有设计) | 插件交付物 | 门槛 |
|---|---|---|---|
| ① Flow 节点插件 | FlowNodeCatalog(节点目录)+ FlowNodeRuntime | 新节点类型:信息/决策/执行(如 MQTT 订阅节点、直播间弹幕节点、串口设备节点) | 节点契约(输入输出 schema、超时、取消、权限),对齐 v2 §4.4 决策节点要求 |
| ② Maa 动作/识别插件 | Maa 适配层(EasyConCustomController/CustomRecognition/MaaOcr/RunEcs 的同类扩展) | CustomAction/CustomRecognition 的第三方实现(新识别算法、新执行器) | 实现 Maa 接口 + 能力租约借用规则(v2 §4.2) |
| ③ ECS 模块包 | ECS 模块系统(.ecs/.ecm/.eci,Merkle 缓存已成熟) | 脚本模块包:lib/ 模块 + extern FFI 声明 + stdlib 扩展函数(如 HTTP_GET、MQTT) | 模块接口哈希兼容;extern 的 DLL 随包分发(路径规则见 ModuleSystem §6) |
| ④ Agent provider | v2 §4.4 预留的 `agent.analyze`/`jev.analyze` 决策节点——**大纲明言 provider 契约待冻结** | agent provider(LLM 分析节点后端)、jev provider(契约冻结后实现) | provider 契约先冻结:超时/取消/输入输出 schema/只读或可执行权限(对齐 DSH ToolDefinition + 审批 waterfall) |
**关键对齐**:④ 正是把 DSH 的 ToolRegistry/SkillRegistry 机制移植进 v2 决策节点——
LLM 工具即 Flow 决策节点,Agent 即可编排的 provider。DSH 的审批 waterfall 也顺带补上 §7 短板"工具无审批闸门"。
## 三、插件宿主(薄层,~300 行,放 Core/Plugins 或独立 EasyCon.PluginKit)
不引 DI 容器;只做四件事,全部服务于 v2 已有组件:
1. **发现与清单**:plugins/<name>/plugin.json(name/version/kind/dependencies/entry/权限声明),
依赖拓扑排序,环形检测;
2. **注册分发**:按 kind 把插件注册进 FlowNodeCatalog / Maa 适配层 / 模块路径 / provider 表;
3. **可逆生命周期**:注册即登记释放器,Stop 逆序回滚(对齐 cordis effect;能力租约沿用 v2 契约);
4. **权限门控**:插件声明只读/可执行权限;可执行类(pad.*、run.ecs)挂审批 waterfall(顺治 §7 短板)。
脚本插件的双路径:
- 经典路径:.ecs 模块(C# 双端引擎,.ecm 缓存);
- IR 路径:Rust IR + 原语(ng 分支)——同一 manifest 两种引擎实现,按宿主选择。
两条路径关系按 v2 大纲:PC 高层执行属 v2 优化方向,MCU 仍走 ECX + C VM;互操作待 V2-3。
## 四、与 ng(Rust 基础核心)的关系
- nextgen/ 的 18 项原语 = Rust 侧原子能力; Flow 画布节点已由 `GET /api/nodes` 提供——
**Rust 新原语 → 目录登记 → 画布自动出现**,本身就是"原语插件"的现成通路(无需新机制);
- 协议边界不变:EasyCon/Pokeldn 协议由 dotnet 独家维护直至冻结(主人 11-03 拍板);
pi 报告(EasyCon-device-convergence.md)的收敛清单作为阶段 A 任务执行;
- IR 与 ECS 双轨按 v2 大纲:IR 组合子可引用 run.ecs(V2-3 互操作),ECS 仍是源格式。
## 五、阶段(与 V2 大纲对齐)
| 阶段 | 内容 | 对应 v2 |
|---|---|---|
| M-0 契约冻结 | 插件 manifest v1 + provider 契约(agent/jev:超时/取消/schema/权限) | V2-4 的前置 |
| M-1 节点插件 | FlowNodeCatalog 开放注册 + 1 个样板节点插件 | 对应 v2 节点目录 |
| M-2 脚本任务包 | .ecs/IR 任务包 + 触发声明 + ezcon plugins 子命令 | — |
| M-3 Maa 插件 | CustomAction/CustomRecognition 第三方实现接入 | 对应 V2-1/V2-2 |
| M-4 审批 waterfall | 工具执行管线 + ISecretStore | 顺治 §7 短板 |
| 收尾 | 文档、CI、发布 | — |
(与 ng 阶段 A/E 并行推进:A 补原子能力,插件化在 C#/Maa 层演进,互不阻塞。)
## 六、验收
1. 一个第三方节点插件在不改 FlowNodeCatalog 源码的情况下被画布发现并执行;
2. 一个 CustomRecognition 插件保持旧 OpenCV 分值语义(对拍旧阈值);
3. 一个 .ecs 模块包被 LSP/编译器/运行时三方一致识别;
4. agent.analyze provider 契约冻结文档 + 一个 mock provider 通过超时/取消/权限测试;
5. 审批 waterfall 拒绝高危工具执行有审计记录;
6. 现有 .ecs 脚本、Flow 工作流零回归(黄金回放)。
## 七、明确不做
- 不引 DI 容器;不做插件间安全隔离;不改 1920×1080 标签基准;
- 不把 Maa 原生对象泄漏进 Flow/模块公共接口;
- 不在本轮实现 agent/jev 具体算法(先冻结核同契约);
- 不把 MCU 能力查询/容量预检/固件协议升级混入插件化。
## 八、v1-v4 作废与延续说明
- v1(main 版,反射填 CapabilitySet)违反装配唯一点红线,作废;
- v2(原料贡献者)覆盖面窄,作废;其"插件不装配、只贡献"思想保留在 §二;
- v3(三面注册)面 A/C 思想并入②④,面 B 归入阶段 E 传输深化后评估;
- v4(平台路线图)的分层盘点、Rust 迁移策略、前端矩阵、验收总表全部并入本文件 §一/四/五/七。