- 28 Feb, 2026 10 commits
-
-
Wesley Liddick authored
feat(admin): 添加管理员直接修改用户 API Key 分组的功能
-
shaw authored
-
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 全部通过
-
Wesley Liddick authored
feat(openai-ws): support websocket mode v2, optimize relay performance, enhance sora
-
yangjianbo authored
-
yangjianbo authored
-
Wesley Liddick authored
fix(ci): 修复 gosec 扫描因 ent 生成代码导致超时的问题
-
wucm667 authored
【问题描述】 backend-security CI job 持续运行约 6 小时后被 GitHub Actions 强制取消, 表现为 'Run gosec' 步骤挂起,最终以 cancelled 状态结束。 【根本原因】 gosec 对 ./... 执行 AST 静态分析时,包含了 ent/ 目录下的 自动生成文件(如 mutation.go 共 24800 行),导致分析时间 超出 GitHub Actions 默认的 6 小时上限。 【修复方案】 1. gosec 命令增加 -exclude-dir=ent 跳过自动生成代码目录 2. backend-security job 增加 timeout-minutes: 15,避免未来 类似问题再次长时间卡死后才被发现 ent/ 目录内容全部由 Ent ORM 框架自动生成,开发者不直接编写, 不需要纳入人工安全审计范围,排除后不影响扫描有效性。
-
- 27 Feb, 2026 13 commits
-
-
Wesley Liddick authored
feat(i18n): 切换语言时同步更新页面标题
-
shaw authored
-
Wesley Liddick authored
fix: add 2K image default pricing at 1.5x base price
-
Wesley Liddick authored
fix(frontend): add priority hint in edit account modal
-
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
-
wucm667 authored
-
Wesley Liddick authored
fix: update antigravity user-agent version to 1.19.6
-
Wesley Liddick authored
feat: 新增 gemini-3.1-flash-image 支持,替代 gemini-3-pro-image
-
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
-
Wesley Liddick authored
fix(frontend): 批量编辑添加跨平台模型映射警告与智能过滤
-
Wesley Liddick authored
fix(gateway): count_tokens 不支持时返回 404 而非伪造的 200
-
- 26 Feb, 2026 17 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) -
cagedbird043 authored
- useModelWhitelist.ts 添加 gpt-5.3-codex、gpt-5.3-codex-spark - BulkEditAccountModal.vue 添加 5.3 模型选项与预设按钮(含 5.2→5.3 升级映射)
-
shaw authored
-
cagedbird043 authored
-
cagedbird043 authored
- 新增 selectedPlatforms prop,从父组件传入选中账号的平台集合 - 根据选中平台过滤模型列表与预设映射按钮,避免误操作 - 混选多平台时显示 amber 警告横幅,提醒用户注意映射适用性 - 仅警告不阻断,保持加法兼容
-
Wesley Liddick authored
refactor(admin): 消除测试连接 Gemini 模型硬编码,统一由 DefaultModels 提供
-
Wesley Liddick authored
feat(antigravity): 更新 opencode.json 模板至 Claude 4.6 并补齐模型支持
-
cagedbird043 authored
-
cagedbird043 authored
-
cagedbird043 authored
-
wucm667 authored
- resolveDocumentTitle() 新增 titleKey 参数,优先通过 i18n 翻译 - router beforeEach 中将路由 meta.titleKey 传入标题解析函数 - setLocale() 切换语言后同步刷新 document.title
-
cagedbird043 authored
-
shaw authored
FetchGoogleOneTier 原先在方法内部直接创建 DriveClient 实例, 导致单元测试中对 googleapis.com 发起真实 HTTP 请求,在 CI 环境 产生 401 错误。 将 DriveClient 作为依赖注入到 GeminiOAuthService,遵循项目 端口与适配器架构规范: - 新增 repository/gemini_drive_client.go 作为 Provider - 注册到 repository Wire ProviderSet - 测试中使用 mockDriveClient 替代真实调用
-
Wesley Liddick authored
fix: count_tokens 端点不支持时降级返回空值
-
Wesley Liddick authored
移除 PostgreSQL 容器多余重复的 PGDATA 环境变量
-
alfadb authored
第三方 Anthropic 中转站通常不支持 /v1/messages/count_tokens 端点, 上游返回 404 时降级返回 {input_tokens: 0},客户端 fallback 到本地估算。 - 仅匹配 404 状态码,语义明确:端点不存在 - 其他错误 (400/429/500) 保留原始处理链和 ops 遥测 - 无需解析错误消息内容,不依赖字符串匹配 - 新增 table-driven 测试覆盖 fallback 和 non-fallback 路径
-