## 现状问题 `internal/repo/users.go` 中 `UsersRepo.UpdateUserCredentials`(约 62 行)和 `applyAgentCLICredentialUpdates` 里,同一段「密钥字段更新」规则重复写了 4 遍: ```go if update.XxxAPIKeyClear { user.XxxAPIKey = "" } else if value := strings.TrimSpace(update.XxxAPIKey); value != "" { user.XxxAPIKey = value } ``` 分别用于 CodeBuddy、Codex、Claude Code 的 API Key 以及各 Agent CLI 凭据的 `APIKey`。规则一致(清空优先;空白输入保持原值;否则用去掉首尾空白的新值覆盖),但散落多处,后续新增凭据或调整规则容易漏改。 ## 重构方案 - 新增包内函数 `updatedSecret(current, value string, clear bool) string`,集中表达上述规则。 - 上述 4 处改为一行调用 `x = updatedSecret(x, update.X, update.XClear)`。 - Git Token 分支带有额外的「清掉工蜂 OAuth refresh token」副作用,保持原写法不动。 ## 影响范围 仅 `internal/repo/users.go` 内部实现;对外接口、JSON 字段、行为与报错均不变。 ## 验证方式 - 新增 `updatedSecret` 单元测试,覆盖清空、空白输入保持原值、去空白覆盖、清空优先于新值。 - `gofmt`、`go vet ./internal/repo/`、`go test ./internal/repo/` 通过(含已有 `TestAgentCLICredentialsRoundTrip`、`TestProviderUserCredentials`)。
Activity
【架构优化】合并 UpdateUserCredentials 中四处重复的密钥清空/覆盖逻辑为 updatedSecret (#767)
Robert0622 commentedon Nov 14, 2026
已对照当前 main 代码核实:
internal/repo/users.go的UpdateUserCredentials(283/291/296 行)与applyAgentCLICredentialUpdates(385 行)共 4 处重复“清空优先、空白输入保持原值、否则覆盖”逻辑;仓库内未发现updatedSecret(grep 无命中),与描述完全匹配,方案与验收标准清晰可执行,非重复。已记入本 Loop 候选,backlog 当前已满(5/5),待腾出名额后建单开发。