Commit Graph
100 Commits
Author SHA1 Message Date
Wesley LiddickandGitHub 47eb3c8888 Merge pull request #284 from longgexx/main
fix(admin): 修复使用记录页面趋势图筛选联动和日期选择问题
2026-01-15 13:43:00 +08:00
Wesley LiddickandGitHub cc2d064ab4 Merge pull request #289 from IanShaw027/fix/mobile-ui
fix(mobile): 优化移动端表格、操作栏和弹窗显示
2026-01-15 11:31:16 +08:00
Wesley LiddickandGitHub 27214f8657 Merge pull request #285 from IanShaw027/fix/ops-bug
feat(ops): 增强错误日志管理、告警静默和前端 UI 优化
2026-01-15 11:26:16 +08:00
Wesley LiddickandGitHub 28de614dfb Merge pull request #282 from LLLLLLiulei/feat/ip-management-enhancements
feat: enhance proxy management
2026-01-15 11:23:17 +08:00
shaw 2a5ef6d3f5 Merge PR #279: feat(计费): 账号计费倍率快照与账号口径费用统计 2026-01-15 11:11:55 +08:00
Wesley LiddickandGitHub b3b2868f55 Merge pull request #278 from IanShaw027/fix/openai-account-schedulability-check
fix(网关): 修复账号选择中的调度器快照延迟问题
2026-01-14 15:52:35 +08:00
shaw 99cbfa1567 fix(admin): 修复退款金额精度问题
- 显示完整余额精度,避免四舍五入导致的退款失败
- 添加"全部"按钮,一键填入完整余额
- 移除最小金额限制,支持任意正数金额
2026-01-14 10:22:31 +08:00
Wesley LiddickandGitHub 3f8c8d70ad Merge pull request #274 from mt21625457/main
fix(openai): OAuth 请求强制 store=false
2026-01-14 09:53:09 +08:00
Wesley LiddickandGitHub 55fced3942 Merge pull request #269 from mt21625457/main
fix: 修复opencode 适配openai 套餐的错误,通过sub2api完美转发 opencode
2026-01-13 17:33:07 +08:00
Wesley LiddickandGitHub 55796a118d Merge pull request #264 from IanShaw027/fix/openai-opencode-compatibility
fix(openai): 增强 OpenCode 兼容性和模型规范化
2026-01-13 16:01:37 +08:00
shaw 93db889a10 fix: Gemini OpenCode 教程 baseURL 改为 v1beta 2026-01-13 09:52:37 +08:00
Wesley LiddickandGitHub 0df7385c4e Merge pull request #226 from xilu0/main
feat(gateway): 优化 Antigravity/Gemini 思考块处理 此提交解决了思考块 (thinking blocks) 在转发过程中的兼容性问题
2026-01-13 09:39:43 +08:00
Wesley LiddickandGitHub 1a3fa6411c Merge pull request #260 from IanShaw027/fix/sync-openai-gpt5-models
fix: 同步 OpenAI GPT-5 模型列表并完善参数处理
2026-01-13 09:31:00 +08:00
Wesley LiddickandGitHub 64614756d1 Merge pull request #259 from cyhhao/main
fix: adjust OpenCode OpenAI example store placement
2026-01-13 09:30:26 +08:00
Wesley LiddickandGitHub bb1fd54d4d Merge pull request #257 from Edric-Li/feat/ops-fullscreen-scrollbar
feat(ops): 添加运维监控全屏模式 & 优化滚动条
2026-01-13 09:29:25 +08:00
shaw 3b71bc3df1 feat: OpenCode 配置提示添加配置文件路径说明 2026-01-12 20:49:54 +08:00
shaw 22ef9534e0 fix: 修复反向代理下客户端 IP 获取错误 2026-01-12 20:44:38 +08:00
Wesley LiddickandGitHub c206d12d5c Merge pull request #254 from IanShaw027/feat/ops-count-tokens-filter-and-auto-refresh
feat(ops): count_tokens 错误过滤和自动刷新功能
2026-01-12 17:31:54 +08:00
shaw 4da681f58a Merge branch 'mt21625457/main' 2026-01-12 16:20:55 +08:00
shaw 68ba866c38 fix(frontend): 修复账号管理页面分组显示和 Cookie 授权问题
- 新增 AccountGroupsCell 组件优化分组列显示(最多4个+折叠)
- 修复 Cookie 自动授权时 group_ids/notes/expires_at 字段丢失
- 修复 SettingsView 流超时配置前后端字段不一致问题
2026-01-12 16:08:44 +08:00
shaw 8363663ea8 fix(gateway): 修复 usage_logs 记录 IP 不正确的问题
在 nginx 反向代理场景下,使用 ip.GetClientIP() 替代 c.ClientIP()
以正确获取客户端真实 IP 地址
2026-01-12 15:37:45 +08:00
Wesley LiddickandGitHub b588ea194c Merge pull request #251 from IanShaw027/fix/ops-bugs
feat(ops): 运维看板功能增强 - 实时流量监控与指标阈值配置
2026-01-12 15:26:26 +08:00
Wesley LiddickandGitHub 465ba76788 Merge pull request #250 from IanShaw027/fix/custom-error-codes-disable-scheduling
fix(gateway): 自定义错误码触发停止调度
2026-01-12 15:26:14 +08:00
shaw cf313d5761 fix(gateway): 修复 Claude Code 客户端检测和请求信息记录
- 在 Messages 方法中调用 SetClaudeCodeClientContext 启用客户端检测
- 修复 RecordUsageInput 未传递 UserAgent 和 IPAddress 的问题
2026-01-12 15:19:40 +08:00
Wesley LiddickandGitHub 9c144587fe Merge pull request #249 from IanShaw027/feat/stream-timeout-handling
feat(gateway): 添加流超时处理机制
2026-01-12 14:14:21 +08:00
Wesley LiddickandGitHub 4c37ca71ee Merge pull request #247 from 7836246/fix/negative-zero-balance
fix: 修复扣款时浮点数精度导致的余额不足误判和 -0.00 显示问题
2026-01-12 14:10:41 +08:00
shaw cc4910dd30 fix(test): 修复聚合测试的时区边界条件问题 2026-01-12 09:23:46 +08:00
shaw 50de5d05b0 fix: 修复PR合并后的功能回退和安全问题 2026-01-12 09:14:32 +08:00
shaw 7844dc4f2d Merge PR #238: feat(ops): 实现完整的运维监控系统(vNext) 2026-01-12 08:52:17 +08:00
Wesley LiddickandGitHub 2b2f7a6dec Merge pull request #237 from cyhhao/main
feat: 补充 OpenCode 使用密钥配置示例
2026-01-11 20:53:58 +08:00
Wesley LiddickandGitHub 49c15c0d44 Merge pull request #236 from mt21625457/main
feat: 新增预聚合体系,解决 Admin Dashboard 的累计统计是 usage_logs 是全表扫描 的性能问题
2026-01-11 20:51:52 +08:00
Wesley LiddickandGitHub 9cba595fd0 Merge pull request #233 from cyhhao/main
fix(openai): 对齐 OpenCode OAuth instructions,保持 Codex CLI 透明转发
2026-01-11 10:41:57 +08:00
shaw 56fc2764e4 chore: remove accidentally committed test binary 2026-01-11 10:37:09 +08:00
Wesley LiddickandGitHub 0c4f1762c9 Merge pull request #232 from Edric-Li/feat/api-key-ip-restriction
feat(settings): 首页自定义内容 & 配置注入优化
2026-01-11 10:36:01 +08:00
shaw ff0875868e Merge PR #229: perf(网关): 粘性会话命中复用候选账号 2026-01-10 15:21:59 +08:00
shaw d1a6d6b1cf Merge branch 'mt21625457/main' 2026-01-10 14:44:58 +08:00
shaw 15884f368d Merge branch 'longgexx/main' 2026-01-10 14:16:13 +08:00
shaw b03fb9c2f6 fix: remove accidentally committed test binary and restore .gitignore
- Remove backend/repository.test (62MB macOS arm64 test binary)
- Restore *.test pattern in .gitignore to prevent future accidents
2026-01-10 14:16:06 +08:00
shaw 3d4984133e chore: 删除误提交的 Go 测试二进制并更新 .gitignore 2026-01-10 14:03:41 +08:00
shaw 62dc0b953b Merge branch 'fix/table-pagination-and-features' 2026-01-09 20:42:05 +08:00
shaw f060db0b30 fix: 加固 LinuxDo OAuth 登录安全与配置校验 2026-01-09 19:32:06 +08:00
shawandadmin 1a1e23fc76 fix(auth): 注册接口安全加固 - 默认关闭注册 2026-01-09 18:26:32 +08:00
shaw 27291f2e5f fix(docker): 修改 Redis 配置以支持可选的密码设置 2026-01-09 17:28:55 +08:00
shaw 43f104bdf7 fix(auth): 注册接口安全加固 - 默认关闭注册 2026-01-09 14:49:20 +08:00
shaw 0a9c17b9d1 Merge PR #213: feat(openai): 支持 OpenAI Responses API 标准内容格式 2026-01-09 10:40:47 +08:00
shaw 2d83941aaa feat(antigravity): 添加 URL fallback 机制 (sandbox → daily → prod) 2026-01-09 10:36:56 +08:00
shaw b015a3bd8a fix(antigravity): 修复频繁出现429错误的问题 2026-01-08 20:06:32 +08:00
shaw 3fb43b91bf fix(security): 强化 usage 端点信息暴露控制 2026-01-08 17:45:31 +08:00
shaw 6e8188ed64 fix(antigravity): 修复请求频繁429的问题 2026-01-08 17:27:35 +08:00
shaw db6f53e2c9 fix(billing): 修复客户端取消请求时计费丢失问题
检测 context.Canceled 作为客户端断开信号,返回已收集的 usage 而非错误
2026-01-08 11:25:17 +08:00
shaw acabdc2f99 fix(i18n): correct priority description - lower value means higher priority 2026-01-08 09:56:26 +08:00
shaw 169aa4716e Merge branch 'feature/account-expires-at' into main: feat: add account expires-at field and auto-pause expired accounts 2026-01-08 09:27:57 +08:00
shaw c0753320a0 Merge branch 'feat/usage-log-user-agent' 2026-01-08 09:16:48 +08:00
shaw d99a3ef14b fix(gateway): 修复账号跨分组调度问题
问题:账号可能被调度到未分配的分组(如 simon 账号被调度到 claude_default)

