---
description: 对外展示的 URL / token 必须脱敏，禁止把完整密钥写进界面、报错或日志
alwaysApply: true
---

# 隐私脱敏

本插件可以展示 URL、远程地址、仓库路径，但 **token、密码、Bearer、API Key 必须脱敏后再给用户或模型看**。

## 必须遵守

- 所有即将进入界面、HTTP JSON、`messageZh` / `hintZh`、工具卡片的文本，先走 `redactSecrets()`（`src/shared/redact.ts`）。
- URL 本身可以原样展示主机和路径；只遮住 userinfo 里的密码/token、查询参数里的 `token` / `access_token` / `api_key` 等、以及 `ghp_` `glpat-` `npm_` `sk-` `Bearer` 这类密钥。
- 脱敏形态：保留头 3 位和尾 2 位，中间 `***`。短于 7 位整段改成 `***`。
- 不要把未脱敏的 `git` stderr、`process.env`、`.npmrc`、远程 clone URL 直接拼进报错。
- 不要在脚本、README、提交说明、测试夹具里写入真实 token。测试只用假值。
- 不要新增会把完整密钥打到 `console` 的日志。

## 示例

```ts
// ❌ 把 git stderr 原样给用户
return new GitError('GIT_FAILED', stderr)

// ✅ 先脱敏再展示，URL 还在，token 被遮住
return new GitError('GIT_FAILED', redactSecrets(stderr))
```

`https://octocat:ghp_abcdefghijklmnopqrstuv@github.com/acme/app.git`
→ `https://octocat:ghp***uv@github.com/acme/app.git`
