agent-Specialization/.astrion/memory/opencode_key_replacement_script.md

101 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: opencode_key_replacement_script
description: 当需要批量替换 ~/.astrion/astrion、~/.astrion/astrion-clone 和服务器 /opt/agent/runtime 中的 OpenCode API key 时,应该索引本记忆
---
---
name: opencode_key_replacement_script
description: 当需要批量替换 ~/.astrion/astrion、~/.astrion/astrion-clone 和服务器 /opt/agent/runtime 中的 OpenCode API key 时,应该索引本记忆
---
# OpenCode API key 批量替换脚本
## 脚本位置
项目根目录下的 `replace_opencode_keys.py`
## 作用
一次性批量替换以下目录中所有 OpenCode 相关的 API key
- 本地:`/Users/jojo/.astrion/astrion`
- 本地:`/Users/jojo/.astrion/astrion-clone`
- 服务器:`/opt/agent/runtime/`(或服务器上 `ASTRION_DATA_ROOT` 指向的目录)
## 扫描范围
仅扫描配置文件,自动跳过运行时数据:
- `settings.json`
- `config/*.json`
- 跳过 `data/`、`logs/`、对话历史等目录
- 跳过已有的 `.bak_` / `.bak` 备份文件
## 替换规则
脚本会查找已知的旧 OpenCode key 值(被多个 OpenCode Go 相关环境变量共用的同一串 key并将其替换为新的 OpenCode key。
实际会改到的键名通常包括:
- `settings.json``env_vars` 下的:
- `API_KEY_OPENCODE`
- `AGENT_API_KEY`
- `AGENT_THINKING_API_KEY`
- `AGENT_TITLE_API_KEY`
- 指向 `opencode.ai``API_KEY_KIMI`、`API_KEY_DEEPSEEK`、`API_KEY_QWEN`、`API_KEY_MINIMAX` 等
- `config/sub_agent_models.json``url``https://opencode.ai/zen/go/v1` 的模型条目的 `apikey`
`config/custom_models.json` 中一般使用 `${API_KEY_OPENCODE}` 变量引用key 本身存在 `settings.json`,脚本不会直接修改它。
## 用法
```bash
# 只预览,不写入(循环轮换模式)
python3 replace_opencode_keys.py --dry-run
# 正式执行循环轮换默认key1→key2, key2→key3, key3→key1
python3 replace_opencode_keys.py
# 单次指定替换(覆盖默认循环模式)
python3 replace_opencode_keys.py --old-key <旧key> --new-key <新key>
```
## 服务器替换流程
1. 确保脚本已上传至 `/opt/agent/agents/replace_opencode_keys.py`
2. 在服务器上修改脚本,把 `Path("/opt/agent/runtime")` 加入 `TARGET_DIRS`
3. 先执行 `--dry-run` 预览影响范围
4. 去掉 `--dry-run` 正式执行
5. 执行 `bash /opt/agent/refresh_agents.sh` 重启 webapp 服务使配置生效
6. 删除生成的 `.bak_时间戳` 备份文件
## 服务器执行方式建议
- **推荐**:通过 `terminal_session` 打开一个 SSH 会话,在会话里直接运行 `python3 replace_opencode_keys.py ...`
- **次选**:使用服务器虚拟环境的完整路径,例如 `/opt/agent/venv/bin/python3 replace_opencode_keys.py ...`
- **注意**:在旧版本或未重启前,通过 `run_command` 直接执行 `ssh host "python3 ..."` 时,`run_command` 可能把命令中的 `python3` 重写为本地 macOS 的 Python 绝对路径,导致远程服务器找不到解释器。该问题已在 `modules/terminal_ops/run.py` 中修复:当命令通过 `ssh` 在远程执行时,跳过 `python3`/`pip` 重写。
## 注意事项
- 执行前会自动在同级目录生成 `.bak_时间戳` 备份。
- 如果在沙箱/受限执行环境下运行,原目录不可写时脚本会把备份和修改后的文件写到项目工作区的 `opencode_key_replacement_backup/` 目录下,需要手动复制覆盖。
- 建议执行后删除生成的 `.bak_时间戳` 备份文件。
- 服务器上配置文件修改后,需要重启 webapp 服务才能生效。
## 历史记录
- 2026-06-19使用脚本将本地两个目录的配置从主 key 替换为备用 key并删除备份。
- 2026-06-19将服务器 `/opt/agent/runtime/` 下的 `settings.json``config/sub_agent_models.json` 也从主 key 替换为备用 key并删除备份。
- 2026-06-24将服务器 `/opt/agent/runtime/` 下的 `settings.json`9 处)和 `config/sub_agent_models.json`1 处)从备用 key 替换回主 key随后执行 `bash /opt/agent/refresh_agents.sh` 重启 webapp 服务,并删除备份。期间发现 `run_command` 执行 `ssh host "python3 ..."` 会错误重写 `python3` 为本地 macOS 路径,已修复 `modules/terminal_ops/run.py`
- 2026-06-25重构脚本为三 key 循环轮换模式key1/key2/key3去掉主/备用命名)。将本地 `~/.astrion/astrion``~/.astrion/astrion-clone` 的配置从 key2 替换为 key34 文件 20 处)。服务器尚未操作,当前仍为 key1。
- 2026-06-25将本地 `~/.astrion/astrion``~/.astrion/astrion-clone` 的配置从 key2 替换为 key34 文件 20 处),删除备份。服务器仍为 key1。
## 相关 key 记录
| 说明 | Key |
|---|---|
| key1 | `sk-zNU867TGGXNKxoM0H6Pg6Jq4PYUPUOPDgMlzrOl3SS6jECRMWK5nNi6YMSsHzoZ` |
| key2 | `sk-sgt4ERgERPx2axU18PSfmenHv9zNDD3y8M5yr0p4ryhcNSm04CZsCxDHftJ9AkFD` |
| key3 | `sk-Jhvi76vJdCEQzvEdl8cAS5MIwBxBS4iTrJYSru2zCAXVnDVQpiZIvrcn9hBwkdZ4` |
| legacy已停用等同 key1 轮换到 key2 | `sk-j0NdTvEDoqqkKCHEAFXXYneEsuXEiOXNCgLeZARJmfYUBf2Riym7KPFWq1amkB6z` |