- 28 Feb, 2026 5 commits
-
-
QTom authored
feat/admin-apikey-group-update 分支给 UserRepository 接口新增了 AddGroupToAllowedGroups 方法,需要在测试 stub 中补充实现以通过编译。 - sora_client_handler_test.go: stubUserRepoForHandler - sora_generation_service_test.go: stubUserRepoForQuota
-
QTom authored
## 核心功能 - 添加 AdminUpdateAPIKeyGroupID 服务方法,支持绑定/解绑/保持不变三态语义 - 实现 UserRepository.AddGroupToAllowedGroups 接口,自动同步专属分组权限 - 添加 HTTP PUT /api-keys/:id handler 端点,支持管理员直接修改 API Key 分组 ## 事务一致性 - 使用 ent Tx 保证专属分组绑定时「添加权限」和「更新 Key」的原子性 - Repository 方法支持 clientFromContext,兼容事务内调用 - 事务失败时自动回滚,避免权限孤立 ## 业务逻辑 - 订阅类型分组阻断,需通过订阅管理流程 - 非活跃分组拒绝绑定 - 负 ID 和非法 ID 验证 - 自动授权响应,告知管理员成功授权的分组 ## 代码质量 - 16 个单元测试覆盖所有业务路径和边界用例 - 7 个 handler 集成测试覆盖 HTTP 层 - GroupRepo stub 返回克隆副本,防止测试间数据泄漏 - API 类型安全修复(PaginatedResponse<ApiKey>) - 前端 ref 回调类型对齐 Vue 规范 ## 国际化支持 - 中英文提示信息完整 - 自动授权成功/失败提示
-
QTom authored
- 新增 PUT /api/v1/admin/api-keys/:id 端点,允许管理员修改任意用户 API Key 的分组绑定 - 跳过用户级权限校验但保留分组有效性验证,修改后触发认证缓存失效 - Service 层支持三态语义:nil=不修改,0=解绑,>0=绑定,<0=拒绝 - 指针值拷贝保证安全隔离,负数 groupID 返回 400 INVALID_GROUP_ID - 前端 UserApiKeysModal 新增可点击的分组选择下拉框,支持多 Key 并发更新 - 下拉支持视口翻转和滚动关闭,按钮有 disabled 和加载状态 - 覆盖:后端 20 个单元测试 (Service 11 + Handler 9) + 前端 16 个 E2E 测试 - golangci-lint 0 issues, make test-unit 全部通过
-
yangjianbo authored
-
yangjianbo authored
-
- 27 Feb, 2026 4 commits
-
-
erio authored
Previously 2K images used the same base price as 1K ($0.134). Now 2K uses 1.5x multiplier ($0.201), consistent with 4K using 2x ($0.268). - Backend: add 2K size branch in getDefaultImagePrice - Frontend: update 2K placeholder from 0.134 to 0.201 - Tests: update assertions for new 2K default price
-
erio authored
Update the default user-agent version from 1.18.4 to 1.19.6 to match the latest official antigravity client.
-
erio authored
-
erio authored
- Add migration 060 to update model_mapping for all antigravity accounts - Remove gemini-3-pro-image and gemini-3-pro-image-preview mappings - Add gemini-3.1-flash-image and gemini-3.1-flash-image-preview mappings - Update frontend usage window to show GImage for new model - Update isImageGenerationModel to support new model
-
- 26 Feb, 2026 7 commits
-
-
alfadb authored
-
alfadb authored
PR #635 returned HTTP 200 with {"input_tokens": 0} when upstream doesn't support count_tokens (404). This caused Claude Code CLI to trust the zero value, believing context uses 0 tokens, so auto-compression never triggers. Fix: return 404 with proper error body so CLI falls back to its local tokenizer for accurate estimation. Return nil (not error) to avoid polluting ops error metrics with expected 404s. Affected paths: - Passthrough APIKey accounts: upstream 404 now passed through as 404 - Antigravity accounts: same fix (was also returning fake 200) -
shaw authored
-
cagedbird043 authored
-
cagedbird043 authored
-
shaw authored
FetchGoogleOneTier 原先在方法内部直接创建 DriveClient 实例, 导致单元测试中对 googleapis.com 发起真实 HTTP 请求,在 CI 环境 产生 401 错误。 将 DriveClient 作为依赖注入到 GeminiOAuthService,遵循项目 端口与适配器架构规范: - 新增 repository/gemini_drive_client.go 作为 Provider - 注册到 repository Wire ProviderSet - 测试中使用 mockDriveClient 替代真实调用
-
alfadb authored
第三方 Anthropic 中转站通常不支持 /v1/messages/count_tokens 端点, 上游返回 404 时降级返回 {input_tokens: 0},客户端 fallback 到本地估算。 - 仅匹配 404 状态码,语义明确:端点不存在 - 其他错误 (400/429/500) 保留原始处理链和 ops 遥测 - 无需解析错误消息内容,不依赖字符串匹配 - 新增 table-driven 测试覆盖 fallback 和 non-fallback 路径
-
- 25 Feb, 2026 8 commits
-
-
cagedbird043 authored
-
cagedbird043 authored
-
cagedbird043 authored
-
shaw authored
-
huangenjun authored
使用安全的 comma-ok 模式替代裸类型断言,避免 golangci-lint errcheck 报错。 Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
huangenjun authored
新增 jsonMarshalRaw 使用 SetEscapeHTML(false) 替代 json.Marshal, 避免 HTML 字符转义导致客户端无法直接使用返回的 URL。 Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
huangenjun authored
使用 go-sora2api v1.1.0 SDK 替代原有 ~2000 行自建 HTTP/PoW/TLS 指纹代码, SDK 提供高并发性能优化(实例级 rand、PoW 缓冲区复用、context.Context 支持)。 - 新增 SoraSDKClient 适配器实现 SoraClient 接口 - 精简 sora_client.go 为仅保留接口和类型定义 - 更新 Wire 绑定使用 SoraSDKClient - 删除 SoraDirectClient、sora_curl_cffi_sidecar、sora_request_guard 等旧代码 Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
shaw authored
-
- 24 Feb, 2026 16 commits
-
-
erio authored
-
erio authored
-
erio authored
-
cagedbird043 authored
-
erio authored
- Remove Gemini platform exclusion from model restriction UI in Create/Edit account modals (Gemini now supports model_mapping) - Remove outdated Gemini model passthrough info cards - Add model_mapping field to GeminiCredentials type - Extend warmup request interception toggle to Antigravity platform - Remove redundant try/catch in API key account creation - Remove noisy gateway.request_completed debug log - Reorganize Gemini model mapping sections in constants.go
-
erio authored
The ClientSecret constant was left as an empty string after getClientSecret() was refactored to use defaultClientSecret. Remove the dead constant and update the test accordingly.
-
erio authored
- Fix oauth_test.go and client_test.go to use defaultClientSecret variable instead of env var (init() already sets the default) - Align migration 058 gemini-3-pro-high/low/preview mappings with constants.go (map to 3.1 versions)
-
erio authored
Add a built-in default for ANTIGRAVITY_OAUTH_CLIENT_SECRET so the service works out of the box without requiring environment variable configuration. The env var can still override the default.
-
cagedbird043 authored
-
erio authored
-
erio authored
Add missing gemini-3.1-pro-preview -> gemini-3.1-pro-high mapping to DefaultAntigravityModelMapping for consistency with migration 059.
-
cagedbird043 authored
-
cagedbird043 authored
-
cagedbird043 authored
-
erio authored
Add migration 058 to update existing Antigravity accounts with claude-sonnet-4-6 in model_mapping. Add migration 059 to add gemini-3.1-pro-high/low/preview mappings.
-
erio authored
Update the default ANTIGRAVITY_USER_AGENT_VERSION from 1.84.2 to 1.18.4 to match the current Antigravity-Manager desktop client.
-