LLLLLLiulei
|
2b528c5f81
|
feat: auto-pause expired accounts
|
2026-01-07 16:59:35 +08:00 |
|
shaw
|
d5ba7b80d3
|
fix(admin/usage): 恢复成本 Tooltip 明细并优化账号筛选
问题修复:
- 恢复 Cost Tooltip 的成本分项明细 (input_cost, output_cost, cache 成本)
- 修复 Token Tooltip 双分隔线显示问题
- 修复 Tooltip 翻译键缺失问题,新增 costDetails/tokenDetails
- 恢复 Excel 导出格式化 (aoa_to_sheet + 翻译列头)
功能优化:
- 账号筛选从前端搜索改为后端搜索,避免一次加载 1000 条数据
- 行为与用户/API Key 筛选保持一致 (debounce + 后端分页)
|
2026-01-07 09:35:21 +08:00 |
|
shaw
|
a3b81ef7bc
|
fix(test): 补充 stubUsageLogRepo 缺失的 GetStatsWithFilters 方法
|
2026-01-06 22:35:22 +08:00 |
|
shaw
|
015974a27e
|
feat(admin/usage): 优化管理员用量页面功能和体验
后端改进:
- 新增 GetStatsWithFilters 方法支持完整筛选条件
- Stats 端点支持 account_id, group_id, model, stream, billing_type 参数
- 统一使用 filters 结构体,移除冗余的分支逻辑
前端改进:
- 统计卡片添加"所选范围内"文字提示
- 优化总消费显示格式,清晰展示实际费用和标准计费
- Token 和费用列添加问号图标 tooltip 显示详细信息
- API Key 搜索框体验优化:点击即显示下拉选项
- 选择用户后自动加载该用户的所有 API Key
|
2026-01-06 22:19:07 +08:00 |
|
程序猿MT
|
4cf756ebe6
|
Merge branch 'Wei-Shaw:main' into main
|
2026-01-06 20:33:30 +08:00 |
|
yangjianbo
|
823497a2af
|
fix(并发): 修复 wrapReleaseOnDone goroutine 泄露问题
问题描述:
- wrapReleaseOnDone 函数创建的 goroutine 会持续等待 ctx.Done()
- 即使 release() 已被调用,goroutine 仍不会退出
- 高并发场景下(1000 req/s)会产生 3000+ 个泄露 goroutine
修复方案:
- 添加 quit channel 作为退出信号
- 正常释放时 close(quit) 通知 goroutine 立即退出
- 使用 select 监听 ctx.Done() 和 quit 两个信号
- 确保 goroutine 在正常流程中及时退出
测试覆盖:
- 新增 5 个单元测试验证修复效果
- 验证 goroutine 不泄露
- 验证并发安全性和多次调用保护
- 性能影响:471.9 ns/op, 208 B/op
影响范围:
- gateway_handler.go: 每请求调用 2-4 次
- openai_gateway_handler.go: 每请求调用 2-3 次
- 修复后 goroutine 泄露数量从 3/req 降至 0
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-01-06 20:31:40 +08:00 |
|
yangjianbo
|
66fe484f0d
|
chore: 删除依赖安全文档
|
2026-01-06 20:26:32 +08:00 |
|
shaw
|
216321aa9e
|
Merge PR #183: 修复账号管理页面过滤器和错误提示问题
|
2026-01-06 19:49:18 +08:00 |
|
yangjianbo
|
5a52cb608c
|
fix(前端): 修复账号管理页面平台过滤不生效的问题
添加 @update:filters 事件监听,使过滤器参数能正确同步到数据请求中。
修复了平台、类型、状态三个过滤器全部失效的问题。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-01-06 19:20:05 +08:00 |
|
yangjianbo
|
1181b332f7
|
fix(前端): 修复编辑账号错误提示无法显示具体原因的问题
后端 API 返回 message 字段,但前端读取 detail 字段,导致无法显示具体错误信息。
现在优先读取 message 字段,兼容 detail 字段。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-01-06 15:46:36 +08:00 |
|
yangjianbo
|
58b1777198
|
fix(ci): 修复 frontend-security job 中的 pnpm 安装顺序问题
**问题描述:**
GitHub Actions 在 frontend-security job 中报错:
"Error: Unable to locate executable file: pnpm"
**根本原因:**
setup-node@v4 在尝试使用 pnpm cache 时,pnpm 还未安装
**解决方案:**
1. 调整步骤顺序:先安装 pnpm,再设置 Node.js
2. 升级 pnpm/action-setup 从 v2 到 v4
3. 明确指定 pnpm version: 9
**修改内容:**
- 将 "Set up pnpm" 步骤移到 "Set up Node.js" 之前
- 更新 pnpm/action-setup@v2 → pnpm/action-setup@v4
- 添加 version: 9 配置
**正确的步骤顺序:**
1. Checkout 代码
2. Set up pnpm (指定版本)
3. Set up Node.js (可以使用 pnpm cache)
4. Install dependencies
相关 Issue: #174
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-01-06 13:42:47 +08:00 |
|
yangjianbo
|
0c7a58fcc7
|
fix(配置): 修改 URL 安全配置默认值为开发友好模式
调整以下配置的默认值以匹配 .env.example:
- allow_insecure_http: false → true (允许 HTTP URL)
- allow_private_hosts: false → true (允许本地/私有 IP)
**改动说明:**
- 默认允许 HTTP URL,方便开发测试环境使用
- 默认允许本地和私有 IP 地址
- 与 deploy/.env.example 中的推荐配置保持一致
- 更新相应的单元测试以验证新的默认值
**安全提示:**
⚠️ 这些默认值适合开发/测试环境
⚠️ 生产环境建议显式配置更严格的安全策略
⚠️ HTTP 存在明文传输风险,仅在可信网络中使用
**测试结果:**
- ✅ 所有单元测试通过
- ✅ golangci-lint 无问题
相关文件:
- backend/internal/config/config.go:451-452
- backend/internal/config/config_test.go:83-88
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-01-06 12:56:29 +08:00 |
|
yangjianbo
|
17ae51c0a0
|
merge: 合并远程分支并修复代码冲突
合并了远程分支 cb72262 的功能更新,同时保留了 ESLint 修复:
**冲突解决详情:**
1. AccountTableFilters.vue
- ✅ 保留 emit 模式修复(避免 vue/no-mutating-props 错误)
- ✅ 添加第三个筛选器 type(账户类型)
- ✅ 新增 antigravity 平台和 inactive 状态选项
2. UserBalanceModal.vue
- ✅ 保留 console.error 错误日志
- ✅ 添加输入验证(金额校验、余额不足检查)
- ✅ 使用 appStore.showError 向用户显示友好错误
3. AccountsView.vue
- ✅ 保留所有 console.error 错误日志(避免 no-empty 错误)
- ✅ 使用新 API:clearRateLimit 和 setSchedulable
4. UsageView.vue
- ✅ 添加 console.error 错误日志
- ✅ 添加图表功能(模型分布、使用趋势)
- ✅ 添加粒度选择(按天/按小时)
- ✅ 保留 XLSX 动态导入优化
**测试结果:**
- ✅ Go tests: PASS
- ✅ golangci-lint: 0 issues
- ✅ ESLint: 0 errors
- ✅ TypeScript: PASS
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-01-06 12:50:51 +08:00 |
|
yangjianbo
|
4790aced15
|
fix(前端): 修复 ESLint 代码规范问题
- 修复 AccountTableFilters.vue 中的 vue/no-mutating-props 错误,使用 emit 模式替代直接修改 props
- 修复 TypeScript 类型错误,支持 Select 组件的 null 值类型
- 为所有空 catch 块添加错误日志,提升代码可维护性和调试能力
- 涉及文件:AccountTableFilters.vue, UserAllowedGroupsModal.vue, UserApiKeysModal.vue, UserBalanceModal.vue, AccountsView.vue, UsageView.vue, DashboardView.vue, ProfileView.vue
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-01-06 12:42:06 +08:00 |
|
yangjianbo
|
3f0017d1f1
|
fix(安全): 修复依赖漏洞并强化安全扫描
主要改动:
- 固定 Go 1.25.5 与 CI 校验并更新扫描流程
- 升级 quic-go、x/crypto、req 等依赖并通过 govulncheck
- 强化 JWT 校验、TLS 配置与 xlsx 动态加载
- 新增审计豁免清单与校验脚本
|
2026-01-06 11:36:38 +08:00 |
|
shaw
|
cb72262ad8
|
Merge PR #166: feat: 图片生成计费功能
|
2026-01-06 11:29:35 +08:00 |
|
song
|
195e227c04
|
merge: 合并 upstream/main 并保留本地图片计费功能
|
2026-01-06 10:49:26 +08:00 |
|
Yuhao Jiang
|
f5603b0780
|
fix: 修复跨时区用户日期范围查询不准确的问题
问题:当用户时区与服务器时区不同时,日期范围查询使用服务器时区解析,
导致用户看到的数据与预期不符。
修复方案:
- 前端:所有 GET 请求自动携带用户时区参数
- 后端:新增时区辅助函数,所有日期解析和默认日期范围计算都使用用户时区
- 当用户时区为空或无效时,自动回退到服务器时区
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-01-05 20:43:03 -06:00 |
|
shaw
|
752882a022
|
fix: Token 统计支持 M 单位并修复 lint 错误
- 用户仪表盘 Token 统计卡片支持 K/M 单位自动切换
- 更新 formatTokensK 工具函数支持百万级显示
- 修复 setup.go 中未检查返回值的 errcheck 错误
|
2026-01-06 10:13:12 +08:00 |
|
shaw
|
9731b961d0
|
fix: redeem 页面类型的字段翻译
|
2026-01-06 09:46:46 +08:00 |
|
shaw
|
2920409404
|
docs: 更新 Docker 部署文档强调 JWT_SECRET 配置重要性
- docker-compose.yml: 添加注释说明设置固定 JWT_SECRET 可防止容器重启后登录失效
- .env.example: 添加 openssl rand -hex 32 生成安全密钥的命令
|
2026-01-06 09:44:54 +08:00 |
|
shaw
|
7dbbfc22b6
|
fix: 移除 release 模式 JWT Secret 必填限制并支持 Docker 数据目录
- 移除 Install() 和 AutoSetupFromEnv() 中 release 模式下 JWT Secret 必填检查
- 移除 config.Validate() 中 release 模式下的 JWT 验证
- 新增 GetDataDir() 函数,自动检测数据目录:DATA_DIR 环境变量 > /app/data > 当前目录
- config.yaml 和 .installed 文件现在写入正确的数据目录
- config.Load() 添加 /app/data 到配置搜索路径
这修复了两个问题:
1. Web Setup Wizard 在 release 模式下无法完成安装
2. Docker 部署时 config.yaml 未被持久化导致每次重启重新初始化
|
2026-01-06 09:43:56 +08:00 |
|
shaw
|
aaaa68ea7f
|
fix: 修复 CSP 策略阻止 Cloudflare Turnstile 加载的问题
在 script-src 和 frame-src 中添加 challenges.cloudflare.com 域名,
允许 Turnstile 脚本加载和 iframe 渲染。
|
2026-01-06 09:15:03 +08:00 |
|
shaw
|
af753de481
|
fix: 修复账号修改代理更新无效的bug
|
2026-01-06 09:04:01 +08:00 |
|
shaw
|
3956819c78
|
fix: 数据迁移时长增加到10分钟
|
2026-01-05 22:24:24 +08:00 |
|
shaw
|
168aa57810
|
fix(ci): 修复前端构建使用 pnpm 而非 npm
|
2026-01-05 21:29:27 +08:00 |
|
shaw
|
706af2920f
|
Merge branch 'fix/account-filters-menu-missing-features'
## Summary
- 修复账号管理页面组件拆分时遗漏的功能
- 统一所有内联 SVG 为 Icon 组件
- 修复 ProxySelector 选择"无代理"时发送错误值的问题
## Changes
- AccountTableFilters: 添加 Antigravity 平台选项、类型筛选器、inactive 状态
- AccountActionMenu: 恢复重置状态和清除限速按钮
- AccountsView: 修正 handleClearRateLimit 调用正确的 API
- ProxySelector: 修复选择"无代理"时发送 null 而不是 0
## Conflict Resolution
- ProxySelector.vue: 采用 PR 分支的正确逻辑(发送 null 而不是 0)
这是正确的修复,因为后端使用 *int64 类型,nil 会触发 ClearProxyID()
|
2026-01-05 21:16:05 +08:00 |
|
shaw
|
4d078a8854
|
fix(admin): 修复零值字段无法保存的问题
- 用户允许分组:前端发送空数组而非 null 表示"允许全部"
- 账户代理:前端发送 0 而非 null 表示"无代理"
- 后端 UpdateAccount/BulkUpdate 正确处理 ProxyID=0 为清除代理
|
2026-01-05 20:53:38 +08:00 |
|
IanShaw027
|
b6a4182904
|
fix(frontend): 修复账号调度按钮使用错误的API端点
将 handleToggleSchedulable 从 PUT update() 改为 POST setSchedulable(),
后端 PUT 接口不处理 schedulable 字段,导致切换无效。
|
2026-01-05 20:48:12 +08:00 |
|
IanShaw027
|
4251a5a451
|
refactor(frontend): 完成所有组件的内联SVG统一替换为Icon组件
- 扩展 Icon.vue 组件,新增 60+ 图标路径
- 导航类: arrowRight, arrowLeft, arrowUp, arrowDown, chevronUp, externalLink
- 状态类: checkCircle, xCircle, exclamationCircle, exclamationTriangle, infoCircle
- 用户类: user, userCircle, userPlus, users
- 文档类: document, clipboard, copy, inbox
- 操作类: download, upload, filter, sort
- 安全类: key, lock, shield
- UI类: menu, calendar, home, terminal, gift, creditCard, mail
- 数据类: chartBar, trendingUp, database, cube
- 其他: bolt, sparkles, cloud, server, sun, moon, book 等
- 重构 56 个 Vue 组件,用 Icon 组件替换内联 SVG
- 净减少约 2200 行代码
- 提升代码可维护性和一致性
- 统一图标样式和尺寸管理
|
2026-01-05 20:22:48 +08:00 |
|
IanShaw027
|
34aa77e4e1
|
fix(backend): 删除未使用的 sleepAntigravityBackoff 函数
修复 golangci-lint unused 检查失败
|
2026-01-05 20:15:36 +08:00 |
|
longgexx
|
c27d511736
|
test(billing): 更新测试用例以验证透支策略
|
2026-01-05 19:03:54 +08:00 |
|
longgexx
|
d6f8ac0226
|
fix(billing): 修复计费漏洞
- 允许余额透支策略
## 问题
- 扣费失败时只记录日志,不阻止请求完成
- 用户可以用极少余额无限次免费使用服务
- 数据库层使用 BalanceGTE 条件防止余额变负,导致余额不足时扣费失败
## 修复
- 移除 DeductBalance 方法中的 BalanceGTE 条件,允许余额变为负数
- 修改错误返回:用户不存在时返回 ErrUserNotFound
- 实现透支策略:余额不足时允许本次请求完成,余额变负后阻止后续请求
## 测试
- 更新 TestDeductBalance_InsufficientFunds 测试,验证透支功能
- 更新 TestDeductBalance_NotFound 测试,验证正确的错误类型
- 新增 TestDeductBalance_AllowsOverdraft 测试,专门测试透支场景
- 所有测试通过 ✅
|
2026-01-05 18:48:49 +08:00 |
|
ianshaw
|
ef11abcbfd
|
fix(frontend): 将 AccountTestModal 内联 SVG 替换为统一 Icon 组件
|
2026-01-05 02:33:51 -08:00 |
|
song
|
6fa704d6fc
|
fix: Antigravity 账户刷新 token 500 错误
AccountHandler.Refresh 方法缺少对 Antigravity 平台的处理分支,
导致刷新时错误地走进 Claude 刷新逻辑。
|
2026-01-05 18:29:37 +08:00 |
|
song
|
0400fcdca4
|
fix: 更新 API 合同测试,添加 image_count 和 image_size 字段
|
2026-01-05 17:31:23 +08:00 |
|
yangjianbo
|
d936eb6518
|
Merge branch 'main' of https://github.com/mt21625457/aicodex2api
|
2026-01-05 17:26:18 +08:00 |
|
yangjianbo
|
3b7d0c42f1
|
fix(格式): 修复 config.go 代码格式问题
修复 golangci-lint gofmt 检查失败,移除 AllowInsecureHTTP 字段后多余的空格。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-01-05 17:24:37 +08:00 |
|
song
|
5b1907fe61
|
fix: 图片计费代码审查问题修复
- isImageGenerationModel 改为精确匹配/前缀匹配,避免误匹配
- 新增 normalizePrice 函数,支持负数清除价格配置
- 更新注释说明 Gemini API 每次请求只生成一张图片
- 添加测试用例验证不会误匹配自定义模型名
|
2026-01-05 17:14:06 +08:00 |
|
程序猿MT
|
e800af54f9
|
Merge branch 'Wei-Shaw:main' into main
|
2026-01-05 17:12:09 +08:00 |
|
song
|
d4c2b723a5
|
feat: 图片生成计费功能
- 新增 Group 图片价格配置(image_price_1k/2k/4k)
- BillingService 新增 CalculateImageCost 方法
- AntigravityGatewayService 支持识别图片生成模型并按次计费
- UsageLog 新增 image_count 和 image_size 字段
- 前端分组管理支持配置图片价格(antigravity 和 gemini 平台)
- 图片计费复用通用计费能力(余额检查、扣费、倍率、订阅限额)
|
2026-01-05 17:07:29 +08:00 |
|
yangjianbo
|
6451b3cd83
|
Merge branch 'test'
|
2026-01-05 17:05:30 +08:00 |
|
yangjianbo
|
c4628d4604
|
fix(安全): 允许在禁用白名单时使用不安全的 HTTP URL
|
2026-01-05 16:09:42 +08:00 |
|
yangjianbo
|
ee6d01fd1c
|
fix(配置): 更新配置文件,添加中文注释并优化部分字段说明
|
2026-01-05 16:06:03 +08:00 |
|
yangjianbo
|
5668736389
|
fix(依赖): 更新 Redis 镜像版本至 8-alpine
|
2026-01-05 15:54:47 +08:00 |
|
yangjianbo
|
1aef4ce20d
|
fix(部署): 配置文件挂载改为可选,避免 Docker 自动创建目录
当挂载的源文件不存在时,Docker 会自动创建同名目录而非文件。
将配置文件挂载默认注释,用户需要时先创建文件再取消注释。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-01-05 15:50:29 +08:00 |
|
shaw
|
7c419dfc50
|
Merge PR #163: feat(前端): 用户管理页面添加 ID 列
|
2026-01-05 15:47:47 +08:00 |
|
yangjianbo
|
ce7893ee44
|
feat(部署): 支持通过环境变量配置挂载的配置文件路径
- docker-compose.yml 配置文件挂载路径改为 ${CONFIG_FILE:-./config.yaml}
- .env.example 添加 CONFIG_FILE 配置项,方便用户指定自定义配置文件
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-01-05 15:40:30 +08:00 |
|
yangjianbo
|
4c1293a74c
|
fix(安全): CSP 策略添加 Google Fonts 支持
在 style-src 中添加 fonts.googleapis.com,在 font-src 中添加
fonts.gstatic.com,解决浏览器控制台因 CSP 策略阻止加载
Google Fonts 样式表的错误。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-01-05 15:32:36 +08:00 |
|
yangjianbo
|
d43599243c
|
Implement feature X to enhance user experience and fix bug Y in module Z
|
2026-01-05 15:25:25 +08:00 |
|