1. 27 Dec, 2025 1 commit
    • yangjianbo's avatar
      feat: · 3a8dbf5a
      yangjianbo authored
      golang 1.24-> 1.25
      node 20 -> node 24
      具体提升请查看官方文档
      3a8dbf5a
  2. 26 Dec, 2025 39 commits
    • shaw's avatar
      chore: home页面更新gemini为已支持 · 2b79c4e8
      shaw authored
      2b79c4e8
    • shaw's avatar
      429f38d0
    • 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(lint): 修复 gofmt 格式问题 · d8518180
      IanShaw027 authored
      修复 golangci-lint 检查失败的问题:
      - gemini_token_provider.go: 删除 import 后多余空行
      - gemini_token_refresher.go: 删除 import 后多余空行
      
      Fixes CI golangci-lint check for PR #37
      d8518180
    • IanShaw027's avatar
      refactor: 统一使用 mergeMap 函数提升代码一致性 · 576bf463
      IanShaw027 authored
      根据 Gemini CLI 代码审查建议:
      
      ## 修改内容
      - 将 Gemini OAuth 同步中的 `mergeJSONB` 调用替换为 `mergeMap`
      - 删除不再使用的 `mergeJSONB` 函数定义
      
      ## 原因
      - 其他平台(OpenAI、Anthropic)的账户同步都使用 `mergeMap`
      - `mergeJSONB` 是为旧的 `model.JSONB` 类型设计,与重构后的架构不一致
      - 统一函数命名提高代码可读性和可维护性
      
      ## 影响范围
      - backend/internal/service/crs_sync_service.go (4处替换)
      - backend/internal/service/account.go (删除 mergeJSONB 函数)
      
      ## 验证
      ✓ 编译通过
      ✓ 功能逻辑无变化(mergeMap 和 mergeJSONB 实现相同)
      576bf463
    • 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
    • IanShaw027's avatar
      merge: 合并 upstream/main 解决 PR #37 冲突 · bfcd9501
      IanShaw027 authored
      - 删除 backend/internal/model/account.go 符合重构方向
      - 合并最新的项目结构重构
      - 包含 SSE 格式解析修复
      - 更新依赖和配置文件
      bfcd9501
    • September999999999's avatar
      fix: 卸载时删除安装锁文件以支持重新安装 (#39) · 12252c60
      September999999999 authored
      - 卸载时自动删除 .installed 安装锁文件
      - 新增 --purge 参数支持完全清理(包括配置目录)
      - 交互模式下增加是否删除配置目录的确认提示
      - 支持中英文消息
      12252c60
    • shaw's avatar
      2d89f366
    • shaw's avatar
      Merge branch 'refactor/redis-key-helpers' · 3d608c26
      shaw authored
      3d608c26
    • shaw's avatar
      fix: admin handlers 添加 DTO 转换修复 JSON 序列化 · 739d0ee6
      shaw authored
      修复 PR #36 合并后部分 admin handler 直接返回 service 层对象导致
      JSON 字段名为 PascalCase 而非期望的 snake_case 问题。
      
      修复内容:
      - account_handler: Refresh 接口添加 dto.AccountFromService
      - openai_oauth_handler: RefreshAccountToken/CreateAccountFromOAuth 添加 dto 转换
      - subscription_handler: BulkAssign 添加 dto.BulkAssignResultFromService
      - usage_handler: List 接口添加 dto.UsageLogFromService 转换
      - 新增 dto.BulkAssignResult 类型和对应的 mapper 函数
      739d0ee6
    • shaw's avatar
      22f07a7b
    • ianshaw's avatar
      fix(sse): 修复非标准 SSE 格式解析问题 · 16eec4eb
      ianshaw authored
      部分上游 API 返回的 SSE 格式不符合标准规范:
      - 标准格式: `data: {...}`(冒号后有空格)
      - 非标准格式: `data:{...}`(冒号后无空格)
      
      使用预编译正则 `^data:\s*` 统一处理两种格式。
      16eec4eb
    • shaw's avatar
      ecb2c535
    • Forest's avatar
      refactor: 封装 Redis key 生成函数 · 06d5876b
      Forest authored
      06d5876b
    • Forest's avatar
      refactor: 调整项目结构为单向依赖 · e5a77853
      Forest authored
      e5a77853
    • ianshaw's avatar
      fix(backend): 修复 rebase 后的代码集成问题 · 9780f0fd
      ianshaw authored
      - 更新 middleware import 路径到 internal/server/middleware
      - 修复 api_key_auth_google.go 使用正确的 service 类型
      - 更新 router.go 和 http.go 支持 Gemini v1beta 路由
      - 在 routes/gateway.go 中添加 Gemini v1beta API 端点
      - 在 routes/admin.go 中添加 Gemini OAuth 路由
      - 更新 wire.go 添加 GeminiOAuthService cleanup
      - 重新生成 wire_gen.go
      9780f0fd
    • ianshaw's avatar
    • ianshaw's avatar
      docs(deploy): 说明 AI Studio OAuth Client 需发布为正式版本 · 55946801
      ianshaw authored
      README.md:
      - 添加第 7 步:发布 OAuth 应用到正式版本
      - 说明 Testing 模式限制(100 用户、7 天 token 过期)
      - 说明 sensitive scope 可能需要 Google 审核
      
      .env.example:
      - 添加 OAuth Client 需发布为正式版本的说明
      55946801
    • ianshaw's avatar
      feat(i18n): 添加 AI Studio OAuth 配置状态相关文案 · 50855ec1
      ianshaw authored
      - 添加 aiStudioNotConfiguredShort/Tip/aiStudioNotConfigured 翻译
      - 更新 needsProjectIdDesc/noProjectIdNeededDesc 描述更准确
      50855ec1
    • ianshaw's avatar
      feat(frontend): UI 显示 AI Studio OAuth 配置状态 · f9f33e7b
      ianshaw authored
      CreateAccountModal:
      - 检测 AI Studio OAuth 是否可用(服务器配置了自定义 OAuth 客户端)
      - 未配置时禁用 AI Studio 选项并显示提示
      - 添加悬停提示说明配置要求
      
      ReAuthAccountModal:
      - 同步 AI Studio OAuth 可用性检测逻辑
      - 未配置时自动回退到 Code Assist
      f9f33e7b
    • ianshaw's avatar
      feat(frontend): 添加 Gemini OAuth 能力查询 API · 1bec3599
      ianshaw authored
      - 添加 GeminiOAuthCapabilities 类型定义
      - 添加 getCapabilities API 函数
      - useGeminiOAuth composable 导出 getCapabilities 方法
      1bec3599
    • ianshaw's avatar
      feat(backend): 添加 OAuth 能力查询接口,改进 OAuth 客户端选择逻辑 · 632318ad
      ianshaw authored
      Handler 改进:
      - 添加 GET /api/v1/admin/gemini/oauth/capabilities 接口
      - 简化 GenerateAuthURL,redirect_uri 由服务层决定
      
      Repository 改进:
      - ExchangeCode/RefreshToken 根据 oauthType 选择正确的 OAuth 客户端
      - Code Assist 始终使用内置客户端,AI Studio 使用用户配置的客户端
      632318ad
    • ianshaw's avatar
      feat(service): 改进 Gemini OAuth 服务层,区分 Code Assist 和 AI Studio 客户端 · 456e8984
      ianshaw authored
      OAuth 服务改进:
      - 添加 GetOAuthConfig 返回 AI Studio OAuth 可用性
      - Code Assist 强制使用内置 Gemini CLI 客户端
      - AI Studio OAuth 要求用户配置自定义 OAuth 客户端
      - ExchangeCode/RefreshToken 接口添加 oauthType 参数
      - 添加 unauthorized_client 错误的向后兼容重试逻辑
      
      兼容层改进:
      - 403 重试逻辑仅对 Code Assist OAuth 生效
      - 添加 insufficient-scope 错误检测,避免无效重试
      - 上游错误消息脱敏处理(隐藏 API key 等敏感信息)
      - 改进错误提示,显示更多上游错误详情
      456e8984
    • 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): 移除对已删除 ports 包的依赖 · 85fd1e4a
      ianshaw authored
      适配 main 分支的 ports 目录删除重构:
      - 将 ports 包中的接口移至 service 包
      - 更新 repository 层的导入路径
      85fd1e4a
    • 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
      docs(deploy): 更新部署配置和文档 · 79d15852
      ianshaw authored
      - .env.example: 新增 Gemini OAuth 环境变量配置示例
      - config.example.yaml: 新增 Gemini OAuth 配置示例
      - README.md: 更新部署文档
      - docker-compose.yml: 添加 Gemini OAuth 环境变量传递
      79d15852
    • ianshaw's avatar
      feat(frontend): 添加 Gemini OAuth 类型国际化 · 2d1a15b1
      ianshaw authored
      - zh.ts: 添加中文翻译(Code Assist/AI Studio 选择等)
      - en.ts: 添加英文翻译
      2d1a15b1
    • ianshaw's avatar
      feat(frontend): 支持 Gemini OAuth 类型选择 (Code Assist/AI Studio) · 09431cfc
      ianshaw authored
      - CreateAccountModal.vue: 新增 OAuth 类型选择 UI
      - ReAuthAccountModal.vue: 重授权支持选择类型
      - OAuthAuthorizationFlow.vue: 新增 Project ID 输入框
      - AccountTestModal.vue: Gemini 模型默认选择优化
      - useGeminiOAuth.ts: OAuth 逻辑参数变更
      - gemini.ts: API 调用更新
      09431cfc
    • ianshaw's avatar
      feat(backend): 添加 Gemini V1beta Handler 和路由 · 46cb82ba
      ianshaw authored
      - 新增 gemini_v1beta_handler.go: 代理原生 Google API 格式
      - 更新 gemini_oauth_handler.go: 移除 redirectUri,新增 oauthType
      - 更新 account_handler.go: 账户 Handler 增强
      - 更新 router.go: 注册 v1beta 路由
      - 更新 config.go: Gemini OAuth 通过环境变量配置
      - 更新 wire_gen.go: 依赖注入
      46cb82ba
    • 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
    • ianshaw's avatar
      feat(backend): 扩展 Gemini OAuth Repository 层 · 2d6e1d26
      ianshaw authored
      - 更新 gemini_oauth_client.go: 支持 AI Studio OAuth 客户端
      - 更新 geminicli_codeassist_client.go: 适配新的认证流程
      2d6e1d26
    • ianshaw's avatar
      feat(backend): 添加 Google API Key 认证中间件 · 50734c5e
      ianshaw authored
      - 新增 api_key_auth_google.go: 支持 x-goog-api-key 格式认证
      - 更新 api_key_auth.go: 适配 Gemini 原生 API 格式
      50734c5e
    • 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
      chore: 更新 .gitignore 忽略 Go 编译缓存 · d7090de0
      ianshaw authored
      添加 backend/.gocache/ 到忽略列表
      d7090de0
    • ianshaw's avatar
      chore(frontend): 更新项目配置和依赖 · cab681c7
      ianshaw authored
      - 更新 package-lock.json 依赖版本
      - 优化 Vite、PostCSS、Tailwind 配置
      - 更新入口 HTML 文件
      - 更新 TypeScript 构建缓存
      cab681c7
    • ianshaw's avatar
      style(frontend): 统一核心模块代码风格 · 01f990a5
      ianshaw authored
      - Composables: 优化 OAuth 相关 hooks 代码格式
      - Stores: 规范状态管理模块格式
      - Types: 统一类型定义格式
      - Utils: 优化工具函数格式
      - App.vue & style.css: 调整全局样式和主组件格式
      01f990a5