101 lines
5.0 KiB
Markdown
101 lines
5.0 KiB
Markdown
---
|
||
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 替换为 key3(4 文件 20 处)。服务器尚未操作,当前仍为 key1。
|
||
- 2026-06-25:将本地 `~/.astrion/astrion` 和 `~/.astrion/astrion-clone` 的配置从 key2 替换为 key3(4 文件 20 处),删除备份。服务器仍为 key1。
|
||
|
||
## 相关 key 记录
|
||
|
||
| 说明 | Key |
|
||
|---|---|
|
||
| key1 | `sk-zNU867TGGXNKxoM0H6Pg6Jq4PYUPUOPDgMlzrOl3SS6jECRMWK5nNi6YMSsHzoZ` |
|
||
| key2 | `sk-sgt4ERgERPx2axU18PSfmenHv9zNDD3y8M5yr0p4ryhcNSm04CZsCxDHftJ9AkFD` |
|
||
| key3 | `sk-Jhvi76vJdCEQzvEdl8cAS5MIwBxBS4iTrJYSru2zCAXVnDVQpiZIvrcn9hBwkdZ4` |
|
||
| legacy(已停用,等同 key1 轮换到 key2) | `sk-j0NdTvEDoqqkKCHEAFXXYneEsuXEiOXNCgLeZARJmfYUBf2Riym7KPFWq1amkB6z` |
|