- 25 Dec, 2025 4 commits
-
-
IanShaw authored
* fix(service): 修复 OpenAI Responses API 测试负载配置 - 所有账号类型统一添加 instructions 字段(不再仅限 OAuth) - Responses API 要求所有请求必须包含 instructions 参数 * feat(crs-sync): CRS 同步时自动刷新 OAuth token 并保留完整 extra 字段 **核心功能**: - CRSSyncService 注入 OAuth 服务依赖(Anthropic + OpenAI) - 账号创建/更新后自动刷新 OAuth token,确保可用性 - 完整保留 CRS extra 字段,避免数据丢失 **Extra 字段增强**: - 保留 CRS 所有原始 extra 字段 - 新增同步元数据: crs_account_id, crs_kind, crs_synced_at - Claude 账号: 从 credentials 提取 org_uuid/account_uuid 到 extra - OpenAI 账号: 映射 crs_email -> email **Token 刷新逻辑**: - 新增 refreshOAuthToken() 方法处理 Anthropic/OpenAI 平台 - 保留原有 credentials 字段,仅更新 token 相关字段 - 刷新失败静默处理,不中断同步流程 **依赖注入**: - wire_gen.go: CRSSyncService 新增 oAuthService/openaiOAuthService * style(crs-sync): 使用 switch 替代 if-else 修复 golangci-lint 警告 - 将 refreshOAuthToken 中的 if-else 改为 switch 语句 - 符合 staticcheck 规范 - 添加 default 分支处理未知平台
-
ianshaw authored
修复 golangci-lint 错误检查问题 - 使用匿名函数包装 defer Close() 并忽略错误 - 符合 Go 最佳实践
-
ianshaw authored
- 新增 BulkUpdate 仓储方法,使用单条 SQL 更新所有账户 - credentials/extra 使用 COALESCE(...) || ? 合并,只更新传入的 key - name/proxy_id/concurrency/priority/status 只在提供时更新 - 分组绑定仍逐账号处理(需要独立操作) - 前端优化:Base URL 留空则不修改,按勾选字段更新 - 完善 i18n 文案:说明留空不修改、批量更新行为
-
ianshaw authored
- 新增批量更新账户凭据接口(account_uuid/org_uuid/intercept_warmup_requests) - 新增前端批量编辑模态框组件 - 优化 CRS 同步逻辑,改进 extra 字段处理 - 优化 CRS 同步 UI,添加更详细的结果展示 - 完善国际化文案(中英文)
-
- 24 Dec, 2025 7 commits
-
-
ianshaw authored
- 添加账户同步 API 接口 (account_handler.go) - 实现 CRS 同步服务 (crs_sync_service.go) - 添加前端同步对话框组件 (SyncFromCrsModal.vue) - 更新账户管理界面支持同步操作 - 添加账户仓库批量创建方法 - 添加中英文国际化翻译 - 更新依赖注入配置
-
shaw authored
- 后台系统设置新增文档链接(doc_url)配置项 - 首页顶部导航栏显示文档链接图标(条件渲染) - Footer区域添加文档链接和GitHub链接 - 支持中英文国际化
-
Forest authored
-
shaw authored
问题:旧方案使用计数器模式,每次acquire都刷新TTL,导致僵尸数据永不过期 解决方案: - 每个槽位使用独立Redis Key: concurrency:account:{id}:{requestID} - 利用Redis原生TTL,每个槽位独立5分钟过期 - 服务崩溃后僵尸数据自动清理,无需手动干预 - 兼容多实例K8s部署 技术改动: - 新增SCAN脚本统计活跃槽位数量 - 移除冗余的releaseScript,直接使用DEL命令 - Wait队列TTL只在首次创建时设置,避免刷新 -
shaw authored
- OAuth/Setup Token 账号遇到 403 错误时,等待 2 秒后重试,最多 3 次 - Console 账号遇到未配置的错误码时,同样进行重试 - 重试耗尽后:OAuth 403 标记账号异常,Console 未配置错误码不标记账号 - 移除 handleErrorResponse 中已被重试逻辑覆盖的死代码
-
shaw authored
- 在账户列表 API 返回中添加 current_concurrency 字段 - 合并平台和类型列为 PlatformTypeBadge 组件,节省表格空间 - 新增并发状态列,显示 当前/最大 并发数,支持颜色编码
-
Forest authored
-
- 23 Dec, 2025 8 commits
-
-
shaw authored
部分第三方API(如GLM)的SSE响应格式与标准Claude API不同: - 标准Claude: input_tokens在message_start中 - GLM等API: 所有tokens都在message_delta中 现在从message_delta中也解析input_tokens和cache相关字段, 如果message_start中没有值则使用message_delta中的数据。
-
dexcoder6 authored
## 功能特性 ### 前端 - 在用户列表操作列添加充值和退款按钮 - 实现充值/退款对话框,支持输入金额和备注 - 从编辑用户表单中移除余额字段,防止直接修改 - 添加余额不足验证,实时显示操作后余额 - 优化备注提示词,提供多种场景示例 ### 后端 - 为 redeem_codes 表添加 notes 字段(迁移文件) - 在 UpdateUserBalance 接口添加 notes 参数支持 - 添加余额验证:金额必须大于0,操作后余额不能为负 - UpdateUser 接口移除 balance 字段处理,防止误操作 - 完整的审计日志和缓存管理 ## 安全保护 - 前端:余额不足时禁用提交按钮,实时提示 - 后端:双重验证(输入金额 > 0 + 结果余额 >= 0) - 权限:仅管理员可访问(AdminAuth 中间件) - 审计:所有操作记录到 redeem_codes 表 ## 修改文件 后端: - backend/migrations/004_add_redeem_code_notes.sql - backend/internal/model/redeem_code.go - backend/internal/service/admin_service.go - backend/internal/handler/admin/user_handler.go 前端: - frontend/src/views/admin/UsersView.vue - frontend/src/api/admin/users.ts - frontend/src/i18n/locales/zh.ts - frontend/src/i18n/locales/en.ts
🤖 Generated with [Claude Code](https://claude.com/claude-code ) Co-authored-by:Claude Sonnet 4.5 <noreply@anthropic.com>
-
shaw authored
从响应头提取x-codex-*使用量信息并保存到账号Extra字段, 前端账号列表展示5h/7d窗口的使用进度条。
-
shaw authored
当模型ID在model_pricing.json中找不到时,增加智能回退策略: - gpt-5.2-codex → 回退到 gpt-5.2 - gpt-5.2-20251222 → 去掉日期后缀回退到 gpt-5.2 - 最终回退到 DefaultTestModel (gpt-5.1-codex)
-
dexcoder6 authored
- 新增User模型字段:username(用户名)、wechat(微信号)、notes(备注) - 扩展用户搜索功能,支持通过用户名和微信号搜索 - 添加用户个人资料更新功能,用户可自行编辑用户名和微信号 - 管理员用户列表新增用户名、微信号、备注显示列 - 备注字段仅对管理员可见,增强数据安全性 - 完善中英文国际化翻译 - 修复国际化文件中重复属性的TypeScript错误
🤖 Generated with [Claude Code](https://claude.com/claude-code ) Co-Authored-By:Claude Sonnet 4.5 <noreply@anthropic.com>
-
shaw authored
问题:滑动窗口过期后(如昨天用满额度),前端仍显示历史数据(红色进度条100%、"即将重置") 解决: - 后端返回数据前检查窗口是否过期,过期则清零展示数据 - 前端处理 window_start 为 null 的情况,显示"窗口未激活" - 不影响实际的窗口激活逻辑,窗口仍从当天零点开始
-
shaw authored
- 移除OpenAIGatewayHandler中未使用的userService字段 - 将账号类型判断的if-else链改为switch语句
-
shaw authored
- fix(billing): 修复 OpenAI 兼容 API 缓存 token 重复计费问题 - fix(auth): 隐藏数据库错误详情,返回通用服务不可用错误 - feat(ui): 新增 PlatformIcon 组件,GroupBadge 支持平台颜色区分 - feat(ui): 账号管理新增重置状态按钮,重授权后自动清除错误 - feat(ui): 分组管理新增计费类型列,显示订阅限额信息 - ui: 首页 GPT 状态改为已支持
-
- 22 Dec, 2025 1 commit
-
-
shaw authored
-
- 21 Dec, 2025 1 commit
-
-
shaw authored
-
- 20 Dec, 2025 8 commits
-
-
Forest authored
-
Forest authored
-
Forest authored
-
NepetaLemon authored
## 变更内容 ### CI/CD - 添加 GitHub Actions 工作流(test + golangci-lint) - 添加 golangci-lint 配置,启用 errcheck/govet/staticcheck/unused/depguard - 通过 depguard 强制 service 层不能直接导入 repository ### 错误处理修复 - 修复 CSV 写入、SSE 流式输出、随机数生成等未处理的错误 - GenerateRedeemCode() 现在返回 error ### 资源泄露修复 - 统一使用 defer func() { _ = xxx.Close() }() 模式 ### 代码清理 - 移除未使用的常量 - 简化 nil map 检查 - 统一代码格式 -
shaw authored
-
shaw authored
-
Forest authored
-
shaw authored
- 窗口激活/重置时使用当天零点而非精确时间 - 使用服务器本地时区计算零点(支持 UTC+8 等时区) - 窗口重置时失效 Redis 缓存,避免数据不一致
-
- 19 Dec, 2025 5 commits
-
-
Forest authored
-
Forest authored
-
shaw authored
- 新增 GET /api/v1/admin/accounts/:id/models 接口获取账号可用模型 - 账号测试弹窗新增模型选择下拉框 - 测试时支持传入 model_id 参数,不传则默认使用 Sonnet - API Key 账号支持根据 model_mapping 映射测试模型 - 将模型常量提取到 claude 包统一管理
-
shaw authored
- 新增 internal/pkg/claude 包统一管理 Claude Code 相关常量 - 统一账号测试逻辑,所有账号类型使用相同的 Claude Code 风格请求 - 网关服务使用常量包替换硬编码的 beta header 字符串
-
shaw authored
实现 Claude API 的 token 计数功能,支持 OAuth、SetupToken 和 ApiKey 三种账号类型。 特点: - 校验订阅/余额(不扣费) - 不计算用户和账号并发 - 不记录使用量 - 支持模型映射(ApiKey 账号) - 支持 OAuth 账号的指纹管理和 401 重试
-
- 18 Dec, 2025 5 commits
-
-
Forest authored
-
shaw authored
- 前端添加更新和重启按钮,支持一键更新 Release 构建 - 修复条件判断优先级问题,确保错误/成功状态正确显示 - 后端使用原子文件替换模式,确保更新过程安全可靠 - 在可执行文件同目录创建临时文件,保证 rename 原子性 - 删除未使用的 copyFile 函数,保持代码整洁
-
江西小徐 authored
问题描述: 当多个请求并发执行且使用不同代理配置时,它们会同时修改共享的 s.httpClient.Transport,导致请求可能使用错误的代理(数据泄露风险) 或意外失败。 修复方案: 为需要代理的请求创建独立的http.Client,而不是修改共享的httpClient.Transport。 改动内容: - 新增 buildUpstreamRequestResult 结构体,返回请求和可选的独立client - 修改 buildUpstreamRequest 方法,配置代理时创建独立client - 更新 Forward 方法,根据是否有代理选择合适的client
-
shaw authored
-
shaw authored
-