---
description: 从上游 (origin/main) 同步更新，保留 Antigravity 自定义改动
---

# 前置检查

// turbo
1. 查看当前状态和上游差异
```bash
cd /Users/win/2025/aitool/MiniGravity/sub2api
git fetch origin
git log --oneline HEAD..origin/main
```

如果上游没有新 commits，停止（无需同步）。

# 执行同步

2. 确保工作区干净
```bash
git status
```
如果有未提交的改动，先 `git stash`。

// turbo
3. 备份当前自定义 patches
```bash
mkdir -p /tmp/antigravity-patches
git format-patch origin/main..HEAD -o /tmp/antigravity-patches/
echo "已备份 $(ls /tmp/antigravity-patches/*.patch 2>/dev/null | wc -l) 个 patch 到 /tmp/antigravity-patches/"
```

4. 执行 rebase（把自定义 commits 移植到最新 upstream 上）
```bash
git rebase origin/main
```

如果有冲突，根据下方"冲突解决指南"处理，然后 `git rebase --continue`。

// turbo
5. 编译验证
```bash
cd /Users/win/2025/aitool/MiniGravity/sub2api/backend && go build ./...
```

6. 推送
```bash
git push origin main --force-with-lease
```

---

# 冲突解决指南

## 高频冲突文件及处理策略

### `backend/internal/repository/http_upstream.go`
**我方改动**：在 `Do()` 和 `DoWithTLS()` 中新增了 Node.js TLS 代理路由逻辑。
**策略**：保留上游对函数签名/连接池的改动，确保我方在函数开头新增的 `isNodeTLSProxyEnabled()` 判断块被保留。
```bash
# 查看冲突
git diff backend/internal/repository/http_upstream.go
# 关键：确保以下两个块被保留（来自 ours）：
# 1. Do() 中的 Node.js proxy 路由 (~L128-137)
# 2. DoWithTLS() 中的 Node.js proxy 路由 (~L180-187)
# 3. isNodeTLSProxyEnabled() / shouldRouteViaNodeProxy() / doViaNodeTLSProxy() 函数
```

### `backend/internal/config/config.go`
**我方改动**：在 `GatewayConfig` struct 新增了 `NodeTLSProxy`、`InstanceSalt`、`FingerprintDefaults` 三个字段。
**策略**：上游通常只在 struct 末尾添加新字段，我方也是添加字段，基本不冲突。
```bash
# 确保以下字段存在于 GatewayConfig struct 中
grep -n "NodeTLSProxy\|InstanceSalt\|FingerprintDefaults" backend/internal/config/config.go
```

### `backend/internal/service/identity_service.go`
**我方改动**：
- 更新了 `defaultFingerprint` 的版本号
- 新增 `ApplyDefaultFingerprintOverrides()` 函数
- 新增 `NewIdentityServiceWithSalt()` 函数
- 在 `IdentityService` struct 加 `instanceSalt` 字段
**策略**：上游通常不改 defaultFingerprint，直接 Accept Ours 这部分。

### `backend/internal/pkg/claude/constants.go`
**我方改动**：更新 Claude CLI 版本常量（CLI_VERSION / SDK_VERSION）。
**策略**：直接保留我方版本号（更新的）。

### `backend/cmd/server/wire_gen.go`
**我方改动**：可能因 Wire 依赖注入改变。
**策略**：先接受 Theirs，然后重新运行 `go generate ./cmd/server/` 重新生成。

---

# 零冲突文件（永远不会冲突）

以下目录是我方全新添加，upstream 没有，永远不会冲突：
- `tools/node-tls-proxy/` — Node.js TLS 代理
- `tools/firewall/` — iptables 防火墙规则
- `tools/sora-curl-cffi-sidecar/` — Sora curl_cffi sidecar
- `deploy/docker-compose.tls-proxy.yml` — TLS 代理 compose
- `deploy/build-push-tls-proxy.sh` — 构建推送脚本