根因:
- 强制平台模式下分组查询失败时回退到全平台查询
- listSchedulableAccounts 中分组为空时回退到无分组查询
- 粘性会话只检查平台匹配,未校验账号分组归属

修复:
- 移除强制平台模式的回退逻辑,分组内无账号时返回错误
- 移除 listSchedulableAccounts 的回退逻辑
- 新增 isAccountInGroup 方法用于分组校验
- 在三处粘性会话检查中增加分组归属验证
2026-01-07 10:56:52 +08:00
shaw fc8fa83fcc fix(keys): 修复代码框第一行多余空格问题
pre 标签会原样保留内部空白字符,导致 code 标签前的模板缩进
被渲染为实际空格。将 pre/code 标签写在同一行消除此问题。
2026-01-07 10:26:24 +08:00
shaw 6dcd99468b fix(gateway): 修复 cache_control 块超限问题并优化 Claude Code 检测
问题:
- OAuth/SetupToken 账号注入 system prompt 后可能导致 cache_control
  块超过 Anthropic API 的 4 个限制
- Claude Code 检测使用精确匹配,无法识别 Agent SDK 等变体

修复:
- 新增 enforceCacheControlLimit 函数,强制执行 4 个块限制
- 优先从 messages 移除,再从 system 尾部移除(保护注入的 prompt)
- 改用前缀匹配检测 Claude Code 系统提示词,支持多种变体:
  - 标准版、Agent SDK 版、Explore Agent 版、Compact 版
