liuxiongfeng
91d0059f8d
Merge branch 'develop' into release/custom-0.1.80
...
# Conflicts:
# backend/internal/pkg/antigravity/client.go
# backend/internal/service/antigravity_oauth_service.go
# backend/internal/service/antigravity_oauth_service_test.go
# backend/internal/service/antigravity_token_provider.go
2026-02-11 16:20:56 +08:00
liuxiongfeng
44693d0dfb
chore: bump version to 0.1.79.7
2026-02-11 14:39:29 +08:00
liuxiongfeng
c722212e12
fix: distinguish client disconnection from upstream retry failure
...
When client disconnects during upstream request, the error was
incorrectly reported as "Upstream request failed after retries".
Now checks context cancellation first and returns
"Client disconnected before upstream response" instead.
2026-02-11 14:39:14 +08:00
liuxiongfeng
f12da65962
docs: add Admin API reference to CLAUDE.md and AGENTS.md
2026-02-11 14:39:02 +08:00
Wesley Liddick
723102766b
Merge pull request #553 from Edric-Li/feat/antigravity-onboard-projectid
...
feat(antigravity): 添加 onboardUser 支持,修复 project_id 缺失问题
v0.1.80
2026-02-11 13:52:44 +08:00
Edric Li
a4a46a8618
✨ feat(antigravity): 添加 onboardUser 支持并修复 project_id 补齐逻辑
...
- 新增 OnboardUser API 客户端方法,支持账号 onboarding 获取 project_id
- loadProjectIDWithRetry 增加 onboard 回退:LoadCodeAssist 未返回 project_id 时自动触发 onboarding
- GetAccessToken 中 project_id 补齐改用轻量 FillProjectID 替代全量 RefreshAccountToken
- 补齐逻辑增加 5 分钟冷却机制,防止频繁重试
- OnboardUser 轮询等待改为 context 感知,支持提前取消
- 提取 mergeCredentials 辅助方法消除重复代码
- 新增 extractProjectIDFromOnboardResponse 和 resolveDefaultTierID 单元测试
2026-02-11 13:41:55 +08:00
liuxiongfeng
92745f7534
chore: bump version to 0.1.79.6
2026-02-11 13:08:49 +08:00
liuxiongfeng
f2917aeaf8
fix: use safe type assertion for errcheck lint compliance
2026-02-11 13:06:41 +08:00
liuxiongfeng
a1e2ffd586
refactor: optimize project_id fill to lightweight approach
...
- Replace heavy RefreshAccountToken with lightweight tryFillProjectID
(loadCodeAssist → onboardUser → fallback), consistent with
Antigravity-Manager's behavior
- Add sync.Map cooldown/dedup (60s) to prevent repeated fill attempts
- Add fallback project_id "bamboo-precept-lgxtn" matching AM
- Extract mergeCredentials helper to eliminate duplication
- Use slog structured logging instead of log.Printf
- Fix time.Sleep in OnboardUser to context-aware select
- Fix strings.NewReader(string(bodyBytes)) → bytes.NewReader(bodyBytes)
- Remove redundant tc := tc in test (Go 1.22+)
- Add nil guard in persistProjectID for test safety
2026-02-11 13:00:31 +08:00
liuxiongfeng
78a9705fad
fix: resolve ineffassign lint error in onboard project_id logic
2026-02-11 12:45:52 +08:00
liuxiongfeng
5b6da04a02
docs: 更新 CI 检查流程,强调本地先执行全部检查
2026-02-11 12:43:45 +08:00
liuxiongfeng
4661c2f90f
chore: bump version to 0.1.79.5
2026-02-11 12:35:26 +08:00
liuxiongfeng
90e4328885
chore: remove patch file from tracking
2026-02-11 12:25:15 +08:00
liuxiongfeng
130112a84a
fix: 补齐 Antigravity OAuth 账号 project_id 获取逻辑
...
部分账号 loadCodeAssist 不会立即返回 cloudaicompanionProject,
导致转发时 project 字段为空,上游返回 400 "Invalid project resource name projects/"。
- 新增 OnboardUser API:当 loadCodeAssist 未返回 project_id 时,
通过 onboardUser 完成账号初始化并获取 project_id
- token 刷新时增加 onboard 兜底逻辑
- GetAccessToken 按需补齐:转发时发现 project_id 为空立即触发刷新
- 新增 resolveDefaultTierID 单元测试
2026-02-11 12:25:04 +08:00
liuxiongfeng
b368bb6ea1
chore: bump version to 0.1.79.4
2026-02-11 04:55:17 +08:00
liuxiongfeng
9ecb6211d6
docs: update CLAUDE.md and .gitignore
2026-02-11 04:54:11 +08:00
liuxiongfeng
79fba9c8d3
refactor: consolidate failover logic into FailoverState
...
- Merge FailoverRetry/FailoverSwitch into single FailoverContinue action
- Extract HandleSelectionExhausted into FailoverState (was duplicated 3×)
- Move helper functions (needForceCacheBilling, sleepWithContext) into failover_loop.go
- Inline sleepFailoverDelay, replace sleepAntigravitySingleAccountBackoff with constant
- Delete gateway_handler_single_account_retry_test.go (tested removed function)
- Add 6 test cases for HandleSelectionExhausted
2026-02-11 04:54:05 +08:00
liuxiongfeng
37c76a93ab
chore: bump version to 0.1.79.3
2026-02-11 01:56:52 +08:00
liuxiongfeng
86e600aa52
fix: 并发/排队面板支持 platform/group 过滤
...
- 添加 platformFilter/groupIdFilter props 变化监听器,过滤条件变化时
立即重新加载数据(修复选择平台后显示"暂无数据"的问题)
- 全栈为 getUserConcurrencyStats 添加 platform/group_id 过滤支持:
前端 API → Handler 解析 query params → Service 层过滤逻辑
- Service 层通过账号的 group 关联反查用户的 AllowedGroups,
与 GetConcurrencyStats 的过滤模式保持一致
2026-02-11 01:41:34 +08:00
liuxiongfeng
6a1c28b70e
docs: 优化 beta 部署流程,构建服务器共用仓库
...
- beta 和正式共用构建服务器 /root/sub2api 仓库,通过镜像标签区分
- 首次部署和更新 beta 流程统一使用共用仓库 + 分支切换
- 各步骤增加检查点和验证说明
2026-02-11 00:41:05 +08:00
liuxiongfeng
9375f1809c
docs: 部署步骤增加前置检查和验证环节
...
- 各步骤增加检查点说明,确保每步执行成功后再继续
- 步骤 0 强调推送成功确认和未提交改动检查
- 步骤 1 增加版本号验证
- 步骤 2 增加常见构建问题排查(buildx 版本、磁盘空间)
- 步骤 4 增加生产服务器代码同步步骤
- 新增「构建服务器首次初始化」章节
2026-02-11 00:34:48 +08:00
liuxiongfeng
f176150c93
Merge branch 'release/custom-0.1.79'
...
# Conflicts:
# AGENTS.md
# CLAUDE.md
# backend/cmd/server/VERSION
# backend/internal/handler/gateway_handler.go
# backend/internal/handler/gemini_v1beta_handler.go
# backend/internal/service/antigravity_gateway_service.go
# backend/internal/service/antigravity_rate_limit_test.go
# backend/internal/service/antigravity_single_account_retry_test.go
# backend/internal/service/antigravity_smart_retry_test.go
2026-02-11 00:32:11 +08:00
liuxiongfeng
30d25084f0
chore: bump version to 0.1.79.2
2026-02-11 00:22:19 +08:00
liuxiongfeng
91ad94d941
docs: 部署流程改为构建服务器与生产服务器分离
...
镜像构建从生产服务器(clicodeplus)迁移到构建服务器(us-asaki-root),
通过 docker save/load 管道传输,避免编译时资源占用影响线上服务。
2026-02-11 00:20:35 +08:00
liuxiongfeng
57a778dccf
chore: bump version to 0.1.79.1
2026-02-10 23:48:23 +08:00
liuxiongfeng
f702c66659
fix: resolve gofmt alignment issue in failover_loop_test.go
...
Move inline comments to separate lines to avoid gofmt
consecutive-line comment alignment requirements.
2026-02-10 23:40:37 +08:00
liuxiongfeng
a095468850
fix: correct import path in failover_loop.go and failover_loop_test.go
...
Use github.com/Wei-Shaw/sub2api/internal/service instead of
sub2api/internal/service to match the module path in go.mod.
2026-02-10 23:35:21 +08:00
liuxiongfeng
f9b6a20995
Merge tag 'v0.1.79' into develop
...
增强错误处理与重试机制,新增 MODEL_CAPACITY_EXHAUSTED 同账号固定间隔重试、瞬态错误同账号重试优先于故障转移,并大幅优化错误匹配性能。
- MODEL_CAPACITY_EXHAUSTED (503) 使用固定 1s 间隔重试最多 60 次,不切换账号
- 瞬态错误(Google 400、空流响应)同账号重试 2 次后再触发故障转移
- 空流响应触发 failover 自动换号重试,不再直接返回 502
- Google "Invalid project resource name" 400 错误触发 failover 并临时封禁账号 1 小时
- 错误透传规则新增 skip_monitoring 选项,匹配的错误不记录到运维监控日志
- Antigravity 转发支持 daily/prod 单 URL 切换
- 错误匹配性能优化:延迟/限制 body ToLower,预计算规则关键词和平台集合
- MODEL_CAPACITY_EXHAUSTED 全局去重,避免并发请求重复重试
- 503 重试 body 读取限制从 2MB 降至 8KB
- time.After 替换为 time.NewTimer,防止 context 取消时 timer 泄漏
- 临时封禁冷却时间从 30 分钟缩短至 1 分钟(同账号重试耗尽后)
- 修复错误透传规则 skip_monitoring 未生效的问题
- 修复 CI 检查失败(gofmt、errcheck、staticcheck)
# Conflicts:
# backend/internal/service/error_passthrough_runtime_test.go
2026-02-10 23:25:51 +08:00
liuxiongfeng
f2770da880
refactor: extract failover error handling into shared HandleFailoverError
...
- Extract duplicated failover error handling from gateway_handler.go (Gemini-compat & Claude paths) and gemini_v1beta_handler.go into shared failover_loop.go
- Introduce TempUnscheduler interface for testability (GatewayService implicitly satisfies it)
- Add comprehensive unit tests for HandleFailoverError (32 test cases covering all paths)
- Fix golangci-lint issues: errcheck in test type assertion, staticcheck QF1003 if/else→switch
2026-02-10 23:13:37 +08:00
Wesley Liddick
ae6fed15cc
Merge pull request #548 from Edric-Li/main
...
feat: 错误处理增强、重试优化与性能改进
v0.1.79
2026-02-10 22:46:58 +08:00
Edric Li
378e476e48
fix: 修复 CI 检查失败
...
- gofmt: 修复 error_passthrough_service.go 格式问题
- errcheck: 修复 error_passthrough_runtime_test.go 类型断言未检查
- staticcheck: if-else 改为 switch (gateway_service.go)
- test: 修复两个测试用例错误使用 MODEL_CAPACITY_EXHAUSTED 导致走错路径
2026-02-10 22:08:49 +08:00
Edric Li
2a1067c82b
Merge remote-tracking branch 'upstream/main'
2026-02-10 21:52:33 +08:00
Edric Li
a54b81cf74
perf: 错误处理性能优化
...
- MatchRule 延迟/限制 body ToLower,先用 statusCode 短路,只在需要关键词匹配时转换且限制 8KB
- 预计算规则的小写关键词/平台和 error code set,消除运行时重复 ToLower 和线性扫描
- MODEL_CAPACITY_EXHAUSTED 全局去重,避免并发请求重复重试同一模型
- 503 重试 body 读取限制从 2MB 降至 8KB
- time.After 替换为 time.NewTimer,防止 context 取消时 timer 泄漏
2026-02-10 21:40:31 +08:00
liuxiongfeng
d269659e61
chore: bump version to 0.1.78.2
2026-02-10 21:28:52 +08:00
liuxiongfeng
c4d6715443
chore: squash merge customizations from develop-old-0.1.77
...
- 定制文档: CLAUDE.md, AGENTS.md
- UI定制: 微信客服按钮, 首页改造, 移除GitHub链接
- 部署运维: docker-compose.yml, 压测脚本
- CI/gitignore 小改动
2026-02-10 20:59:54 +08:00
Edric Li
2d4236f76e
fix: 修复错误透传规则 skip_monitoring 未生效的问题
...
- ops_error_logger: status < 400 分支增加 OpsSkipPassthroughKey 检查
- ops_upstream_context: 新增 checkSkipMonitoringForUpstreamEvent,中间重试/故障转移事件也能触发跳过标记
- gateway_handler/openai_gateway_handler/gemini_v1beta_handler: handleFailoverExhausted 匹配规则后设置 OpsSkipPassthroughKey
- antigravity_gateway_service: writeMappedClaudeError 增加 applyErrorPassthroughRule 调用
2026-02-10 20:56:01 +08:00
Wesley Liddick
84ced1c497
Merge pull request #543 from slovx2/upstream_main
...
feat(antigravity): 转发与测试支持 daily/prod 单 URL 切换
2026-02-10 14:57:46 +08:00
song
b161312183
test(antigravity): 更新单URL策略下的重试断言
2026-02-10 14:36:09 +08:00
song
1f647b120a
feat(antigravity): 转发与测试支持daily/prod单URL切换
2026-02-10 13:51:29 +08:00
Edric Li
7d0a30fa8f
merge: sync upstream main (antigravity single-account 503 retry)
...
合并上游新增的 Antigravity 单账号 503 退避重试机制,
解决与本地 MODEL_CAPACITY_EXHAUSTED 逻辑的冲突,两者共存。
2026-02-10 12:00:21 +08:00
Edric Li
d95e04fd1f
feat: 错误透传规则支持 skip_monitoring 跳过运维监控记录
...
在每条错误透传规则上新增 skip_monitoring 选项,开启后匹配该规则的错误
不会被记录到 ops_error_logs,减少监控噪音。默认关闭,不影响现有规则。
2026-02-10 11:42:39 +08:00
erio
fc4a1c5433
Merge branch 'release/custom-0.1.78'
...
# Conflicts:
# backend/cmd/server/VERSION
2026-02-10 11:41:29 +08:00
erio
6bdd580b3f
chore: bump version to 0.1.78.1
2026-02-10 11:40:36 +08:00
erio
9cf4882f4c
Merge tag 'v0.1.78' into develop
...
Resolve conflict in antigravity_gateway_service.go by keeping both
retry strategies:
- MODEL_CAPACITY_EXHAUSTED: handleModelCapacityExhaustedRetry (ours)
- Single-account 503 long delay: handleSingleAccountRetryInPlace (upstream)
Update tests to reflect that MODEL_CAPACITY_EXHAUSTED always goes
through capacity retry regardless of single-account mode.
2026-02-10 11:32:56 +08:00
erio
406dad998d
chore: bump version to 0.1.77.2
2026-02-10 10:59:34 +08:00
erio
8b0db22c18
Merge branch 'develop' into release/custom-0.1.77
2026-02-10 10:58:52 +08:00
shaw
5dd83d3cf2
fix: 移除特定system以适配新版cc客户端缓存失效的bug
v0.1.78
2026-02-10 10:28:34 +08:00
Wesley Liddick
14e1aac9b5
Merge pull request #533 from GuangYiDing/feat/antigravity-single-account-503-retry
...
feat: Antigravity 单账号分组 503 退避重试机制
2026-02-10 09:59:48 +08:00
erio
f06048eccf
fix: simplify MODEL_CAPACITY_EXHAUSTED to single retry for all cases
...
Both short (<20s) and long (>=20s/missing) retryDelay now retry once:
- Short: wait actual retryDelay, retry once
- Long/missing: wait 20s, retry once
- Still capacity exhausted: switch account
- Different error: let upper layer handle
2026-02-10 04:05:20 +08:00
erio
05f5a8b61d
fix: use switch statement for staticcheck QF1003 compliance
2026-02-10 03:59:39 +08:00