mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-07-16 17:36:07 +00:00
6.5 KiB
6.5 KiB
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. P0:SDK 契约
工作项
- 定义规范化平台事件、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:平台适配器
每个适配器按自己的能力增量接入,而不是要求所有平台一次性支持全部事件。
单适配器步骤
- 将原生 SDK callback 转换为规范化事件。
- 声明实际支持的事件与 API,不把缺失能力伪装为成功。
- 实现 send/reply/edit/delete/group/user 等适用 API 与平台透传。
- 对消息链、媒体、reply target 和错误语义写单元测试。
- 按
adapters/acceptance-checklist.md记录真实平台 probe。
验收
message.received保持正常收发。- 新事件不会重复转换或产生循环合成事件。
supported_apis与实际调用能力一致。
5. P2:Host 路由
执行顺序
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. P4:WebUI
工作项
/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_TOOLHost handler。 - Box 可用/不可用的降级路径可观察且无 Runner 特判。
9. 非目标
- 不把 Pipeline 改名或包装成 Agent。
- 不自动把 Pipeline 内 runner 配置迁移成 Agent。
- 不为 3.x 保留数据库迁移、旧模板或配置 fallback。
- 不要求所有 Runner 经 MCP;本地 Python Runner 可以直接使用 SDK。
- 不允许 Runner 自定义 Box session scope。
- 不在首版实现多 Agent 串并联;多步骤编排留给后续 workflow。