AgoraIO-Extensions / AgoraIO-Extensions/agent-infra

feat(connection): guide users through connector availability and authorization states

Đang mở
#434 2 bình luận 0 reaction 1 người được giao Được @guoxianzhe nhận Xem trên GitHub
enhancement
Ngôn ngữ chính
TypeScript
Star
0
Fork
0
Merge trung bình
8 giờ 51 phút
Pull request đã merge (30 ngày)
99

Mô tả

## Problem

Connection 的通用 MCP/API 当前会把多种不可用状态折叠为空结果。例如客户端请求尚未接入或尚未授权的 Confluence 时,`list_apps(query="confluence")`、`list_connections(service="confluence")` 和 `search_actions(service="confluence")` 都只返回空数组。用户无法判断 Provider 未受支持、账号未连接、Consumer 未获 Grant、Action 未授权,还是授权失效或 Provider 故障,也得不到可执行的下一步。

这不是 Confluence 特例。所有 Provider 都需要一致、可机器识别且可面向用户解释的状态与恢复引导,同时保持 Connection 服务端解析 Principal、Consumer、Grant、Connection 和 Credential,不能为改善易用性而暴露账号选择器或凭证。

## Scope

- 为所有 Provider 定义统一的可用性与授权状态模型,至少区分:
- Provider 未被部署或不受支持;
- Provider 已支持,但当前 Principal 尚未创建 Connection;
- Connection 存在,但当前 Consumer/ConsumerInstance 尚未获得 Grant;
- Grant 存在,但未授权请求的 Action;
- Connection、Credential 或 Grant 已失效、被撤销或需重新授权;
- Provider 暂时不可用或 Connection 无法完成状态核验。
- 调整 `list_apps`、`list_connections`、`search_actions`、`get_action_guide` 和 `execute_action` 的响应/错误契约,使空搜索结果与“连接器不可用”不再混淆。
- 返回稳定的机器可识别 reason code、简洁的用户说明和安全的 next-action descriptor;不得返回 Provider Credential、内部授权对象 ID 或允许调用方选择权威账号。
- Connection Web 为对应状态提供明确入口,包括连接 Provider、授权当前客户端、重新授权、查看状态和联系管理员;MCP/API 客户端能够基于同一契约给出等价文字引导。
- 引导链接只指向 Connection 自己的受控页面,并在服务端绑定当前 Principal 与 Consumer 上下文;不得接受调用方提交的任意 redirect 或账号 selector。
- 对未知 Provider 名称与已知但未授权 Provider 使用可区分且不泄露其他用户、组织或未公开 Provider 配置的响应。
- 记录状态转换、授权拒绝与恢复结果所需的审计事件,但不记录 Credential 或普通用户 Provider 内容。
- 以 GitHub、Jira、Confluence 三类场景覆盖通用契约;Confluence 仅作为真实验收案例,不引入 Confluence 专用分支逻辑。

## Acceptance criteria

- [ ] **AC-1:** 对任意 Provider,客户端可以仅根据稳定 reason code 区分 unsupported、not connected、Grant missing、Action denied、reauthorization required 和 temporarily unavailable;真正的零搜索结果保持独立语义。
- [ ] **AC-2:** 五个通用 MCP tool 和对应 HTTP API 使用同一状态模型;相同 Principal、Consumer、Provider 状态产生一致的 reason code 与 next action。
- [ ] **AC-3:** 每个可恢复状态均返回可执行且安全的下一步,包括 Connection Web 入口或明确的管理员处理说明;完成操作后客户端重试可观察到状态变化。
- [ ] **AC-4:** 响应和引导不暴露 Credential、Provider token、其他 Principal 的 Connection、内部 Grant/Connection selector 或未授权 Provider 的敏感目录信息。
- [ ] **AC-5:** 调用方不能通过 provider/service 字符串、redirect、account selector 或伪造身份字段越过服务端 Principal、Consumer、Grant 和 Action 解析。
- [ ] **AC-6:** 撤销、过期、Provider 401/403、状态核验超时与上游故障 fail closed,并能区分需要用户重新授权与仅可稍后重试的情形。
- [ ] **AC-7:** Connection Web 在桌面与移动端对全部状态显示清晰中文说明和唯一主要操作;无死链、循环跳转或操作后仍停留在陈旧状态。
- [ ] **AC-8:** 契约、单元、集成和端到端测试覆盖 GitHub 已连接、Jira 未授权、Confluence 未支持/未连接等场景,以及跨用户、跨 Consumer 和枚举探测负向路径。
- [ ] **AC-9:** OpenAPI 与 MCP action guide 对状态词汇、错误码、隐私边界和恢复流程保持一致;现有 PRD/HLD/工程 Spec 继续作为实现依据,不要求本票改写。
- [ ] **AC-10:** 真实验收重放 Confluence Page ID `1293845172` 的访问路径:当能力不可用时得到准确引导;完成所需接入与授权后,同一客户端无需修改账号或凭证参数即可继续读取。

## Validation

- `pnpm install --frozen-lockfile`
- `pnpm check`
- `pnpm check-types`
- `pnpm test`
- 临时 PostgreSQL 集成测试覆盖每个状态转换、撤销与跨主体负向路径。
- MCP/HTTP contract tests 验证五个通用 tool 的 reason code、next action 和隐私边界。
- Browser QA 验证 Connection Web 桌面/移动端引导与恢复闭环。
- 线上受监督只读验收:GitHub 已连接路径,以及 Jira/Confluence 的未配置、未授权和恢复后路径;不记录普通用户页面正文或 Provider Credential。
- `pnpm build`
- `pnpm smoke`
- `pnpm docker:build`
- Markdown lint/link checks、workflow policy、actionlint、gitleaks 与 `git diff --check`。

## Blocked by

None

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.