2026-01-07 10:17:09 +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
shaw 216321aa9e Merge PR #183: 修复账号管理页面过滤器和错误提示问题 2026-01-06 19:49:18 +08:00
shaw cb72262ad8 Merge PR #166: feat: 图片生成计费功能 2026-01-06 11:29:35 +08: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
shaw 7c419dfc50 Merge PR #163: feat(前端): 用户管理页面添加 ID 列 2026-01-05 15:47:47 +08:00
shaw d20697beb3 Merge branch 'feat/account-notes' 2026-01-05 14:42:31 +08:00
shaw 91f9d4c7a9 Merge branch 'mike/deployment' 2026-01-05 14:37:31 +08:00
shaw a60dbb5533 Merge branch 'fix/turnstile-secret-key-preserve' 2026-01-05 14:31:50 +08:00
shaw 7cc7e15174 Merge branch 'IanShaw027/main' 2026-01-05 11:20:28 +08:00
shaw 090c9e665b fix(frontend): 启用 vue-i18n JIT 编译修复消息插值不工作问题
问题:使用 vue-i18n 运行时版本后,带变量的翻译(如 '{days} 天')
无法正确显示,直接显示原始字符串。

原因:运行时版本不含消息编译器,无法在运行时编译消息插值。

解决:启用 JIT 编译(__INTLIFY_JIT_COMPILATION__: true)
- JIT 编译器将消息编译为 AST 对象而非 JavaScript 代码
- 通过解释执行 AST 实现插值,无需 eval 或 new Function
- 符合 CSP script-src 'self' 策略,不降低安全性

