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

5.0 KiB
Raw Permalink Blame History

name description
opencode_key_replacement_script 当需要批量替换 ~/.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.jsonenv_vars 下的:
    • API_KEY_OPENCODE
    • AGENT_API_KEY
    • AGENT_THINKING_API_KEY
    • AGENT_TITLE_API_KEY
    • 指向 opencode.aiAPI_KEY_KIMIAPI_KEY_DEEPSEEKAPI_KEY_QWENAPI_KEY_MINIMAX
  • config/sub_agent_models.jsonurlhttps://opencode.ai/zen/go/v1 的模型条目的 apikey

config/custom_models.json 中一般使用 ${API_KEY_OPENCODE} 变量引用key 本身存在 settings.json,脚本不会直接修改它。

用法

# 只预览,不写入(循环轮换模式)
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.jsonconfig/sub_agent_models.json 也从主 key 替换为备用 key并删除备份。
  • 2026-06-24将服务器 /opt/agent/runtime/ 下的 settings.json9 处)和 config/sub_agent_models.json1 处)从备用 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