AgoraIO-Extensions / AgoraIO-Extensions/agent-infra
feat(platform): implement the managed WeCom text channel
- Linguagem predominante
- TypeScript
- Estrelas
- 0
- Forks
- 0
- Merge médio
- 8h 51min
- PRs com merge (30d)
- 99
Descrição
> 由 #150 毕业的后续实施票,不进入 #144 本轮冻结执行 snapshot;本次仅建档,不启动实现。DRI 容量、真实资源与评审窗口尚未确定,Start/Target 留空。
## Problem
M1 要求平台托管企微渠道。现有 `wecom_bot`/`wecom_app` 配置与 Conversation 的 actor/channel 授权只提供基础,尚无企微回调、可信发送者映射、渠道会话映射和文本回复投递。本票交付机器人与自建应用的文本 Channel 核心,不能把配置字段、Fake 或 Web 链路视为真实企微验收。
## Scope
- 实现部署中立的企微 Adapter 与受控 Fake;真实协议/SDK 对象留在 Adapter,领域规则仍在 Platform Core,不新增渠道微服务。
- 校验回调签名、有效期、大小和稳定事件标识。通过部署身份边界解析发送者,通过可信渠道绑定解析 Agent 与群聊/线程;普通调用方字段不能创建授权。
- 复用现有 `ChannelBindingInputV1`、`ChannelBindingProjectionV1`、Agent 配置及其审计,不增加第二套配置权威;部署提供机器人/应用配置,平台只校验和绑定,不签发企微凭证。
- 每次使用和实际投递前校验当前身份、组织关系、Agent 可用范围、服务可用性和渠道绑定。无权限或无法映射时回复 PRD 指定提示,且不创建 Conversation 或 Runtime 工作。
- 按 Agent、binding、channel kind、单聊/群聊/线程及服务端发送者生成稳定映射,复用既有 Conversation/Message/Execution/outbox。群中不同发送者使用不同 Conversation 和 Runtime Session。
- 合法重复回调返回已保存的受理结果,不再次产生消息或执行;同一事件标识被用于变更内容或绑定时拒绝。消息和投递意图先持久化再确认/发送。
- 实现文本回复和繁忙、不可用、失败、投递结果不确定等明确状态。发送结果不确定时不得盲目重发或宣称送达;只在固定协议支持可验证幂等/状态查询时恢复,否则保留脱敏待处理状态及有界处置入口。
- Web、机器人、自建应用历史不合并;企微历史不进入个人 Web 列表。群内公开可见不等于共享 Runtime 上下文;Owner 绑定群聊时看到公开可见提示。
- 审计绑定变更、受理和投递结果,不记录凭证、回调签名或普通消息正文。只支持标准模板及通过 ACP 准入的 platform-adapter;self-managed 的绑定在保存前拒绝。
- 文件/媒体与 Connection 不在本票实施,由 #150 后续完整渠道整装负责。真实文本验收使用已交付的正式 Runtime/配置链路,不能用 Fake Runtime 冒充真实渠道交付。
## Acceptance criteria
- [ ] **AC-1:** 机器人/应用回调在签名、有效期、大小、绑定和发送者验证后才受理;非法签名、跨绑定、禁用或同 ID 变更内容均在业务副作用前拒绝;合法重投返回已保存结果。
- [ ] **AC-2:** 既有 Agent 配置保持唯一绑定权威,Owner 可绑定/替换获准配置;Secret 只替换、不回显,不进入日志或审计。self-managed 绑定被拒绝,群聊公开可见提示符合 PRD。
- [ ] **AC-3:** 稳定会话键包含 Agent、绑定、渠道类型、群聊/线程及发送者。两个发送者在同群/线程中拥有独立 Conversation/Session;不能向另一发送者的活跃 Turn 追加指令或停止回复。
- [ ] **AC-4:** 每次使用与实际投递均使用当前身份、组织关系、范围、可用性和绑定。未授权/无法映射时显示“暂无权限使用此 Agent”,不创建 Conversation、Message、Execution 或业务 outbox;处理中撤权按既有停止规则收敛。
- [ ] **AC-5:** 消息受理与发送意图先持久化,合法重投、超时和 API/Worker 重启不重复创建 Message/Execution/Turn;不确定的外部发送不盲目重发、不虚报送达,并有可回读状态和有界恢复/处置。
- [ ] **AC-6:** Web、机器人和应用会话保持独立;企微历史保留但不进入个人 Web 历史。入口使用 Owner 当前默认模型/reasoning,不提供企微模型切换命令。
- [ ] **AC-7:** 绑定、受理、拒绝及投递结果具有脱敏审计和运行指标;凭证、原始签名、Token 和普通消息正文不进入日志、错误或审计。
- [ ] **AC-8:** Fake/真实 Adapter conformance、Core/Store 集成及实际企微机器人/应用文本场景通过,覆盖单聊、机器人群聊/受支持线程、双发送者、撤权、繁忙、回调重试、重启和发送不确定性。证据绑定 source SHA、镜像/配置、渠道类型和实际 Runtime;文件/媒体及 Connection 明确未验收。
## Validation
- 运行回调验证、身份映射、绑定、幂等、重启、未知发送结果、脱敏和审计测试。区别合法重投与变更同 ID 的请求,证明失败不产生重复副作用。
- 运行 Core/Store/API/Worker 集成,验证复用现有事务/outbox 和可信 actor/channel,默认模型选择按 Execution 固化。
- 在获准企微资源与正式 Runtime 下执行 AC-8,记录机器人/应用实际能力、版本和脱敏结果;不把模拟回调或未支持的渠道能力写成真实通过。
- 执行 `AGENTS.md` 完整仓库验证及 current-head Standards/Spec Review;如修改 Owner UI,按仓库设计流程和当前 artifact 完成桌面/移动端验证。
## Blocked by
- #436
## Authority
- Agent Platform PRD §§7、8.2、10、12、13、14;工程 Spec §§6、14.2、17、19;Runtime HLD §§6–8、11。正式依据为 `main@f0e8aa58ca90dec2583459818c1167781979235f`。
- #436 提供真实标准模板配置生产者,依赖链包含 #190/#406;既有 Conversation、配置和 RuntimeHost 契约不重复实现。
- #165 保留完整 M1 文件义务;Connection 受 #432 契约对齐约束。#150 继续拥有媒体/文件/Connection 与完整渠道整装的唯一毕业责任。本票完成不等于完整企微或 M1 上线。
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Avaliação
Esta issue ainda não foi avaliada.