Commit c328b741 authored by shaw's avatar shaw
Browse files

Merge PR #73: feat(antigravity): 添加 Antigravity (Cloud AI Companion) 平台支持

新增功能:
- Antigravity OAuth 授权流程支持
- Claude → Gemini 协议转换(Claude API 请求自动转换为 Gemini 格式)
- 配额刷新和状态显示
- 混合调度功能,支持 Anthropic 和 Antigravity 账户混合使用
- /antigravity 专用路由,支持仅使用 Antigravity 账户
- 前端 Antigravity 服务商标识和账户管理功能

冲突解决:
- CreateAccountModal.vue: 合并 data-tour 属性和 mixed-scheduling 属性
- EditAccountModal.vue: 合并 data-tour 属性和 mixed-scheduling 属性

代码质量改进:
- 修复 antigravity 类型文件的 gofmt 格式问题(struct 字段对齐、interface{} → any)
- 移除 .golangci.yml 中的 gofmt 排除规则
- 修复测试文件的格式问题
parents e85b35c6 42e2c506
...@@ -27,6 +27,7 @@ func NewTokenRefreshService( ...@@ -27,6 +27,7 @@ func NewTokenRefreshService(
oauthService *OAuthService, oauthService *OAuthService,
openaiOAuthService *OpenAIOAuthService, openaiOAuthService *OpenAIOAuthService,
geminiOAuthService *GeminiOAuthService, geminiOAuthService *GeminiOAuthService,
antigravityOAuthService *AntigravityOAuthService,
cfg *config.Config, cfg *config.Config,
) *TokenRefreshService { ) *TokenRefreshService {
s := &TokenRefreshService{ s := &TokenRefreshService{
...@@ -40,6 +41,7 @@ func NewTokenRefreshService( ...@@ -40,6 +41,7 @@ func NewTokenRefreshService(
NewClaudeTokenRefresher(oauthService), NewClaudeTokenRefresher(oauthService),
NewOpenAITokenRefresher(openaiOAuthService), NewOpenAITokenRefresher(openaiOAuthService),
NewGeminiTokenRefresher(geminiOAuthService), NewGeminiTokenRefresher(geminiOAuthService),
NewAntigravityTokenRefresher(antigravityOAuthService),
} }
return s return s
......
This diff is collapsed.
...@@ -28,6 +28,7 @@ func ServeEmbeddedFrontend() gin.HandlerFunc { ...@@ -28,6 +28,7 @@ func ServeEmbeddedFrontend() gin.HandlerFunc {
if strings.HasPrefix(path, "/api/") || if strings.HasPrefix(path, "/api/") ||
strings.HasPrefix(path, "/v1/") || strings.HasPrefix(path, "/v1/") ||
strings.HasPrefix(path, "/v1beta/") || strings.HasPrefix(path, "/v1beta/") ||
strings.HasPrefix(path, "/antigravity/") ||
strings.HasPrefix(path, "/setup/") || strings.HasPrefix(path, "/setup/") ||
path == "/health" || path == "/health" ||
path == "/responses" { path == "/responses" {
......
This diff is collapsed.
...@@ -14,6 +14,7 @@ import systemAPI from './system' ...@@ -14,6 +14,7 @@ import systemAPI from './system'
import subscriptionsAPI from './subscriptions' import subscriptionsAPI from './subscriptions'
import usageAPI from './usage' import usageAPI from './usage'
import geminiAPI from './gemini' import geminiAPI from './gemini'
import antigravityAPI from './antigravity'
/** /**
* Unified admin API object for convenient access * Unified admin API object for convenient access
...@@ -29,7 +30,8 @@ export const adminAPI = { ...@@ -29,7 +30,8 @@ export const adminAPI = {
system: systemAPI, system: systemAPI,
subscriptions: subscriptionsAPI, subscriptions: subscriptionsAPI,
usage: usageAPI, usage: usageAPI,
gemini: geminiAPI gemini: geminiAPI,
antigravity: antigravityAPI
} }
export { export {
...@@ -43,7 +45,8 @@ export { ...@@ -43,7 +45,8 @@ export {
systemAPI, systemAPI,
subscriptionsAPI, subscriptionsAPI,
usageAPI, usageAPI,
geminiAPI geminiAPI,
antigravityAPI
} }
export default adminAPI export default adminAPI
...@@ -15,6 +15,10 @@ ...@@ -15,6 +15,10 @@
<svg v-else-if="platform === 'gemini'" :class="sizeClass" viewBox="0 0 24 24" fill="currentColor"> <svg v-else-if="platform === 'gemini'" :class="sizeClass" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 2l1.89 7.2L21 12l-7.11 2.8L12 22l-1.89-7.2L3 12l7.11-2.8L12 2z" /> <path d="M12 2l1.89 7.2L21 12l-7.11 2.8L12 22l-1.89-7.2L3 12l7.11-2.8L12 2z" />
</svg> </svg>
<!-- Antigravity logo (cloud) -->
<svg v-else-if="platform === 'antigravity'" :class="sizeClass" viewBox="0 0 24 24" fill="currentColor">
<path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96z" />
</svg>
<!-- Fallback: generic platform icon --> <!-- Fallback: generic platform icon -->
<svg v-else :class="sizeClass" fill="currentColor" viewBox="0 0 24 24"> <svg v-else :class="sizeClass" fill="currentColor" viewBox="0 0 24 24">
<path <path
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment