项目文件夹

文件
2026-07-19 22:46:01 +08:00

146 行
6.5 KiB
Markdown

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# EBA 分阶段实施计划
> 更新:2026-07-12。文件名沿用早期设计,但这里的“迁移”仅指代码架构逐步接入 EBA,不代表 LangBot 3.x 数据库或配置升级。
## 1. 发布边界
EBA 跨越 SDK、平台适配器、LangBot Host、WebUI 与插件生态,按可验证阶段落地。当前发布遵守以下硬边界:
- LangBot 4.x 不支持从 3.x 数据库或配置升级;不保留 legacy migration chain、旧 JSON 模板或旧 Runner 字段读取。
- Pipeline 与 Agent 平级且长期并存,分别保留持久化模型与执行链。
- 现有 Pipeline 不迁移为 Agent,Pipeline 内的 runner config 不复制到 Agent。
- 用户需要 Agent 时新建独立 Agent并选择已安装的 AgentRunner。
- Host 不按 LocalAgent id 做运行时、Box 或 WebUI 特判。
- AgentRunner 的 SDK/Python 与 scoped MCP bridge 回调共享 Host 授权与事件 session 规则。
## 2. 阶段总览
| 阶段 | 目标 | 主要仓库 | 完成条件 |
| --- | --- | --- | --- |
| P0 | SDK 事件、能力与 AgentRunner 协议 | `langbot-plugin-sdk` | typed entities、manifest、proxy、runtime action 通过测试 |
| P1 | 平台适配器 EBA 化 | LangBot + SDK | 事件转换、能力声明、通用/透传 API 通过 adapter checklist |
| P2 | Host 观察者与响应者路由 | LangBot backend | observer 广播 + Pipeline/Agent/discard 单目标仲裁可运行 |
| P3 | 独立 Agent 与 Runner 注册 | LangBot backend + plugins | Agent CRUD、registry、run authorization、delivery 可运行 |
| P4 | WebUI 处理器与事件编排 | LangBot web | Agent/Pipeline 聚合入口和 Bot binding 编辑器可用 |
| P5 | 发布门禁与文档 | LangBot skills/docs + runner plugins | 单测、UI E2E、真实 adapter smoke 和插件预检通过 |
## 3. P0SDK 契约
### 工作项
- 定义规范化平台事件、actor/subject/conversation/delivery context。
- 定义 adapter `supported_events``supported_apis` 与平台透传 API。
- 定义 AgentRunner manifest、run context/result、resource handles 和 pull/callback API。
- 提供 `AgentRunAPIProxy` 与 SDK-owned scoped MCP bridge。
- 保持协议传输与权限校验可测试,不把 Host 私有 Query 对象暴露给插件。
### 验收
- stdio/WebSocket runtime 对 typed action 的序列化一致。
-`run_id` 或越权资源调用被拒绝。
- Python proxy 与 MCP bridge 对同一 Host tool 呈现一致结果/错误形状。
## 4. P1:平台适配器
每个适配器按自己的能力增量接入,而不是要求所有平台一次性支持全部事件。
### 单适配器步骤
1. 将原生 SDK callback 转换为规范化事件。
2. 声明实际支持的事件与 API,不把缺失能力伪装为成功。
3. 实现 send/reply/edit/delete/group/user 等适用 API 与平台透传。
4. 对消息链、媒体、reply target 和错误语义写单元测试。
5.`adapters/acceptance-checklist.md` 记录真实平台 probe。
### 验收
- `message.received` 保持正常收发。
- 新事件不会重复转换或产生循环合成事件。
- `supported_apis` 与实际调用能力一致。
## 5. P2Host 路由
### 执行顺序
```text
adapter event
-> EventBus observer broadcast
-> EventRouter match event_bindings
-> one target: Pipeline | Agent | discard
-> Host delivery
```
### 约束
- Plugin EventListener 是 observer,不作为 priority fallback。
- Pipeline 只处理消息事件并复用完整 Stage 链。
- Agent 使用独立 Agent 配置和 AgentRunner Host orchestrator。
- edit/reaction 等事件的 observer 副作用能力按事件和 adapter 能力过滤。
- dry-run 与合成派发必须使用同一匹配器,避免 UI 预览与真实路由漂移。
### 验收
- 精确、namespace wildcard、全局 wildcard、filters 与 priority 有单元覆盖。
- 同一事件最多一个响应目标,但 observer 仍能收到事件。
- Pipeline 与 Agent 可以在同一个 Bot 的不同 binding 中同时生效。
## 6. P3:独立 Agent 与 AgentRunner
### 工作项
- `agents` 只保存 Agent;Pipeline 继续使用自己的表和 API。
- Agent config 使用 `runner.id``runner_config[runner_id]`
- registry 只展示已安装、有效的插件 AgentRunner。
- Host 构造 run-scoped resources、state、delivery 与 event log/transcript。
- SDK/Python `call_tool` 和 scoped MCP bridge 都回到同一个 Host ToolManager。
- Box session 由 Host 将 instance/workspace/bot/adapter/target/thread scope 规范化并哈希为固定长度 `lb-box-<sha256>`;同 scope 稳定、不同 scope 隔离、缺少 identity 时 fail closed。
### 验收
- 安装/卸载 Runner 后 metadata 与表单选项同步。
- Runner 无法调用未授权 model/tool/knowledge/state。
- 两种 Host callback transport 不能覆盖 sandbox session id。
- LocalAgent、ACP/ClaudeCode/Codex 与外部服务 Runner 不需要 Host id 特判。
## 7. P4WebUI
### 工作项
- `/home/agents` 聚合显示 Agent 与 Pipeline,并明确类型。
- 创建时选择 Agent 或 Pipeline,编辑时进入各自表单。
- Agent 表单读取动态 Runner metadata,保存当前 `runner` / `runner_config` 形状。
- Bot 事件编排器编辑 `event_pattern`、target、filters、priority 与 enabled。
- 非消息事件过滤 Pipeline;Agent 按声明事件能力过滤。
### 验收
- 页面不出现 LocalAgent 专属 banner、变量隐藏或 Box/Pipeline 注入逻辑。
- 空 Runner 市场状态给出可安装 AgentRunner 的正常路径。
- Pipeline Debug Chat/Monitoring 与 Agent 运行日志分别可用。
## 8. P5:发布门禁
### 自动化
- LangBot backend unit/integration tests 与 Ruff。
- SDK AgentRunner/proxy/MCP bridge tests。
- Web lint/build 与关键 Playwright cases。
- `skills/bin/lbs validate``skills/bin/lbs index --check`
- LocalAgent 与其他官方 Runner plugin package/test gate。
### 真实环境
- 至少一个消息事件走 Pipeline。
- 至少一个非消息事件走独立 Agent 并执行平台动作。
- SDK/Python 和 MCP bridge 各完成一次受权工具调用,并证明二者都进入同一个 `PluginToRuntimeAction.CALL_TOOL` Host handler。
- Box 可用/不可用的降级路径可观察且无 Runner 特判。
## 9. 非目标
- 不把 Pipeline 改名或包装成 Agent。
- 不自动把 Pipeline 内 runner 配置迁移成 Agent。
- 不为 3.x 保留数据库迁移、旧模板或配置 fallback。
- 不要求所有 Runner 经 MCP;本地 Python Runner 可以直接使用 SDK。
- 不允许 Runner 自定义 Box session scope。
- 不在首版实现多 Agent 串并联;多步骤编排留给后续 workflow。