---
name: swing-wechat-secret-config
description: 安全配置或迁移多个微信公众号 AppID/AppSecret。由 swing-wechat-env-config 在发布凭据缺失时自动调用，也用于用户要求配置、修改、检查或迁移微信公众号密钥时；通过本地终端隐藏输入 AppSecret，保存到用户级 ~/.wechat/accounts/{account}/credentials.env，禁止在聊天、命令参数或日志中传递密钥。
---

# 微信公众号凭据安全配置

把每个公众号的凭据保存到用户级 `~/.wechat/accounts/{account-id}/credentials.env`。不提供账号参数时保留旧版 `~/.wechat/.env` 兼容路径。对话只负责引导和确认状态，AppSecret 必须在本地交互终端的隐藏输入提示中录入。

## 安全规则

1. 不得要求用户在聊天中粘贴 AppSecret，也不得把 AppSecret 放入命令参数、环境变量赋值命令、日志或生成文件。
2. Agent 不得直接读取或回显现有密钥。检查配置时只运行脚本的 `--status`，由本地脚本在进程内判断字段是否有效。
3. 如果用户已在聊天中发送 AppSecret，不要复述、保存或继续使用；提醒用户在微信公众平台重置后，再通过本 Skill 配置新密钥。
4. 不得声称聊天输入可以被遮蔽或从会话记录中移除。

## 执行流程

1. 定位本 Skill 目录下的 `scripts/configure_wechat_credentials.py`。
2. 运行状态检查：

   ```bash
   python scripts/configure_wechat_credentials.py --account tiny-wings --status
   ```

3. 如果配置完整，返回 `swing-wechat-env-config` 继续验证，不要求用户重复输入。
4. 如果配置缺失，简短说明 AppID/AppSecret 的获取位置：微信公众平台 -> 设置与开发 -> 基本配置。
5. 在支持交互输入的本地终端运行：

   ```bash
   python scripts/configure_wechat_credentials.py --account tiny-wings
   ```

   AppID 在终端输入，AppSecret 使用隐藏输入并要求输入两次。脚本展示保存路径和非敏感摘要，用户确认后才写入。
6. 如果 Agent 的命令工具没有交互式 TTY，只向用户提供上述本地命令并暂停门禁；等待用户回复“配置完成”后重新运行 `--status`。不要改用聊天收集密钥。
7. 状态通过后返回 `swing-wechat-env-config`，由预检验证 access token 和 IP 白名单，再继续 workflow。

### 多账号配置

公众号品牌画像由 Skill 内置，密钥必须由用户在本地分别配置：

```bash
python scripts/configure_wechat_credentials.py --account tiny-wings
python scripts/configure_wechat_credentials.py --account sanhe-xu
```

账号 ID 只使用品牌画像中的安全 slug，不允许使用路径分隔符或任意用户输入作为文件路径。配置状态只显示遮蔽后的 AppID 和 `ready/not ready`，不会显示 AppSecret。

## 旧配置迁移

检测到 `~/.wechat/config.json` 且用户希望迁移时，在本地交互终端运行：

```bash
python scripts/configure_wechat_credentials.py --migrate-legacy
```

迁移过程不显示密钥，用户确认后写入指定账号的 `credentials.env`。成功验证新文件前不要删除旧配置；删除旧文件必须由用户明确授权。

## 完成条件

- `--status` 返回成功。
- 输出只包含配置状态、遮蔽后的 AppID 和文件路径。
- 未在对话或工具输出中出现 AppSecret。