同时将 vite.config.js.timestamp-* 临时文件添加到 .gitignore
2026-01-05 09:32:26 +08:00
shaw fd29fe11b4 Merge PR #149: Fix/multi platform - 安全稳定性修复和前端架构优化 2026-01-05 08:44:44 +08:00
shaw 07d80f76d0 chore: 忽略 TypeScript composite 模式生成的 vite.config.js 2026-01-05 08:39:49 +08:00
shaw ad2ff90851 fix(前端): 修复 CSP 策略阻止 vue-i18n 运行时编译
使用 vue-i18n 纯运行时版本替代默认版本,避免运行时消息编译
需要 `new Function` 而被 CSP `script-src 'self'` 策略阻止。
2026-01-04 23:51:48 +08:00
shaw 46dda58355 Merge PR #146: feat: 提升流式网关稳定性与安全策略强化 2026-01-04 22:45:01 +08:00
shaw e78c864650 Merge PR #142: feat: 多平台网关优化与用户系统增强
主要功能:
- Gemini OAuth 配额系统优化:Google One tier 自动推断
- Antigravity 网关增强:Thinking Block 重试、Claude 模型 signature 透传
- 账号调度改进:临时不可调度功能、负载感知调度优化
- 前端用户体验:账号管理界面优化、使用教程改进

