1. 31 Dec, 2025 1 commit
  2. 30 Dec, 2025 2 commits
  3. 26 Dec, 2025 6 commits
    • IanShaw027's avatar
      feat(test): 添加 Gemini 双响应格式支持 · 2714be99
      IanShaw027 authored
      添加对两种 Gemini 响应格式的支持:
      - AI Studio: `{"candidates": [...]}`
      - Gemini CLI: `{"response": {"candidates": [...]}}`
      
      通过 unwrap 逻辑自动检测并适配两种格式,确保账号测试功能
      对所有 Gemini 账号类型都能正常工作。
      
      合并 PR #43 的剩余功能到 PR #37
      2714be99
    • IanShaw027's avatar
      fix(backend): 适配重构后的架构修复 Gemini OAuth 集成 · 9db52838
      IanShaw027 authored
      ## 主要修改
      
      1. **移除 model 包引用**
         - 删除所有 `internal/model` 包的 import
         - 使用 service 包中的类型定义(Account, Platform常量等)
      
      2. **修复类型转换**
         - JSONB → map[string]any
         - 添加 mergeJSONB 辅助函数
         - 添加 Account.IsGemini() 方法
      
      3. **更新中间件调用**
         - GetUserFromContext → GetAuthSubjectFromContext
         - 适配新的并发控制签名(传递 ID 和 Concurrency 而不是完整对象)
      
      4. **修复 handler 层**
         - 更新 gemini_v1beta_handler.go
         - 修正 billing 检查和 usage 记录
      
      ## 影响范围
      - backend/internal/service/gemini_*.go
      - backend/internal/service/account_test_service.go
      - backend/internal/service/crs_sync_service.go
      - backend/internal/handler/gemini_v1beta_handler.go
      - backend/internal/handler/gateway_handler.go
      - backend/internal/handler/admin/account_handler.go
      9db52838
    • ianshaw's avatar
      fix(sse): 修复非标准 SSE 格式解析问题 · 16eec4eb
      ianshaw authored
      部分上游 API 返回的 SSE 格式不符合标准规范:
      - 标准格式: `data: {...}`(冒号后有空格)
      - 非标准格式: `data:{...}`(冒号后无空格)
      
      使用预编译正则 `^data:\s*` 统一处理两种格式。
      16eec4eb
    • Forest's avatar
      refactor: 调整项目结构为单向依赖 · e5a77853
      Forest authored
      e5a77853
    • 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 AI Studio OAuth 和消息兼容服务 · b2d71da2
      ianshaw authored
      - gemini_oauth_service.go: 新增 AI Studio OAuth 类型支持
      - gemini_token_provider.go: Token 提供器增强
      - gemini_messages_compat_service.go: 支持 AI Studio 端点
      - account_test_service.go: Gemini 账户可用性检测
      - gateway_service.go: 网关服务适配
      - openai_gateway_service.go: OpenAI 兼容层调整
      b2d71da2
  4. 25 Dec, 2025 2 commits
    • Forest's avatar
      refactor: 删除 ports 目录 · f51ad2e1
      Forest authored
      f51ad2e1
    • IanShaw's avatar
      feat: CRS 同步增强 - 自动刷新 OAuth token 和修复测试配置 (#27) · 60f6ed6b
      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 分支处理未知平台
      60f6ed6b
  5. 24 Dec, 2025 1 commit
  6. 22 Dec, 2025 1 commit
  7. 20 Dec, 2025 3 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
    • Forest's avatar
      refactor(backend): service http ports · cceada7d
      Forest authored
      cceada7d
  8. 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
  9. 18 Dec, 2025 2 commits