Skip to content

feat(copilot): 新增 GitHub Copilot 中间层后端,泛化 N-tier 链式路由#4

Merged
ThreeFish-AI merged 3 commits into
feature/1.x.xfrom
vk/e972-preening-substra
Mar 31, 2026
Merged

feat(copilot): 新增 GitHub Copilot 中间层后端,泛化 N-tier 链式路由#4
ThreeFish-AI merged 3 commits into
feature/1.x.xfrom
vk/e972-preening-substra

Conversation

@ThreeFish-AI

@ThreeFish-AI ThreeFish-AI commented Mar 31, 2026

Copy link
Copy Markdown
Owner

概述

在 Claude Team Plan (Anthropic) 和 ZAI/GLM API (Zhipu) 之间,新增 GitHub Copilot Team Plan 作为中间层后端。同时将硬编码的 2-tier 路由泛化为 N-tier 链式责任链,消除代码重复,提升功能密度。

优先级链:

Anthropic (Claude Team Plan) → GitHub Copilot → Zhipu/GLM (终端兜底)

变更内容

1. 路由架构重构 (e88ddbc)

  • backends/base.py: should_trigger_failover 从抽象方法改为基于 FailoverConfig 的默认实现;新增 PROXY_SKIP_HEADERS 常量
  • backends/anthropic.py: 删除重复的 failover 逻辑和 _SKIP_HEADERS,精简至 31 行
  • backends/zhipu.py: 删除 should_trigger_failover 覆写,终端后端由基类默认返回 False
  • routing/tier.py (新增): BackendTier 数据类,封装 backend + circuit_breaker + quota_guard 为路由单元
  • routing/router.py: 重写为 for-loop 链式路由,支持任意数量后端层级
  • server/app.py: 提取 _build_circuit_breaker / _build_quota_guard 辅助函数,tier 化装配

2. Copilot 后端 (aca9875)

  • backends/copilot.py (新增):
    • CopilotTokenManager: GitHub PAT → Copilot Token 交换、缓存、主动/被动刷新(asyncio.Lock 线程安全)
    • CopilotBackend: Anthropic 兼容端点透传,401/403 自动标记 token 失效
  • config/schema.py: 新增 CopilotConfigcopilot_circuit_breakercopilot_quota_guardmodel_validator 支持旧 anthropic/zhipu 字段向后兼容
  • config.example.yaml: 补充 Copilot 配置示例

3. 测试覆盖 (29736ee)

新增 45 个测试,总计 87 个测试全部通过

测试文件 用例数 覆盖范围
test_tier.py 15 BackendTier 可用性判断、成功/失败记录、终端层属性
test_router_chain.py 15 链式故障转移、CB/QG 跳过、流式路由、构造与关闭
test_copilot.py 9 Token 交换/缓存/过期刷新/失效、请求头注入、failover 继承
test_backends.py +2 基类 failover 默认实现验证
test_config_loader.py +4 旧字段迁移、Copilot 配置加载与默认值

设计决策

  • 内置 Token 交换(vs 外部 sidecar):自包含部署,无需额外服务
  • 共享 FailoverConfig:Anthropic 和 Copilot 使用相同的故障转移判断规则
  • N-tier 泛化:路由器源码从 228 行精简至 ~180 行,同时支持能力从 2 层扩展到 N 层

测试验证

uv run pytest tests/ -v  # 87 passed ✅

🤖 Generated with Claude Code

- base.py: 新增 PROXY_SKIP_HEADERS 常量,should_trigger_failover 从抽象方法改为基于 FailoverConfig 的默认实现
- anthropic.py: 删除重复的 failover 逻辑和 _SKIP_HEADERS,精简至 31 行
- zhipu.py: 删除 should_trigger_failover 覆写,终端后端由基类默认返回 False
- tier.py: 新增 BackendTier 数据类,封装 backend + circuit_breaker + quota_guard 为路由单元
- router.py: 重写为 for-loop 链式路由,支持任意数量的后端层级
- quota_guard.py: 新增 window_hours 属性供基线加载使用
- app.py: 提取 _build_circuit_breaker/_build_quota_guard 辅助函数,tier 化装配
- cli.py: 适配新的 tiers 列表格式

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
- copilot.py: 实现 CopilotTokenManager(GitHub PAT → Copilot token 交换、缓存、主动/被动刷新)和 CopilotBackend(Anthropic 兼容端点转发)
- schema.py: 新增 CopilotConfig、copilot_circuit_breaker、copilot_quota_guard 配置段;新增 model_validator 支持 anthropic/zhipu 旧字段向后兼容
- config.example.yaml: 补充 Copilot 后端配置示例

优先级链: Anthropic → GitHub Copilot → Zhipu/GLM

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
- test_tier.py: BackendTier 可用性判断、成功/失败记录、终端层属性(15 个用例)
- test_router_chain.py: 链式故障转移、CB/QG 跳过、流式路由、构造与关闭(15 个用例)
- test_copilot.py: token 交换/缓存/过期刷新/失效、请求头注入、failover 继承(9 个用例)
- test_backends.py: 基类 failover 默认实现验证(2 个用例)
- test_config_loader.py: 旧字段迁移、Copilot 配置加载与默认值(4 个用例)

总计 87 个测试全部通过

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
@ThreeFish-AI
ThreeFish-AI merged commit b4cf9de into feature/1.x.x Mar 31, 2026
@ThreeFish-AI ThreeFish-AI changed the title /preening-substrate 在 Claude Team Plan 和 ZAI/GLM API 的基础上,添加 GitHub Copilot Team Plan 中的 Claude (vibe-kanban) feat(copilot): 新增 GitHub Copilot 中间层后端,泛化 N-tier 链式路由 Mar 31, 2026
@ThreeFish-AI
ThreeFish-AI deleted the vk/e972-preening-substra branch March 31, 2026 05:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant