AgoraIO-Extensions / AgoraIO-Extensions/agent-infra

feat(platform): implement the managed WeCom text channel

Aberta
#440 2 comentários 0 reações 0 responsáveis Ver no GitHub
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.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.