冲突解决:保留 handleUpstreamError 的 prefix 参数和日志记录能力,
同时合并 PR 的 thinking block 重试和 model fallback 功能。
2026-01-04 20:30:19 +08:00
shaw 4df712624e Merge branch 'slovx2/main' 2026-01-04 19:51:17 +08:00
shaw a527559526 fix(test): 修复claude、openai oauth账号test刷新token的bug 2026-01-04 17:29:34 +08:00
shaw 678b088a13 Merge PR #137: fix(frontend): 修复跨时区日期范围筛选问题 2026-01-04 14:29:28 +08:00
shaw fac19d258d fix(oauth): 修复claude cookie添加账号时会话混淆的问题 2026-01-04 14:20:17 +08:00
shaw 70e9329e64 feat(proxy): 统一代理配置并支持 SOCKS5H 协议
- 新增 proxyutil 包,统一 HTTP/HTTPS/SOCKS5/SOCKS5H 代理配置逻辑
- SOCKS5H 支持服务端 DNS 解析,避免本地 DNS 泄露
- 移除 ProxyStrict 宽松模式,代理失败直接返回错误不回退直连
- 前端代理管理页面支持 SOCKS5H 协议的添加/编辑/批量导入
- 补充 IPv6 地址和特殊字符密码的边界测试
2026-01-04 11:43:58 +08:00
shaw a11c71cea9 fix: 修复创建账号schedulable值默认为false的bug 2026-01-04 10:45:18 +08:00
shaw d9b1587982 feat(gateway): 实现 Claude Code 系统提示词智能注入 2026-01-04 10:38:13 +08:00
shaw 631ba25e04 Merge branch 'feature/atomic-scheduling-v2' 2026-01-03 13:35:19 +08:00
shaw 9d3ec9e627 feat(keys): 适配 Antigravity 和 Gemini 平台的使用教程与 CCS 导入
- UseKeyModal: 添加 Antigravity 两级 Tab (Claude Code / Gemini CLI)
- UseKeyModal: 添加 Gemini 平台的 Gemini CLI 教程
- UseKeyModal: Antigravity 平台统一使用 /antigravity 后缀
- KeysView: CCS 导入支持 Antigravity (询问客户端) / Gemini / OpenAI
- i18n: 添加相关中英文翻译
2026-01-02 15:53:05 +08:00
shaw b1528e9dec Merge PR #126: feat(antigravity): 添加 models 端点支持 2026-01-02 14:28:21 +08:00
shaw 106e59b753 Merge PR #122: feat: 用户自定义属性系统 + Wechat 字段迁移 2026-01-01 20:25:50 +08:00
shaw 2c71c8b968 Merge PR #119: 支持自定义模型和优化模型选择 2026-01-01 17:02:54 +08:00
shaw 901b03b870 Merge PR #118: feat(gemini): 添加 Google One 存储空间推断 Tier 功能 2026-01-01 16:54:30 +08:00
shaw 4f13c8de0d Merge PR #110: refactor(antigravity): 简化模型映射逻辑,支持前缀匹配
- 删除 GeminiQuotaService 及相关代码
- 删除负载感知调度(SelectAccountWithLoadAwareness)
- 简化并发控制,删除账号级等待队列
- 模型映射改用前缀匹配,覆盖版本变化

Closes #110
2026-01-01 11:21:09 +08:00
shaw 2a395d12a6 Merge branch 'feature/atomic-scheduling' 2026-01-01 11:05:22 +08:00
shaw 9d698d9306 Merge branch 'feature/gemini-quota' (PR #113)
feat: Gemini 配额模拟和限流功能

主要变更:
- 新增 GeminiQuotaService 实现基于 Tier 的配额管理
- RateLimitService 增加 PreCheckUsage 预检查功能
- gemini_oauth_service 改进 tier_id 处理逻辑(向后兼容)
- 前端新增配额可视化组件 (AccountQuotaInfo.vue)
- 数据库迁移: 为现有 Code Assist 账号添加默认 tier_id

技术细节:
- 支持 LEGACY/PRO/ULTRA 三种配额等级
- 配额策略可通过配置文件或数据库设置覆盖
- fetchProjectID 返回值保留 tierID(即使 projectID 获取失败)
- 删除冗余类型别名 ClaudeCustomToolSpec
2026-01-01 10:58:11 +08:00
Wesley LiddickandGitHub c5c12d4c8b Revert "feat(gateway): 实现负载感知的账号调度优化 (#114)" (#117)
This reverts commit 8d252303fc.
2026-01-01 10:45:42 +08:00
shaw 312cc00d21 Merge branch 'IanShaw027/main' 2025-12-31 23:50:26 +08:00