1. 31 Dec, 2025 7 commits
    • shaw's avatar
      style: fix gofmt formatting in claude_types.go · 8e55ee0e
      shaw authored
      8e55ee0e
    • NepetaLemon's avatar
      refactor: 移除 infrastructure 目录 (#108) · 2270a54f
      NepetaLemon authored
      * refactor: 迁移初始化 db 和 redis 到 repository
      
      * refactor: 迁移 errors 到 pkg
      2270a54f
    • IanShaw027's avatar
      fix(upstream): 完善边界检查和 thinking block 处理 · c1e25b7e
      IanShaw027 authored
      基于 Gemini + Codex 审查结果的修复:
      
      1. thinking block dummy signature 填充
         - Gemini 模型现在会填充 dummyThoughtSignature
         - 与 tool_use 处理逻辑保持一致
      
      2. 边界检查增强
         - buildTools: 跳过空工具名称
         - buildTools: 为 nil schema 提供默认值
         - convertClaudeToolsToGeminiTools: 为 nil params 提供默认值
      
      3. 防止下游 API 验证错误
         - 确保所有工具都有有效的 parameters
         - 默认 schema: {type: 'object', properties: {}}
      
      审查报告:Gemini 评分 95%, Codex 评分 8.2/10
      c1e25b7e
    • IanShaw027's avatar
      fix(upstream): 跳过 Claude 模型无 signature 的 thinking block · 35b768b7
      IanShaw027 authored
      - buildParts 函数检测 thinking block 的 signature
      - Claude 模型 (allowDummyThought=false) 时跳过无 signature 的 block
      - 记录警告日志以便调试
      - Gemini 模型继续使用 dummy signature 兼容方案
      
      修复 Issue 0.1: Claude thinking block signature 缺失错误
      35b768b7
    • IanShaw027's avatar
      fix(upstream): 支持 Claude custom 类型工具 (MCP) 格式 · 15e676e9
      IanShaw027 authored
      - ClaudeTool 结构体增加 Type 和 Custom 字段
      - buildTools 函数支持从 custom 字段读取 input_schema
      - convertClaudeToolsToGeminiTools 函数支持 MCP 工具格式
      - 修复 Antigravity upstream error 400: JSON schema invalid
      
      修复 Issue 0.2: tools.X.custom.input_schema 验证错误
      15e676e9
    • yangjianbo's avatar
      fix(lint): 修复 golangci-lint 报告的代码问题 · 682f546c
      yangjianbo authored
      - errcheck: 修复类型断言未检查返回值的问题
        - pool.go: 添加 sync.Map 类型断言安全检查
        - req_client_pool.go: 添加 sync.Map 类型断言安全检查
        - concurrency_cache_benchmark_test.go: 显式忽略断言返回值
        - gateway_service.go: 显式忽略 WriteString 返回值
      
      - gofmt: 修复代码格式问题
        - redis.go: 注释对齐
        - api_key_repo.go: 结构体字段对齐
        - concurrency_cache.go: 字段对齐
        - http_upstream.go: 注释对齐
      
      - unused: 删除未使用的代码
        - user_repo.go: 删除未使用的 sql 字段
        - usage_service.go: 删除未使用的 calculateStats 函数
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code
      
      )
      Co-Authored-By: default avatarClaude Opus 4.5 <noreply@anthropic.com>
      682f546c
    • yangjianbo's avatar
      perf(后端): 完成性能优化与连接池配置 · 7efa8b54
      yangjianbo authored
      新增 DB/Redis 连接池配置与校验,并补充单测
      
      网关请求体大小限制与 413 处理
      
      HTTP/req 客户端池化并调整上游连接池默认值
      
      并发槽位改为 ZSET+Lua 与指数退避
      
      用量统计改 SQL 聚合并新增索引迁移
      
      计费缓存写入改工作池并补测试/基准
      
      测试: 在 backend/ 下运行 go test ./...
      7efa8b54
  2. 30 Dec, 2025 3 commits
  3. 29 Dec, 2025 4 commits
  4. 28 Dec, 2025 8 commits
  5. 27 Dec, 2025 1 commit
    • IanShaw's avatar
      feat(frontend): 前端界面优化与使用统计功能增强 (#46) · 254f1254
      IanShaw authored
      * feat(frontend): 前端界面优化与使用统计功能增强
      
      主要改动:
      
      1. 表格布局统一优化
         - 新增 TablePageLayout 通用布局组件
         - 统一所有管理页面的表格样式和交互
         - 优化 DataTable、Pagination、Select 等通用组件
      
      2. 使用统计功能增强
         - 管理端: 添加完整的筛选和显示功能
         - 用户端: 完善 API Key 列显示
         - 后端: 优化使用统计数据结构和查询
      
      3. 账户组件优化
         - 优化 AccountStatsModal、AccountUsageCell 等组件
         - 统一进度条和统计显示样式
      
      4. 其他改进
         - 完善中英文国际化
         - 统一页面样式和交互体验
         - 优化各视图页面的响应式布局
      
      * fix(test): 修复 stubUsageLogRepo.ListWithFilters 测试 stub
      
      测试用例 GET /api/v1/usage 返回 500 是因为 stub 方法未实现,
      现在正确返回基于 UserID 过滤的日志数据。
      
      * feat(frontend): 统一日期时间显示格式
      
      **主要改动**:
      1. 增强 utils/format.ts:
         - 新增 formatDateOnly() - 格式: YYYY-MM-DD
         - 新增 formatDateTime() - 格式: YYYY-MM-DD HH:mm:ss
      
      2. 全局替换视图中的格式化函数:
         - 移除各视图中的自定义 formatDate 函数
         - 统一导入使用 @/utils/format 中的函数
         - created_at/updated_at 使用 formatDateTime
         - expires_at 使用 formatDateOnly
      
      3. 受影响的视图 (8个):
         - frontend/src/views/user/KeysView.vue
         - frontend/src/views/user/DashboardView.vue
         - frontend/src/views/user/UsageView.vue
         - frontend/src/views/user/RedeemView.vue
         - frontend/src/views/admin/UsersView.vue
         - frontend/src/views/admin/UsageView.vue
         - frontend/src/views/admin/RedeemView.vue
         - frontend/src/views/admin/SubscriptionsView.vue
      
      **效果**:
      - 日期统一显示为 YYYY-MM-DD
      - 时间统一显示为 YYYY-MM-DD HH:mm:ss
      - 提升可维护性,避免格式不一致
      
      * fix(frontend): 补充遗漏的时间格式化统一
      
      **补充修复**(基于 code review 发现的遗漏):
      
      1. 增强 utils/format.ts:
         - 新增 formatTime() - 格式: HH:mm
      
      2. 修复 4 个遗漏的文件:
         - src/views/admin/UsersView.vue
           * 删除 formatExpiresAt(),改用 formatDateTime()
           * 修复订阅过期时间 tooltip 显示格式不一致问题
      
         - src/views/user/ProfileView.vue
           * 删除 formatMemberSince(),改用 formatDate(date, 'YYYY-MM')
           * 统一会员起始时间显示格式
      
         - src/views/user/SubscriptionsView.vue
           * 修改 formatExpirationDate() 使用 formatDateOnly()
           * 保留天数计算逻辑
      
         - src/components/account/AccountStatusIndicator.vue
           * 删除本地 formatTime(),改用 utils/format 中的统一函数
           * 修复 rate limit 和 overload 重置时间显示
      
      **验证**:
      - TypeScript 类型检查通过 ✓
      - 前端构建成功 ✓
      - 所有剩余的 toLocaleString() 都是数字格式化,属于正确用法 ✓
      
      **效果**:
      - 订阅过期时间统一为 YYYY-MM-DD HH:mm:ss
      - 会员起始时间统一为 YYYY-MM
      - 重置时间统一为 HH:mm
      - 消除所有不规范的原生 locale 方法调用
      254f1254
  6. 26 Dec, 2025 6 commits
    • ianshaw's avatar
      feat(geminicli): 添加内置 Gemini CLI OAuth 客户端常量和改进配置逻辑 · eea94985
      ianshaw authored
      - 添加 GeminiCLIOAuthClientID/Secret 常量(Gemini CLI 公开 OAuth 客户端)
      - 更新 DefaultAIStudioScopes 使用 generative-language.retriever(符合 Google 文档)
      - EffectiveOAuthConfig 支持自动回退到内置客户端
      - 内置客户端自动过滤受限 scope(如 generative-language)
      - 添加 scope 向后兼容性处理
      eea94985
    • ianshaw's avatar
      fix(backend): 修复 golangci-lint 报告的格式和代码规范问题 · 6682d06c
      ianshaw authored
      - gofmt: 修复 account_handler.go, models.go, gemini_messages_compat_service.go 的格式
      - staticcheck ST1005: 将 error strings 改为小写开头
      6682d06c
    • ianshaw's avatar
      fix(backend): 修复 golangci-lint 报告的问题 · efa470ef
      ianshaw authored
      - gofmt: 修复代码格式问题
      - errcheck: 处理 WriteString 和 Close 返回值
      - staticcheck: 错误信息改为小写开头
      - staticcheck: 移除无效的 nil 检查
      - staticcheck: 使用 append 替换循环
      - staticcheck: 使用无条件的 TrimPrefix
      - ineffassign: 移除无效赋值
      - unused: 移除未使用的 geminiOAuthService 字段
      - 重新生成 wire_gen.go
      efa470ef
    • ianshaw's avatar
      feat(backend): 添加 Gemini/Google API 基础包 · 040dc27e
      ianshaw authored
      - 新增 pkg/gemini: 模型定义与回退列表
      - 新增 pkg/googleapi: Google API 错误状态处理
      - 新增 pkg/geminicli/models.go: CLI 模型结构
      - 更新 constants.go: AI Studio 相关常量
      - 更新 oauth.go: 支持 AI Studio OAuth 流程,凭据通过环境变量配置
      040dc27e
    • ianshaw's avatar
      feat(config): 新增 Gemini 配置项和 geminicli 核心包 · aea48ae1
      ianshaw authored
      - 添加 Gemini OAuth 配置结构
      - 实现 geminicli 包(OAuth、Token、CodeAssist 类型)
      - 更新配置示例文件
      aea48ae1
    • NepetaLemon's avatar
      refactor: 自定义业务错误 (#33) · 8d7a4975
      NepetaLemon authored
      * refactor: 自定义业务错误
      
      * refactor: 隐藏服务器错误与统一 panic 响应
      8d7a4975
  7. 25 Dec, 2025 1 commit
  8. 24 Dec, 2025 3 commits
  9. 22 Dec, 2025 1 commit
  10. 20 Dec, 2025 2 commits
    • Forest's avatar
      ci(backend): 添加 gofmt 配置 · 1e1f3c0c
      Forest authored
      1e1f3c0c
    • NepetaLemon's avatar
      ci(backend): 添加 github actions (#10) · c6b3de11
      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 检查
      - 统一代码格式
      c6b3de11
  11. 19 Dec, 2025 3 commits
    • Forest's avatar
      refactor(backend): 引入端口接口模式 · e99b344b
      Forest authored
      e99b344b
    • shaw's avatar
      feat(account): 账号测试支持选择模型 · ee86dbca
      shaw authored
      - 新增 GET /api/v1/admin/accounts/:id/models 接口获取账号可用模型
      - 账号测试弹窗新增模型选择下拉框
      - 测试时支持传入 model_id 参数,不传则默认使用 Sonnet
      - API Key 账号支持根据 model_mapping 映射测试模型
      - 将模型常量提取到 claude 包统一管理
      ee86dbca
    • shaw's avatar
      refactor: 提取 Claude 客户端常量到独立包 · 1ed93a5f
      shaw authored
        - 新增 internal/pkg/claude 包统一管理 Claude Code 相关常量
        - 统一账号测试逻辑,所有账号类型使用相同的 Claude Code 风格请求
        - 网关服务使用常量包替换硬编码的 beta header 字符串
      1ed93a5f
  12. 18 Dec, 2025 1 commit
    • shaw's avatar
      refactor: 使用行业标准方案重构服务重启逻辑 · 8e81e395
      shaw authored
      重构内容:
      - 移除复杂的 sudo systemctl restart 方案
      - 改用 os.Exit(0) + systemd Restart=always 的标准做法
      - 删除 sudoers 配置及相关代码
      - 删除 sub2api-sudoers 文件
      
      优势:
      - 代码从 85+ 行简化到 47 行
      - 无需 sudo 权限配置
      - 无需特殊用户 shell 配置
      - 更简单、更可靠
      - 符合行业最佳实践(Docker/K8s 等均采用此方案)
      
      工作原理:
      - 服务调用 os.Exit(0) 优雅退出
      - systemd 检测到退出后自动重启(Restart=always)
      8e81e395