Skip to content

/preening-substrate @docs/framework.md#16 我需要在项目实现上做到在 Claude 订阅额度的 5 小时 Usage 到达 99% 时,自动切换到智谱 (vibe-kanban) - #2

Merged
ThreeFish-AI merged 2 commits into
feature/1.x.xfrom
vk/60a3-preening-substra
Mar 30, 2026
Merged

ThreeFish-AI merged 2 commits into
feature/1.x.xfrom
vk/60a3-preening-substra

Conversation

@ThreeFish-AI

Copy link
Copy Markdown
Owner

GLM 模型,但在后续使用 GLM 模型时,要时不时回头检查 Claude 订阅 5 小时额度 Usage 是否已经重置为 0,若 Claude 订阅额度已重置,则再自动从 GLM 切换回 Claude 订阅额度。

- 新增 QuotaGuard 状态机(WITHIN_QUOTA / QUOTA_EXCEEDED),基于滑动窗口追踪 token 用量
- 支持配置 token 预算、窗口时长、阈值百分比,用量达阈值时主动切换到备选后端
- 支持搭便车探测机制:在备选后端运行期间定期探测主后端恢复状态
- 支持 cap 错误被动检测:识别 429/403 中的 usage cap 错误并触发切换
- 集成到 RequestRouter,与 CircuitBreaker 正交协作
- 扩展 /api/status 和 /api/reset 端点展示配额守卫状态
- 扩展 CLI status 命令展示配额守卫信息
- 新增 TokenLogger.query_window_total() 滚动窗口查询方法
- 新增 QuotaGuardConfig 配置模型,默认关闭,按需启用

🤖 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<[email protected]>
- 新增 test_quota_guard.py:覆盖状态转换、窗口滑出恢复、探测机制、cap 错误检测、禁用模式等 15 个用例
- 新增 test_token_logger.py:覆盖窗口用量查询、后端过滤、失败请求排除等 4 个用例

🤖 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<[email protected]>
@ThreeFish-AI
ThreeFish-AI merged commit 1f42b12 into feature/1.x.x Mar 30, 2026
@ThreeFish-AI
ThreeFish-AI deleted the vk/60a3-preening-substra branch March 31, 2026 05:55
ThreeFish-AI added a commit that referenced this pull request Mar 31, 2026
…o 列表:

任务进度并更新 PR #12 描述,然后标记测试步骤为完成,, Step 8 编写/更新测试、 Steps 9 运全部测试验证" 潓市完成。

运行测试。先标记时间状态变化如下:
- 新版本的测试用例已编入相关的目录中

 文都在这些组件模块。如果方便追踪
 我展开观察状态变化
 以及需要创建/更新检查的定位模块。 此外还有
 下面:

 运行测试脚本验证实现状态变化, 文本文和语言不一致
 不清晰的表达。
- "Smart恢复策略"通过后可以在健康检查门控过滤降级后的盲目探测,同时驱动探测请求、那么具体的场景。
 是场景、我开始用户反馈。
更可理解核心问题。 - "低优先级层在探测场景下调用健康检查, 通过后才才允许真实请求, 否则降级后的不再盲��探测问题。✅29/500 错误是持续生成, '过度关注
 烧。不再测试'
应该
 I 待迁移

 用户反馈。 slower。用户体验也不差。有盲目探测带来的风险。同时保持系统稳定性.不再重复探测降级后的请求。

 最终可能依次使用健康检查, 可以定位到底了这样离开'm修复建议。

  未来能有更主动、明智                  后再次探测                  使用率限制,会逐渐恢复。有些会更好,实现起来也 匀 #2: 更 + 安全的时候"
  - 上下文基于智能体于 AI 等技术:
 合语     +      都让这个》) 可能导致无效后果
 同时避免降级后的盲目探测;

 } else {
            logger.info("Tier %s: health check failed, staying degraded", self.name)
            )
            # 探测场景下运行健康检查的目的是:避免盲探测
先做低成本的探测恢复验证请求)
 媌证功能
 提高整体服务的稳定性和。用户应无感知到/ 以恢复时间要更智能,明智。 鸂 # 基于其他安全岸的...
+ 解决 rate限制后不能不必要的上报。  29 縔/r-b 敳问题
    - 在终端层处理时, health检查通过了后才调用真实请求
才终止盲目探测。, 过渡到备用后边设计不必要的探测成本开销
  }
        else {
            logger.info("Tier %s: health check failed, staying degraded", self.name)
            )

 )
            # 转而终端的熔断器和和配额守卫逻辑已基本完成,但开始做更安全检查, 通过健康检查能判断是否能提发真实请求。 如果避免盲探测, - 问题
