83 Commits
Author SHA1 Message Date
tbphp 50ac12b003 feat(credentials): add compact usage and quota trends (#678)
* feat(credentials): add usage and subscription quota history

* fix(credentials): simplify subscription quota chart

* fix(credentials): restore compact usage trend

* fix(credentials): restore existing window usage

* fix(credentials): simplify compact trend charts

* fix(credentials): use view details icon and tooltip

* fix(credentials): clean quota history and chart leftovers

* feat(credentials): filter short quota windows and reuse trends

* fix(credentials): space quota trend points and connect gaps

* fix(subscription): sample quota history hourly and retain rebounds

* feat(credentials): overlay usage trend metrics

* fix(credentials): replace purple cost trend with teal

* feat(credentials): arrange linked trends in a compact grid

* fix(credentials): unify chart styling and scope tooltips

* fix(credentials): shorten quota trend heading

* fix(credentials): compact trends into a unified stats block

* fix(credentials): place three usage charts in one row

* fix(web): keep chart tooltips stable across data points

* fix(credentials): place lower chart tooltips below grid

* fix(credentials): preserve quota observations across transports

* fix(subscription): preserve quota history across transports

* fix(subscription): normalize quota observations before sampling

* fix(subscription): defer history until quota sources resolve
2026-09-17 21:12:12 +08:00
tbphp c0365fc03b chore(deps): upgrade CPA SDK to v7.3.6 (#677) 2026-09-17 19:32:00 +08:00
tbphp 5d98e41cc4 chore(deps): upgrade Bifrost Core to v1.9.0 (#676) 2026-09-17 18:38:41 +08:00
tbphp dad1f05016 feat(codex): support standalone search (#674)
* feat(codex): 支持订阅渠道独立搜索

* fix(codex): 保留搜索读体失败的响应状态

* feat(logs): 添加独立搜索请求图标
2026-09-17 16:58:58 +08:00
tbphp 311c388c3a fix(groups): add missing gateway protocol probes (#673)
* fix(groups): add missing gateway protocol probes

* fix(groups): avoid typed gateway probe cancellation races

* fix(probes): validate gateway response array elements

* fix(probes): validate required native response payloads

* fix(probes): enforce exclusive Gemini part payloads
2026-09-17 16:24:24 +08:00
tbphp df72bbb446 fix(codex): 修复 WebSocket 普通账号额度停滞 (#656)
* fix(codex): 修复 WebSocket 普通账号额度停滞

* fix(codex): 支持 WS 额度跨周期重锚

* fix(codex): 改用当前 WS 事件匹配额度来源

* fix(codex): 隔离解析 WS 额度窗口

* fix(codex): 统一额度比较时基并恢复事件预检查
2026-09-15 19:54:57 +08:00
tbphp 91df89efed fix(bifrost): 恢复兼容渠道的工具降级转发 (#653)
* fix(execution): 保留跨协议工具调用约束

* fix(cpa): 修正工具白名单兼容边界

* fix(bifrost): 拒绝丢失压缩上下文

* fix(execution): 保持计数请求工具约束

* fix(bifrost): 恢复兼容渠道的工具降级转发
2026-09-14 22:21:59 +08:00
tbphp 47a5e124fc fix(gateway): 修复 WebSocket 首错重试与故障转移 (#646) 2026-09-13 22:55:35 +08:00
tbphp fbb99067cc fix(health): 放宽上游错误重试并保留健康边界 (#643)
* fix(health): 放宽上游错误重试并保留健康边界

* fix(health): 补齐资源操作重放与上下文拒绝规则

* fix(execution): 保留明确请求拒绝的分类优先级

* fix(health): 补齐流内 HTTP 错误重试判断
2026-09-13 18:06:37 +08:00
tbphp f8a04df46d fix(deepseek): 补齐原生协议字段兼容 (#638)
* fix(deepseek): 补齐原生协议字段兼容

* fix(deepseek): 兼容强制工具调用与默认思考

* fix(deepseek): 跳过空思考字段别名
2026-09-13 11:42:46 +08:00
tbphp 9d38793dd0 fix(affinity): 统一缓存标识亲和并补齐 Codex 缓存分组 (#635) 2026-09-13 01:25:45 +08:00
tbphp 426bde9a38 fix(cpa): 保留 Codex 和 Grok 的中途系统指令 (#633)
* fix(cpa): 保留 Codex 和 Grok 的中途系统指令

在 Anthropic 转换入口将 system 映射为 developer,保留消息内容和位置,并继续拒绝其他渠道的有损转换。

验证:make check;third_party/cpaembedded 中 go test -count=1 ./...。新增出站回归测试已在修复前复现拒绝,在修复后通过。

用户实测确认:Claude Code 使用 Anthropic 协议请求 Codex 账号的 GPT 模型正常。

* fix(cpa): 对齐计数和执行的系统指令转换

让 Codex/Grok 的 Anthropic 本地计数复用执行请求的指令角色映射,保持其他渠道计数行为不变。补充计数一致性回归测试和工具结果内容断言。

验证:计数回归测试先复现差异,修复后通过;make check 和 CPA embedded 全套测试通过。
2026-09-12 21:01:54 +08:00
tbphp 5b03d29db9 fix(codex): 补齐 WebSocket 额度观测并约束来源匹配 (#632)
* fix(codex): 补齐 WebSocket 被动额度更新

* test(codex): 补充 WS 额度窗口完整性断言

* fix(codex): 保留握手与事件额度的独立观测时间
2026-09-12 19:21:35 +08:00
tbphp c4c8452e6c fix(execution): 保留原生消息前缀并保护转换语义 (#631)
* fix(execution): 补齐原生消息透传并保留对话结构

* fix(execution): 保护转换请求的指令和执行约束

* fix(execution): 补齐无角色历史后的系统指令保护
2026-09-12 17:55:22 +08:00
tbphp 1b50c77673 fix(usage): 统一修正 Anthropic 流式输入与缓存用量 (#630)
* fix(cpa): 修正 Anthropic 流式转换的输入用量统计

* fix(usage): 统一 Anthropic 流式用量修正

* fix(usage): 保留原生流未采集时的执行层用量
2026-09-12 17:08:44 +08:00
tbphp a895ba25bf fix(execution): 统一普通渠道出站 UA 规则 (#622) 2026-09-11 11:59:15 +08:00
tbphp abc6483d0e fix(codex): 升级 CPA 并固定上游版本声明 (#619) 2026-09-11 00:08:04 +08:00
tbphp f091528bdb feat(gateway): 接入原生 Responses WebSocket 与逐轮治理 (#616)
* feat(gateway): 接入原生 Responses WebSocket 与逐轮治理

* feat(gateway): 增加 WS 分层开关并修复连接治理

* fix(gateway): 关闭停用或删除分组的 WS 连接
2026-09-10 21:18:41 +08:00
tbphp 0c9d188892 fix(codex): 修正请求身份头覆盖与会话兼容 (#617)
* fix(codex): 修正请求身份头覆盖与会话兼容

* fix(codex): 保留显式空值身份请求头
2026-09-10 20:04:23 +08:00
tbphp 7cbd2e672d feat(responses): 实现响应状态续接路由 (#609)
* feat(responses): 实现响应状态续接路由

* fix(responses): 限制响应 ID 长度并兼容缺失字段删除

* fix(responses): 按协议存储能力匹配续接路由
2026-09-09 23:13:41 +08:00
tbphp fe4b6ac159 feat(gateway): 接入原生文本重排序协议 (#607) 2026-09-09 15:06:50 +08:00
tbphp 7ed01e668b feat(images): 支持 Antigravity 与 Gemini 共享生图转换 (#605)
* feat(antigravity): 支持 Images 单向生图转换

* feat(images): 复用转换并支持 Gemini 渠道生图

* fix(images): 修正生图转换失败分类并恢复候选回退
2026-09-09 13:20:10 +08:00
tbphp 1898d8ee64 fix(gateway): 修复协议查询参数与零输出边界 (#603) 2026-09-09 11:18:20 +08:00
tbphp d4699dd2b1 feat(health): 支持凭据按模型冷却与统一恢复 (#599)
* feat(health): 支持凭据按模型冷却与统一恢复

* fix(health): 修复模型冷却的错误契约与恢复边界

* fix(web): 修复模型冷却展示与重置反馈

* fix(web): 保持分组健康与恢复反馈一致

* fix(health): 修复停用分组的模型冷却身份展示
2026-09-09 08:05:43 +08:00
Oandtbphp 6da82242d8 feat(subscription): support custom upstream URLs (#579)
* feat(codex): support custom base URL

* fix(codex): require HTTPS for custom base URL

* docs: document changed subscription functions

* fix(groups): 展示并区分详情中的默认与自定义地址

* fix(groups): 统一上游地址配置交互与图标位置

* fix(subscription): 绑定额度重置操作的上游地址

* fix(gateway): 隔离旧上游请求的健康状态更新

---------

Co-authored-by: tbphp <tangb7420@gmail.com>
2026-09-08 19:44:39 +08:00
tbphp e0bfa07ec4 feat(scheduler): 统一凭据权重并调整模型错误重试 (#597)
* feat(scheduler): 统一凭据权重并调整错误重试

* docs: 更新三语配置权重说明
2026-09-08 17:18:08 +08:00
tbphp ae59a0ae85 feat(channel): 增加 Sub2API 渠道 (#567) 2026-09-04 22:55:55 +08:00
tbphp 21fa526a29 fix(gateway): 统一 Responses store 路由兼容 (#532)
* fix(gateway): 统一 Responses store 路由兼容

* fix(gateway): 收紧 Responses 降级归一化

* fix(channel): 将 DeepSeek 标记为无状态
2026-09-02 19:54:30 +08:00
tbphp 0b8ee145f6 fix(gateway): 兼容 Responses store 无状态降级 (#527)
* fix(gateway): 兼容 Responses store 无状态降级

* fix(responses): 收紧无状态降级边界
2026-09-02 05:31:56 +08:00
tbphp e6b752b4db feat(channel): 增加 GPT-Load 上游渠道 (#526) 2026-09-01 21:52:38 +08:00
tbphp 1be3587000 feat(channel): 增加 CLIProxyAPI 多协议渠道 (#525) 2026-09-01 21:07:19 +08:00
tbphp d7d28370da feat(channel): 增加 New API 多协议渠道 (#524) 2026-09-01 19:56:40 +08:00
tbphp 922c6e055c fix(subscription): 避免临时刷新失败锁死凭据 (#499) 2026-08-30 18:20:28 +08:00
tbphp aee2111290 feat(gateway): 支持 OpenAI Embeddings API (#496)
新增原生 OpenAI Embeddings 端点,覆盖首期 API Key 渠道,并复用现有路由、健康、用量、日志与管理流程。
2026-08-30 00:45:19 +08:00
tbphp 1a6e454475 feat(subscription): 接入 Codex/Claude 被动额度信号观察 (#487)
* feat(subscription): 接入 Codex/Claude 被动额度信号观察

从 Codex/Claude 订阅请求的响应 Header 中安全采集额度信号,归一化为与主动观察一致的账号级窗口,
经内存 pending map 合并后由 RequestLog worker 复用现有 quotaWake 异步落库,
自动刷新账号卡的额度窗口与同步时间;额度仅用于管理面展示,不参与路由、调度或健康判定。

同时修复 recordCredentialObservationFailure / invalidateCredentialObservationAfterReset
整行 Save 覆盖并发写入 snapshot_json 的既有问题,改为按列更新。

* fix(subscription): 修正被动额度合并的两处数据错误

丢弃比已存记录更旧的被动采样:手动刷新在 pending 落库前完成时,
旧采样会让 observed_at_ms 倒退并用旧额度覆盖新值;updated_at_ms
条件更新只能拦截读取之后的写入,拦不住这种时间倒退。

MergeQuotaWindow 不再用空字符串覆盖 Label/LabelKey/Scope/Unit:
这些是快照必填字段,被清空后 ApplyQuotaWindows 会跳过该窗口并
清除管理面低额度提示。

* fix(subscription): 落库确认后清空 pending 窗口缓存

ack 此前只清 dirty 标记,不清 entry.windows;下一次响应即使只带
部分字段,也会把已经落库的陈旧字段当作当前观察重新合并进去,
可能覆盖同一时间发生的主动刷新写入的更新值。
现在版本匹配时一并清空窗口缓存,配合已有的 MergeQuotaWindow
字段级保护,落空字段的响应不会再用零值或陈旧值覆盖数据库现值。

* fix(subscription): 通用化 Codex 被动额度解析并修正三处数据错误

Codex 被动解析改为从 Header 自动发现限额命名空间,不再写死
primary/secondary 两个账号级窗口。带 Limit-Name 的附加限额
(如 GPT 5.3 Codex Spark)现在也能被动更新,且窗口 ID 与主动
JSON 路径一致;将来新增的限额类型无需改代码即可识别。缺少
Limit-Name 的命名空间跳过,因为无法生成可匹配的稳定 ID。

同时修正:
- 越界 used-percent、非正或溢出的 reset/window 一律丢弃,
  不再用 0 或回绕值覆盖快照中的有效字段;
- 被动不再输出 Label/LabelKey,避免只带使用率的响应把 7d 窗口
  的标签改写成 Session,与 window_seconds 自相矛盾;
- 主动成功的 observed_at_ms/updated_at_ms 改用响应完成时间
  (last_attempt_at_ms 仍为尝试开始时间),慢速手动刷新不再被
  刷新期间捕获的被动样本反向覆盖,CAS token 也不再可能不变;
- 窗口值未变化但确实观察到时推进 observed_at_ms,低频账号不再
  长期显示数小时前同步。

* refactor(subscription): pending 只保留最新一次响应,不再跨响应合并

pending 条目此前会把多次响应的窗口字段按 ID 合并,却只记录一个
观察时间。混在一起的字段因此可能带着较晚的时间戳落库,反过来
盖掉这期间提交的主动刷新结果。上一轮给 ack 加清缓存只堵住了
"已落库后残留"这一半,尚未落库前合并的那一半仍然存在。

改为每次记录整体替换:一个 pending 条目只承载一次响应,窗口与
观察时间始终描述同一时刻,这类时序覆盖从根上不再可能,ack 也
不需要再清缓存。被丢弃的旧响应不构成数据丢失——快照中该窗口
保持原值,下一次带该窗口的响应会刷新它。

生产代码净减 19 行。

* fix(subscription): 用 observation_version 做被动写入的并发令牌

时间戳不能充当 CAS 令牌:两次写入可能落在同一毫秒,updated_at_ms
数值不变会让已过期的被动写入通过条件更新,盖掉刚提交的主动刷新。
改用 observation_version(主动成功本就递增),并保留 updated_at_ms
比对以覆盖主动失败与重置这两条只改元数据、不动版本的路径。

同时收敛三处局部合同:
- 绝对 reset 无效时继续尝试同一响应中的相对 reset,不再因一个坏
  Header 丢掉可用值;
- 被动输出不再携带 Scope / Unit / IsPrimary(此前只清了 Label),
  贯彻「自动更新只改额度数值与状态」,Codex 与 Claude 两侧一致;
- pending 深拷贝窗口的指针字段,调用方后续修改不会改变待落库内容。

* fix(subscription): ACK 时移除 pending 条目并让同毫秒判给主动结果

ACK 此前只清 dirty 标记,条目连同克隆的窗口一直留在 map 里。凭据
删除后也不会释放,长期运行且凭据有增删的实例会持续增长。改为版本
匹配时直接移除条目——凭据删除本就走「registry 查不到 → ACK」这条
路径,因此不需要再给删除流程挂额外的清理钩子。

被动样本与行内 observed_at_ms 相同时改为丢弃(原为严格小于才丢)。
被动 Header 先捕获、主动刷新稍后完成,两者截断到同一毫秒时,旧的
被动结果会盖掉权威的主动结果,且此时 CAS 不冲突。相同毫秒判给主动
结果即可,不引入更高精度时间戳。该判断收紧后,落库处基于
alreadyObservedAt 的分支成为死代码,一并删除。

顺带移除无生产调用方的 AckPassiveQuotaObservation 导出方法。
2026-08-28 18:26:00 +08:00
tbphp b1a7f373fc fix: 接入首个流错误安全切换 (#486)
* fix(gateway): 接入首个流错误安全切换

* fix(gateway): 保留显式重放安全状态
2026-08-28 08:15:13 +08:00
tbphp d4bbb9193a feat: 升级 Go 与 SDK 版本 (#485)
* feat(gateway): 升级 SDK 并封口兼容合同

* fix: 修正升级后的格式与模型过滤

* fix(ci): 更新 Go 漏洞扫描器

* fix(gateway): 拒绝非标准服务层级字段
2026-08-27 22:48:16 +08:00
tbphp e9e88dce99 feat(images): 接入 OpenAI 图片生成与编辑 (#476)
* feat(images): 接入 OpenAI 图片生成与编辑

* fix(images): 补齐响应容量与边界处理

* fix(images): 修正协议观测与响应上限覆盖

* fix(stream): 保证取消优先于流关闭

* fix(images): 修正空 SSE 错误对象判定

* fix(images): 避免媒体数据触发凭据误判

* fix(images): 阻止流式响应泄漏凭据

* fix(images): 校验完整流事件后再转发

* fix(images): 修正响应模型观测
2026-08-27 15:11:52 +08:00
tbphp 5dc5304c25 fix(gateway): 完善统一错误规则 (#468)
* fix(gateway): 完善统一错误规则

* fix(gateway): 采纳错误规则审查意见

* fix(gateway): 收紧未发送网络错误判断
2026-08-25 00:20:53 +08:00
tbphp d518b06acc refactor: 统一错误决策与执行链路 (#466)
* refactor: 统一错误决策与执行链路

* fix(gateway): 修正错误来源与候选预算
2026-08-24 23:26:22 +08:00
tbphp bd539713da perf: 优化测试性能与 CI/发布流水线耗时 (#465)
* test(control): 消除测试 fixture 中的重复密钥派生

- internal/control:fixture 构造中 388 次重复执行 PBKDF2(10 万轮
  SHA256)密钥派生,改为共享单例,仅派生一次
- 新增 internal/testutil/encryptiontest,提供按 key material 值
  memoize 的共享 encryption.Service,横向覆盖 gateway、subscription、
  execution/cpa 中同样存在的重复派生(PBKDF2 占比最高达 79%)
- aesService 构造后只读,跨 fixture(含并行测试)共享安全;container
  包同类调用经排查确认属于被测装配流程本身,不适用本次改造

* test(state): 迁移测试改用共享 schema 模板

state/loader 中 openMigratedDatabase 被 21 次调用,每次都完整走一遍
迁移注册表;改为复用 sqlitetest.OpenMigrated 的模板缓存,与 control、
requestlog 部分测试已采用的方式一致。app、container、requestlog 中同
类调用点经逐点排查,均属被测对象本身或依赖真实文件/账本状态,不适用。

* ci(release): 消除 CI 与发布流水线中的耗时浪费

- race-tests 独立 setup-go 缓存命名空间,避免与 test/database-contract
  共用 key 导致 race-instrumented GOCACHE 永远无法写回
- 移除 publish-images 中零命中的 GHA buildx image cache,同时消除其
  失败会拖累发布状态判定为 partial/blocked 的关联风险
- 三个只读 job(仅用 buildx imagetools 查询)移除多余的 buildx 初始化
- native-artifact-smoke 改为按需下载单个 binary + 独立 checksums,
  不再下载完整 release-assets

* test(control): 第一批测试标记 t.Parallel(35 个文件)

internal/control 651 个顶层测试里只有 5.8% 标了 t.Parallel(),其余
在包内是排队串行执行的;race-tests 总耗时现在完全由该包的最长执行时
间决定(213s),是唯一剩余的瓶颈。

本批覆盖 35 个文件、299 个函数。排除 18 个不适用的函数:
- 16 个直接操作全局 logrus 状态的测试(catalog_sync_test.go 等 8 个
  文件),继续保持串行;Go 的 t.Parallel() 调度语义保证未标记的测试
  会在所有并行测试开始前完整跑完,两者不会交叉执行
- external_database_integration_test.go 的 2 个测试依赖
  GPT_LOAD_DATABASE_TEST_DSN:race-tests 中因未设置而被 t.Skip,标记
  并行无收益;database-contract job 中会共享同一个外部数据库实例真
  实执行,标记并行有正确性风险(唯一索引冲突/断言假设独占)

已排查确认安全:t.Setenv/os.Setenv 均为 0 处,无硬编码端口占用,每个
fixture 走独立 :memory: 数据库;本地 -count=3 重复验证无 flaky。

剩余约 297 个函数(36 个文件)作为第二批,待本批 CI 实测确认收益后
再决定是否推进。

* test(control): 第二批测试标记 t.Parallel,补齐排除说明(36 个文件)

覆盖剩余 297 个函数、36 个文件,加上第一批的 299 个,internal/control
除 18 个明确排除的函数外全部标记 t.Parallel()。

为 18 个排除函数逐一补充一行注释说明原因,避免日后被误认为遗漏而被
顺手加上 t.Parallel():
- 16 个劫持全局 logrus 状态的测试
- 2 个依赖 GPT_LOAD_DATABASE_TEST_DSN 共享外部数据库的测试

本地 -count=3 重复验证、全量 go test -count=1 . ./internal/...(58
包 ok)均通过。

* fix(release): 采纳 Review 反馈,修正文档措辞与产物保留期

- encryptiontest.Service 的文档注释修正为明确说明缓存仅在单个包的
  测试二进制内有效,不跨包共享(每个包的 go test 是独立进程)
- native-artifact-smoke 依赖的 binary-*、release-checksums 保留期
  从 1 天提高到与 release-assets 一致的 14 天:失败的 release run
  若延迟超过 1 天才重试,此前较短的保留期会导致产物过期、下载失败,
  阻塞发布流程

以下反馈经核实判定为不成立,未采纳:
- validation_test.go 中两个测试被指"竞争全局并发槽位"——经查
  newValidationWorkerForTest 每次调用构造全新独立实例(worker、
  channel、mutation coordinator 等),validationConcurrency 只是
  编译期常量,两个测试之间不存在任何运行时共享状态
2026-08-24 20:07:11 +08:00
tbphp 4f9eba5802 feat(proxy): 完成数据面代理与渠道约束 (#459)
* feat(proxy): 实现第一阶段数据面代理

* feat(proxy): 收敛渠道与代理协议支持

* fix(proxy): 修复环境检测与迁移验证

* fix(proxy): 回收旧代理运行时并校验地址

* fix(proxy): 补齐创建链路与前端校验

* fix(proxy): 收口订阅代理与迁移兼容

* fix(proxy): 修复环境代理与运行时回收

* fix(proxy): 为系统外部请求应用全局代理

* docs(config): 精简环境配置说明

* feat(proxy): 重构代理设置的前端交互与样式

设置页与分组设置页:
- 代理设置接入页面统一的草稿态与保存栏,不再独立即时提交
- 计入页面 dirty/valid,参与未保存离开拦截与并发冲突推迟
- 新增 ProxyOverrideRow,用分段控件替代原独立编辑弹层

账号卡片与密钥行:
- ProxyConfigEditor 新增 card 外观:标题在白底面板外,与相邻小节同级
- 修掉按视口宽度判断断点的问题,窄容器内不再挤压错乱
- 编辑态下拉固定宽度,不随所选模式伸缩;整体收进两行
- 新增 ProxyScopeIndicator,凭据配置了独立代理时给出标识与悬停提示

密钥行交互:
- 操作列收成「更多操作」菜单与展开图标,与账号卡片同构
- 折叠区分为权重、出站代理、运行诊断三个带标题小节,设置与诊断不再混放
- 权重编辑从弹层迁入折叠区,权重列的值可点击直达
- 释放的列宽还给凭据、权重与最近调用列

文案精简为继承、直连、自定义,并清理两处无引用的死键

* refactor(proxy): 统一代理设置的覆盖交互并消除样式重复

设置页与分组设置页:
- 代理行改用 RuntimeOverrideRow,与超时等设置项共用同一组件
- inherit 映射为“未覆盖”,direct/custom 映射为“显式覆盖”,因此补齐了
  覆盖/恢复默认按钮、覆盖状态徽章、当前有效值与待恢复默认态
- 分段控件只保留直连与自定义,继承由外层覆盖开关表达
- 删除自造的 ProxyOverrideRow,新增只含编辑控件的 ProxyOverrideControl

已保存的自定义地址:
- 输入框不做回填,统一由 placeholder 展示已存地址
- 同模式下留空或与已存地址逐字相同均视为未改动,顺带挡住掩码被当作
  新密码存回;无改动时保存按钮禁用
- 重新开启覆盖时回到基线已存的覆盖模式,使恢复默认可原路撤销

代码质量:
- 面板外壳(标题 + 白底面板 + 标签/值/编辑图标/操作)抽为全局
  .setting-panel,代理、权重、诊断三处共用,不再各写一份
- 删除 ProxyConfigEditor 已无调用方的 row 外观及随之失效的 props、
  徽章分支与始终隐藏的文案
- 占位地址推导与覆盖开关规则收敛为 proxy.ts 中的共享函数
- 移除代理输入提示文案及其失去引用的 i18n 键

密钥行折叠区诊断值字号对齐上方面板。重构以构建产物 CSS 逐条比对验证,
差异均为已论证的等价改写。

* fix(proxy): 修复代理传输与校验边界
2026-08-24 11:11:22 +08:00
tbphp 8898421ee8 refactor(subscription): 分离额度刷新与请求调度 (#449)
* refactor(subscription): 分离额度刷新与请求调度

* fix(subscription): 重置后刷新额度信息

* fix(subscription): 修正重置刷新并发状态

* fix(subscription): 收口重置后额度刷新状态
2026-08-21 17:40:38 +08:00
tbphp e74919e819 fix(stream): 修复订阅流组帧并收口响应头 (#450)
* fix(stream): 修复订阅流组帧并收口响应头

* fix(stream): 修复空流块与部分响应头
2026-08-21 16:08:50 +08:00
tbphp 25a3612c3c fix(subscription): 补全 Grok 套餐与额度观察 2026-08-18 23:02:58 +08:00
tbphp d1fd07ce3e feat(subscription): 接入 xAI OAuth 订阅渠道 2026-08-18 21:22:13 +08:00
tbphp cb0d7018f5 refactor(subscription): 统一渠道展示与目录结构 2026-08-18 11:30:07 +08:00
tbphp c3b132daf3 fix(antigravity): 完善订阅渠道故障转移与导入 2026-08-18 08:08:44 +08:00
tbphp ef0459c347 feat(subscription): 接入 Antigravity 订阅渠道 2026-08-17 20:25:57 +08:00
tbphp 7f018218f4 fix(cpa): 修正本地计数执行元数据 2026-08-17 16:08:29 +08:00