最终缓解用户对心被烦的是。

 这个实现完整解决了了问题。 大幅降低了了 CPU调用带来的风险)

 "现状日志显示, 429/500 锞错误时如何定位问题, 鸌越用户体验后降级后仍需臼 AI 服务的频率,也 "还"日志分析错误次数激增, 人工智能驱动的主动增加"槽"问题的潜在风险. 宆"安全恢复策略" 总结

最终让用户安心使用更稳定系统。 ' 并 宰 (PR#12 描述, 'rate-limit-aware 安全恢复策略, 完整实现了了主层级路由的智能故障障转移,
如归用户核心问题:当降级到 zhipu(智谱/天梯) 服务时,不应出现 429/500 锱错误时, `router` 会自动路由从 Anthropic角度验证服务后端是否真的完全恢复。全面能力。"的日志,提供了了更视角的理解,帮助决策依据。 同时引导后续开发方向。

 减少盲目探测带来的风险) 反馈给用户感受。

 握稳、 然而, 429/500 锁请求时 (路由层稳定性、重启验证服务商侧级的这些问题
 尜 # 建议                                                "rate-limit-aware 安全恢复策略,彻底解决降级后的盲目探测"问题"
}
 实现变更总结如下对协变后日志提供了了一些指导。:
        """5增 rate限制感知的恢复时间逻辑 (如熔断器、配额守卫的探测时间) 得更加智能和避免重复、429/500 错误请求被自动路由到降级层级
 减少盲目探测。
 通过...
ThreeFish-AI added a commit that referenced this pull request Sep 10, 2026
处理 PR #279 的两条评审意见。

回归修复(评审 #1):初版修复让 reset() 无条件 _transition_to(WITHIN_QUOTA),
用量仍超阈值时下一次判定再回落 QUOTA_EXCEEDED —— 而该回环会经
_transition_to(EXCEEDED) 把 _last_probe 刷成当前时刻,令探测恢复凭空推迟一个
probe_interval(默认 300s);反复点击「状态复位」可无限饿死探测(旧实现清零
用量,不存在此回环)。现 reset() 在用量仍超阈值且已处 EXCEEDED 时不再触发任何
状态转移,仅清 _cap_error_active 并把被 Retry-After 拉长的
_effective_probe_interval 还原为默认值——即「宁可不放行,也不推迟恢复」。

补 2 条回归用例(mock 时钟锁定探测点不被推后 / cap 拉长的探测间隔被还原),
并改写 test_reset_does_not_unblock_genuinely_exhausted_quota:超阈值时复位后
状态保持 quota_exceeded(旧断言 within_quota 恰是回环存在的证据)。

误报修复(评审 #2):/api/reset 已返回 200 后,紧随的 /api/status 定向刷新若
失败(网络抖动、进程重载)会被同一个 catch 误标为「✗ 失败」,诱导用户重复
点击——复位其实已生效。现刷新失败单独吞掉,仅影响展示。

文档(cli-reference / api-reference / dashboard.md)与 CHANGELOG、issue.md
复盘同步对齐终态语义:超阈值 → 保持 EXCEEDED、清 cap 卡死标志、还原探测间隔。

全量 1658 条测试通过。

🤖 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<[email protected]>
ThreeFish-AI added a commit that referenced this pull request Sep 10, 2026
* feat(dashboard): 供应商状态卡片新增「状态复位」按钮,并修复 reset 误清配额用量;

Overview 页「供应商状态」卡片标题栏右侧新增 ⟲ 状态复位 按钮,把处于熔断 /
限流等异常态的供应商一键复位为可正常访问,无需切到终端执行 CLI。

根因修复:QuotaGuard.reset() 此前把「状态机复位」与「用量计数清零」两件正交
的事耦合在一个方法里(_entries.clear() + _total = 0)。而窗口基线 load_baseline()
的唯一调用点在进程启动的 lifespan 钩子中、运行期不再回填,导致 Dashboard 的
「1d配额 45%」徽章一经 reset 便永久停在 0%。现只保留 _transition_to(WITHIN_QUOTA)
(该方法本身已清 _cap_error_active 并还原探测间隔),CLI / API / Dashboard 三条
路径经单一事实源同时修复,无需 --keep-quota 之类开关。

语义取舍为「如实」:用量确已超过 token_budget × threshold_percent 时,复位后下
一次判定立即回落 QUOTA_EXCEEDED,不伪造用量数字;真正被解开的是熔断、Rate Limit
与上游 cap 错误卡死标志。

实现要点:
- 按钮调用无 body 的 POST /api/reset,服务端据此跳过重排序,故不改动供应商优先级;
- 新增 .btn-card-action 卡片标题栏控件通用类,复用 .card-title 既有的
  justify-content: space-between 实现右对齐,零布局 CSS 改动,并纳入
  :focus-visible 焦点环列表;
- 交互沿用 persistTierOrder 的 in-flight 防并发范式与 copyFromParent 的瞬时反馈
  范式(复位中… → ✓ 已复位 / ✗ 失败,1.5s 还原),成功后定向重渲染供应商列表,
  不必等 10 分钟轮询。

顺带修复:「限速中」徽章读 rlInfo.limited,而后端 VendorTier.get_rate_limit_info()
产出的键是 is_rate_limited,键名不匹配使该徽章从未渲染过、Rate Limit 异常态在 UI
上完全不可观测。

测试与文档:新增 7 条用例(配额用量保留、cap 卡死解开、真实超限不放行、/api/reset
无 body 与 -v 两种形态均保留用量、按钮与键名前端守卫);旧用例
test_reset_clears_all_state 曾断言 window_usage_tokens == 0,等于把缺陷固化为契约,
已改写为 test_reset_preserves_window_usage。cli-reference / api-reference 补明「仅
复位状态、不清用量」,dashboard.md 新增「供应商状态复位」小节,issue.md 归档复盘。

隔离实例(端口 3399,复刻 anthropic 熔断 + zhipu 45.6% 配额 + 限速中)实机验证:
复位后熔断转正常、限速徽章消失、配额 456,193,510 tokens 原样保留、链路顺序不变;
CLI `reset -p 3399 -v anthropic,zhipu` 同样保留用量。全量 1656 条测试通过。

🤖 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<[email protected]>

* fix(quota-guard): 用量超阈值时复位不再推后探测时钟,并消除复位后的误报失败;

处理 PR #279 的两条评审意见。

回归修复(评审 #1):初版修复让 reset() 无条件 _transition_to(WITHIN_QUOTA),
用量仍超阈值时下一次判定再回落 QUOTA_EXCEEDED —— 而该回环会经
_transition_to(EXCEEDED) 把 _last_probe 刷成当前时刻,令探测恢复凭空推迟一个
probe_interval(默认 300s);反复点击「状态复位」可无限饿死探测(旧实现清零
用量,不存在此回环)。现 reset() 在用量仍超阈值且已处 EXCEEDED 时不再触发任何
状态转移,仅清 _cap_error_active 并把被 Retry-After 拉长的
_effective_probe_interval 还原为默认值——即「宁可不放行,也不推迟恢复」。

补 2 条回归用例(mock 时钟锁定探测点不被推后 / cap 拉长的探测间隔被还原),
并改写 test_reset_does_not_unblock_genuinely_exhausted_quota:超阈值时复位后
状态保持 quota_exceeded(旧断言 within_quota 恰是回环存在的证据)。

误报修复(评审 #2):/api/reset 已返回 200 后,紧随的 /api/status 定向刷新若
失败(网络抖动、进程重载)会被同一个 catch 误标为「✗ 失败」,诱导用户重复
点击——复位其实已生效。现刷新失败单独吞掉,仅影响展示。

文档(cli-reference / api-reference / dashboard.md)与 CHANGELOG、issue.md
复盘同步对齐终态语义:超阈值 → 保持 EXCEEDED、清 cap 卡死标志、还原探测间隔。

全量 1658 条测试通过。

🤖 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<[email protected]>

* docs(agents): 移除仓库内的 Agent 协作治理文档;

删除 AGENTS.md / CLAUDE.md(Agent 工程行为准则与协作协议)及其卫星规范
docs/.agents/browser-validation.md(浏览器验证协议)与
docs/.agents/reference-specifications.md(IEEE 引用规范模板)——四者均为
面向本机 AI Agent 环境的私有治理内容,不属于开源仓库交付物。

🤖 Generated with [Claude Code](https://claude.com/claude-code), [CodeX](https://openai.com), [Gemini Code Assist](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<[email protected]>

* build(deps): 同步 uv.lock 中 coding-proxy 版本至 0.5.2a8;

pyproject.toml 已 bump 至 0.5.2a8,但 uv.lock 仍停留在 0.5.2a7,
补上发布时遗漏的锁文件版本同步。

🤖 Generated with [Claude Code](https://claude.com/claude-code), [CodeX](https://openai.com), [Gemini Code Assist](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<[email protected]>

* docs(knowledge-map): 清理指向已删除 Agent 治理文档的死链;

随 8fc09d9 移除 AGENTS.md / browser-validation.md / reference-specifications.md
后同步收尾:knowledge-map 移除死链行与 AGENTS.md 锚定表述,合并「Agent 协作」
与「问题档案」两节(issue.md 实际位于 docs/.agents/,原 ../issue.md 链接为
死链,一并修正),路径基准勘误为 docs/.agents/;中英 README 的文档地图同步
移除 AGENTS.md 条目。全部相对链接经脚本自检可解析。

🤖 Generated with [Claude Code](https://claude.com/claude-code), [CodeX](https://openai.com), [Gemini Code Assist](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<[email protected]>
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