mirror of
https://github.com/tradecatlabs/vibe-coding-cn.git
synced 2026-08-13 19:08:05 +00:00
feat: codex config installer with rollback
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
# Codex 全局安全默认指令
|
||||
|
||||
你是用户本地 Codex Agent。默认以安全、可验证、可回滚的方式协助用户完成软件工程任务。
|
||||
|
||||
## 工作原则
|
||||
|
||||
- 先读当前目录与任务上下文,再修改文件。
|
||||
- 优先复用成熟方案、官方能力、稳定工具和项目既有模式。
|
||||
- 不硬编码密钥、Token、Cookie、私钥或个人敏感信息。
|
||||
- 不执行不可逆或破坏性操作,除非用户明确要求并已经说明风险。
|
||||
- 修改前尽量缩小影响范围,修改后给出验证命令和结果。
|
||||
- 涉及 Git 时,先查看 `git status --short --branch`,避免混入无关改动。
|
||||
|
||||
## 质量门禁
|
||||
|
||||
- 能用测试、lint、类型、schema、脚本或 CI 验证的规则,不只写在提示词里。
|
||||
- 不把“看起来对”当成完成;优先给出可复现命令、diff、测试输出和剩余风险。
|
||||
- 遇到不确定事实时,明确说明不确定性和查证路径。
|
||||
|
||||
## 输出风格
|
||||
|
||||
- 默认使用中文。
|
||||
- 简洁直接,先给结论,再给关键证据和下一步。
|
||||
- 对人看的文档、注释和说明使用中文;代码符号保持英文且语义清楚。
|
||||
@@ -1,49 +1,106 @@
|
||||
# `tools/config/.codex/` 用法说明
|
||||
# Codex CLI 配置基线
|
||||
|
||||
本目录用于在仓库内版本化管理 Codex CLI 的“全局配置基线”,便于多人同步、审阅与回滚。
|
||||
本目录把 Codex CLI 全局配置做成可审阅、可安装、可回滚的公开基线。
|
||||
|
||||
你只需要把本目录里的两个文件复制到 **Codex Home**(默认 `~/.codex/`)即可生效:
|
||||
## 字多不看
|
||||
|
||||
- `tools/config/.codex/config.toml` → `~/.codex/config.toml`
|
||||
- `tools/config/.codex/AGENTS.md` → `~/.codex/AGENTS.md`
|
||||
- 默认安装 `safe` 配置:不写入本机路径,不启用 `danger-full-access`,不设置 `approval_policy = "never"`。
|
||||
- 需要全自动高权限体验时,显式安装 `power` 配置。
|
||||
- 安装前会备份用户现有 `~/.codex/config.toml` 和 `~/.codex/AGENTS.md`。
|
||||
- 每次安装都会生成恢复脚本,误覆盖后可以一键恢复。
|
||||
- 支持通过 `CODEX_HOME` 指定 Codex Home。
|
||||
|
||||
## 1. 一键安装(推荐)
|
||||
## 一键安装
|
||||
|
||||
在仓库根目录执行:
|
||||
安全默认版:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.codex
|
||||
cp -f tools/config/.codex/config.toml ~/.codex/config.toml
|
||||
cp -f tools/config/.codex/AGENTS.md ~/.codex/AGENTS.md
|
||||
curl -fsSL https://raw.githubusercontent.com/tukuaiai/vibe-coding-cn/develop/tools/config/.codex/install.sh | bash
|
||||
```
|
||||
|
||||
## 2. 路径示例
|
||||
高权限版:
|
||||
|
||||
### Linux / WSL(实际生效位置)
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/tukuaiai/vibe-coding-cn/develop/tools/config/.codex/install.sh | bash -s -- --profile power
|
||||
```
|
||||
|
||||
- `\\wsl.localhost\\Ubuntu\\home\\<你的用户名>\\.codex\\config.toml`
|
||||
- `\\wsl.localhost\\Ubuntu\\home\\<你的用户名>\\.codex\\AGENTS.md`
|
||||
指定 Codex Home:
|
||||
|
||||
(在 WSL 内对应:`~/.codex/config.toml` 与 `~/.codex/AGENTS.md`)
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/tukuaiai/vibe-coding-cn/develop/tools/config/.codex/install.sh | CODEX_HOME="$HOME/.codex" bash
|
||||
```
|
||||
|
||||
### Windows(原生)
|
||||
## 恢复
|
||||
|
||||
Codex Home 默认是 `~/.codex/`;在 Windows 上 `~` 通常展开为用户目录:
|
||||
恢复最近一次安装前的配置:
|
||||
|
||||
- `C:\\Users\\<你的用户名>\\.codex\\config.toml`
|
||||
- `C:\\Users\\<你的用户名>\\.codex\\AGENTS.md`
|
||||
```bash
|
||||
bash ~/.codex/backups/vibe-coding-cn/LATEST/restore.sh
|
||||
```
|
||||
|
||||
如果你自己的 Codex Home 被改到了其它位置(例如 `C:\\Users\\<你的用户名>\\.config\\...`),请把两份文件复制到你实际的 Codex Home。
|
||||
也可以恢复某一次具体备份:
|
||||
|
||||
## 3. 配置优先级(重要)
|
||||
```bash
|
||||
bash ~/.codex/backups/vibe-coding-cn/YYYYMMDD-HHMMSS/restore.sh
|
||||
```
|
||||
|
||||
- **全局配置**:`~/.codex/config.toml`
|
||||
- **项目覆盖**:在项目根目录创建 `.codex/config.toml`(仅对当前项目生效)
|
||||
备份目录包含:
|
||||
|
||||
如果你想把某些配置“只对本仓库生效”,建议使用项目覆盖(`.codex/config.toml`),全局配置只保留你长期通用的习惯与安全策略。
|
||||
- `config.toml`:安装前的用户原配置;如果原文件不存在,会写入 `.missing-config.toml` 标记。
|
||||
- `AGENTS.md`:安装前的用户原指令;如果原文件不存在,会写入 `.missing-AGENTS.md` 标记。
|
||||
- `MANIFEST.txt`:安装来源、profile、目标路径和恢复脚本位置。
|
||||
- `restore.sh`:恢复脚本。
|
||||
|
||||
## 4. 参考(官方文档)
|
||||
## 文件说明
|
||||
|
||||
- Configuration / Config file:说明 `~/.codex/config.toml` 与项目级 `.codex/config.toml` 的优先级
|
||||
- Custom instructions / Global instructions:说明 `~/.codex/AGENTS.md` 的全局指令加载方式
|
||||
| 文件 | 用途 |
|
||||
|:---|:---|
|
||||
| `install.sh` | 一键安装、备份和恢复入口 |
|
||||
| `config.toml` | 公开安全默认配置 |
|
||||
| `config.power.toml` | 高权限配置,显式 `--profile power` 才安装 |
|
||||
| `AGENTS.safe.md` | 公开安全默认全局指令 |
|
||||
| `AGENTS.md` | 高强度个人工作流指令,配合 `power` profile 使用 |
|
||||
|
||||
## 安全边界
|
||||
|
||||
`safe` profile 适合新手和公共分发:
|
||||
|
||||
- 不自动信任任何本机项目路径。
|
||||
- 不放开全盘读写和命令执行权限。
|
||||
- 不关闭审批确认。
|
||||
|
||||
`power` profile 只适合完全可信的本地环境:
|
||||
|
||||
- 会写入 `sandbox_mode = "danger-full-access"`。
|
||||
- 会写入 `approval_policy = "never"`。
|
||||
- 会安装更强势的全局 `AGENTS.md`。
|
||||
|
||||
如果你不确定该选哪个,使用默认 `safe`。
|
||||
|
||||
## 本地仓库内安装
|
||||
|
||||
如果你已经 clone 本仓库,也可以在仓库根目录执行:
|
||||
|
||||
```bash
|
||||
bash tools/config/.codex/install.sh
|
||||
```
|
||||
|
||||
安装高权限版:
|
||||
|
||||
```bash
|
||||
bash tools/config/.codex/install.sh --profile power
|
||||
```
|
||||
|
||||
## 路径示例
|
||||
|
||||
Linux / WSL:
|
||||
|
||||
- `~/.codex/config.toml`
|
||||
- `~/.codex/AGENTS.md`
|
||||
|
||||
Windows 原生:
|
||||
|
||||
- `C:\Users\<你的用户名>\.codex\config.toml`
|
||||
- `C:\Users\<你的用户名>\.codex\AGENTS.md`
|
||||
|
||||
如果你自己的 Codex Home 被改到了其它位置,请通过 `CODEX_HOME` 或 `--codex-home` 指定。
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
# ==================== Codex CLI 高权限基线 ====================
|
||||
#
|
||||
# 这个 profile 面向完全可信的本地机器和仓库:
|
||||
# - sandbox_mode = "danger-full-access" 会放开文件系统和命令执行能力。
|
||||
# - approval_policy = "never" 会减少确认弹窗,让 Agent 自动推进。
|
||||
# - 不包含任何本机 projects 信任路径;请按需在本地 config.toml 中追加。
|
||||
#
|
||||
# 安装方式:
|
||||
# bash install.sh --profile power
|
||||
|
||||
model = "gpt-5.5"
|
||||
model_provider = "openai-http"
|
||||
model_reasoning_effort = "xhigh"
|
||||
|
||||
sandbox_mode = "danger-full-access"
|
||||
approval_policy = "never"
|
||||
|
||||
web_search = "live"
|
||||
personality = "pragmatic"
|
||||
|
||||
startup_timeout_ms = 20000
|
||||
|
||||
[tui]
|
||||
notifications = true
|
||||
|
||||
[tui.model_availability_nux]
|
||||
"gpt-5.5" = 4
|
||||
|
||||
[features]
|
||||
multi_agent = true
|
||||
responses_websockets = false
|
||||
responses_websockets_v2 = false
|
||||
|
||||
[model_providers.openai-http]
|
||||
name = "OpenAI"
|
||||
wire_api = "responses"
|
||||
requires_openai_auth = true
|
||||
supports_websockets = false
|
||||
|
||||
[notice]
|
||||
hide_gpt5_1_migration_prompt = true
|
||||
"hide_gpt-5.1-codex-max_migration_prompt" = true
|
||||
hide_rate_limit_model_nudge = true
|
||||
|
||||
# 本地可信项目示例:
|
||||
# [projects."/absolute/path/to/your/project"]
|
||||
# trust_level = "trusted"
|
||||
+11
-197
@@ -1,223 +1,37 @@
|
||||
# ==================== 基础配置 ====================
|
||||
# ==================== Codex CLI 安全默认基线 ====================
|
||||
#
|
||||
# 这是公开分发默认配置:
|
||||
# - 不包含本机 projects 信任路径。
|
||||
# - 不设置 danger-full-access。
|
||||
# - 不设置 approval_policy = "never"。
|
||||
# - 适合新用户先跑通 Codex CLI,再按项目需要逐步放开权限。
|
||||
#
|
||||
# 需要更高权限时,请显式安装 config.power.toml:
|
||||
# bash install.sh --profile power
|
||||
|
||||
# 模型:
|
||||
# - 这里填写 Codex CLI 支持的模型名(字符串)。
|
||||
# - 建议写成你常用的默认模型,临时切换用命令行 `-m` 覆盖更合适。
|
||||
# - 经验上:`*-codex` 更偏“写代码/改代码”,非 `*-codex` 更偏通用对话(以你实际使用体验为准)。
|
||||
model = "gpt-5.5"
|
||||
model_provider = "openai-http"
|
||||
|
||||
# 推理强度(思考深度):
|
||||
# - low → 更快,适合“明确指令 + 小改动”
|
||||
# - medium → 均衡,适合多数日常任务
|
||||
# - high → 更深,适合复杂重构/疑难排障
|
||||
# - xhigh → 最深,适合架构级设计/大范围推理(可能更慢)
|
||||
# 注意:
|
||||
# - 不同模型对选项支持范围可能不同;遇到报错优先降一档再试。
|
||||
model_reasoning_effort = "xhigh"
|
||||
|
||||
# 运行策略
|
||||
# sandbox_mode:
|
||||
# - 用来约束/放开文件系统、命令执行等能力(不同版本 Codex/运行器实现可能略有差异)。
|
||||
# - `danger-full-access` 表示最大权限:可读写任意路径、可执行任意命令。
|
||||
# - 仅在你明确知道自己在做什么、并且仓库/机器可信时使用。
|
||||
sandbox_mode = "danger-full-access"
|
||||
|
||||
# approval_policy:
|
||||
# - 控制是否需要用户确认(例如写文件、跑命令等高影响操作)。
|
||||
# - `never` 表示不再弹确认,自动执行。
|
||||
# - 风险提示:如果你经常在不熟的目录/不可信脚本环境里使用,建议改成更保守的策略。
|
||||
approval_policy = "never"
|
||||
|
||||
# web_search:
|
||||
# - 控制联网搜索能力策略(以你安装的 Codex CLI 版本为准)。
|
||||
# - `live` 通常表示允许实时联网搜索(适用于需要最新信息的任务)。
|
||||
model_reasoning_effort = "medium"
|
||||
web_search = "live"
|
||||
|
||||
# 交互风格
|
||||
# personality:
|
||||
# - 影响输出风格(例如更务实/更解释型等)。
|
||||
personality = "pragmatic"
|
||||
|
||||
# 指令来源(可选,与 AGENTS.md 二选一)
|
||||
# experimental_instructions_file:
|
||||
# - 指定一份“系统指令/长期提示词”文件路径。
|
||||
# - 如果项目内已经用 `AGENTS.md` 管理行为准则,通常不需要再额外打开。
|
||||
# experimental_instructions_file = "/home/lenovo/.codex/custom-instructions.md"
|
||||
|
||||
# ==================== MCP 默认配置 ====================
|
||||
# startup_timeout_ms:
|
||||
# - MCP(Model Context Protocol)服务器启动/握手的超时时间(毫秒)。
|
||||
# - 如果你启用了某些 MCP(npx/node 启动慢),可以把这个值适当调大。
|
||||
startup_timeout_ms = 20000
|
||||
|
||||
# ==================== UI 与提示 ====================
|
||||
|
||||
[tui]
|
||||
# 是否在 TUI(终端 UI)里启用通知提示。
|
||||
notifications = true
|
||||
|
||||
[tui.model_availability_nux]
|
||||
"gpt-5.5" = 4
|
||||
|
||||
[features]
|
||||
# Codex 里的 “subagent” 基本就是 Multi-agents(多代理/子线程)功能:主代理会按需 spawn 子代理并行干活,最后汇总结果。
|
||||
multi_agent = true
|
||||
# 禁用 Responses WebSocket 传输,只走 HTTPS/HTTP Responses。
|
||||
responses_websockets = false
|
||||
responses_websockets_v2 = false
|
||||
|
||||
[model_providers.openai-http]
|
||||
# 自定义 provider 不能覆盖内置 openai,所以用新 ID 复制 OpenAI/Responses 语义并关闭 WebSocket 能力。
|
||||
name = "OpenAI"
|
||||
wire_api = "responses"
|
||||
requires_openai_auth = true
|
||||
supports_websockets = false
|
||||
|
||||
[notice]
|
||||
# 这些开关用于隐藏某些“迁移/提示”类消息,减少噪音(仅影响 UI,不影响核心功能)。
|
||||
hide_gpt5_1_migration_prompt = true
|
||||
"hide_gpt-5.1-codex-max_migration_prompt" = true
|
||||
hide_rate_limit_model_nudge = true
|
||||
|
||||
[notice.model_migrations]
|
||||
# 模型迁移映射:
|
||||
# - 当某些老模型名不可用/被迁移时,用这里的映射做自动替换。
|
||||
# - 建议只保留你确实用得到的映射,避免未来产生“我没注意但被自动换了”的困惑。
|
||||
"gpt-5.1-codex-max" = "gpt-5.2-codex"
|
||||
"gpt-5.2" = "gpt-5.4"
|
||||
|
||||
# ==================== 本地模型 Profiles ====================
|
||||
|
||||
[profiles.ollama-gemma4]
|
||||
# WSL 内部的 Codex CLI 通过 localhost 转发调用 Win11 Ollama。
|
||||
# 该 provider 为 Codex CLI 0.125.0 内置本地 provider,默认访问 http://localhost:11434/v1。
|
||||
model = "gemma4:31b"
|
||||
model_provider = "ollama"
|
||||
model_reasoning_effort = "medium"
|
||||
|
||||
[profiles.ollama-gemma4-262k]
|
||||
# 基于 gemma4:31b 的派生模型,强制 Ollama 运行上下文为模型理论上限 262144。
|
||||
# 注意:这是理论上限配置,显存/内存压力极高,Codex agent 实用性可能很差。
|
||||
model = "gemma4-31b-262k"
|
||||
model_provider = "ollama"
|
||||
model_reasoning_effort = "medium"
|
||||
|
||||
[projects."/home/lenovo/.projects/cat/tradecat"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/home/lenovo/zip/vibe-coding-cn"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/mnt/c/Users/13208"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/home/lenovo"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/home/lenovo/.projects/cat/zip/tradecat-20260324"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/mnt/c/Users/13208/Downloads"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/home/lenovo/.projects/skill"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/mnt/d/.projects/研究/tasks+任务包"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/home/lenovo/.projects/cat/tradecat-public"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/mnt/d/.projects/研究/dataset-first"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/mnt/d/.projects/研究/女娲/raw/cz-skill"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/home/lenovo/.codex"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/mnt/d/.projects/研究/币安人生"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/mnt/d/.projects/XHS-Downloader"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/home/lenovo/.projects/cat/fatecat"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/home/lenovo/.projects/cat/predictcat"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/home/lenovo/.projects/cat"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/home/lenovo/.projects/cat/catkey"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/mnt/d/.projects/研究/raw/量化交易/交易猫开发实践"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/home/lenovo/.projects/vibe-coding-cn"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[projects."/mnt/c/Users/13208/Downloads/cdda-windows-with-graphics-and-sounds-x64-2026-05-02-1743"]
|
||||
trust_level = "trusted"
|
||||
|
||||
# ==================== MCP Servers(示例,默认关闭) ====================
|
||||
# 说明:
|
||||
# - 下面这些块默认都注释掉,作为“可复制的模板”。
|
||||
# - 启用方式:取消注释对应的 `[mcp_servers."name"]` 段,并按需修改 `command/args/cwd`。
|
||||
# - 维护原则:宁可少开,按需启用;避免“全开导致启动慢/不稳定/难排障”。
|
||||
|
||||
# Context7 - 最新官方文档 MCP
|
||||
# [mcp_servers."context7"]
|
||||
# command = "npx"
|
||||
# args = ["-y", "@upstash/context7-mcp@latest"]
|
||||
# startup_timeout_ms = 20000
|
||||
|
||||
# # Completion Notifier - 完成声音提示
|
||||
# [mcp_servers."completion-notifier"]
|
||||
# command = "node"
|
||||
# args = ["/home/lenovo/.codex/mcp-servers/completion-notifier/#index.js"]
|
||||
# startup_timeout_ms = 20000
|
||||
|
||||
# chrome-devtools
|
||||
# [mcp_servers."chrome-devtools"]
|
||||
# command = "npx"
|
||||
# args = ["-y", "chrome-devtools-mcp@latest"]
|
||||
# startup_timeout_ms = 20000
|
||||
|
||||
# [mcp_servers."playwright"]
|
||||
# command = "npx"
|
||||
# args = ["-y", "@playwright/mcp@latest"]
|
||||
# startup_timeout_ms = 20000
|
||||
|
||||
# [mcp_servers."puppeteer"]
|
||||
# command = "npx"
|
||||
# args = ["-y", "puppeteer-mcp-server"]
|
||||
# startup_timeout_ms = 20000
|
||||
|
||||
# [mcp_servers."n8n"]
|
||||
# command = "npx"
|
||||
# args = ["-y", "n8n-mcp@latest"]
|
||||
# startup_timeout_ms = 20000
|
||||
|
||||
# [mcp_servers."maverick"]
|
||||
# command = "npx"
|
||||
# args = ["-y", "mcp-remote", "http://localhost:8003/sse/"]
|
||||
# cwd = "/home/lenovo/maverick-mcp"
|
||||
# startup_timeout_ms = 20000
|
||||
|
||||
# [mcp_servers."happy"]
|
||||
# command = "happy"
|
||||
# args = ["codex"]
|
||||
# startup_timeout_ms = 20000
|
||||
|
||||
# Augment - 代码库检索 MCP
|
||||
# [mcp_servers."auggie-mcp"]
|
||||
# command = "auggie"
|
||||
# args = ["-w", "/mnt/c/Users/lenovo", "--mcp"]
|
||||
# startup_timeout_ms = 200000
|
||||
|
||||
Executable
+206
@@ -0,0 +1,206 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
RAW_BASE_DEFAULT="https://raw.githubusercontent.com/tukuaiai/vibe-coding-cn/develop/tools/config/.codex"
|
||||
RAW_BASE="${VIBE_CODING_CODEX_RAW_BASE:-$RAW_BASE_DEFAULT}"
|
||||
CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
|
||||
PROFILE="safe"
|
||||
DRY_RUN="0"
|
||||
RESTORE_LATEST="0"
|
||||
|
||||
usage() {
|
||||
cat <<'USAGE'
|
||||
Install vibe-coding-cn Codex CLI config with backup and rollback.
|
||||
|
||||
Usage:
|
||||
install.sh [--profile safe|power] [--codex-home PATH] [--restore-latest] [--dry-run]
|
||||
|
||||
Profiles:
|
||||
safe Public default. No danger-full-access, no approval_policy=never.
|
||||
power High-permission local profile. Requires a fully trusted machine/repo.
|
||||
|
||||
Environment:
|
||||
CODEX_HOME Target Codex home. Default: ~/.codex
|
||||
VIBE_CODING_CODEX_RAW_BASE Source base URL or local directory for assets.
|
||||
|
||||
Examples:
|
||||
curl -fsSL https://raw.githubusercontent.com/tukuaiai/vibe-coding-cn/develop/tools/config/.codex/install.sh | bash
|
||||
curl -fsSL https://raw.githubusercontent.com/tukuaiai/vibe-coding-cn/develop/tools/config/.codex/install.sh | bash -s -- --profile power
|
||||
bash ~/.codex/backups/vibe-coding-cn/LATEST/restore.sh
|
||||
USAGE
|
||||
}
|
||||
|
||||
log() {
|
||||
printf '[vibe-coding-cn codex] %s\n' "$*"
|
||||
}
|
||||
|
||||
die() {
|
||||
printf '[vibe-coding-cn codex] ERROR: %s\n' "$*" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
while [ "$#" -gt 0 ]; do
|
||||
case "$1" in
|
||||
--profile)
|
||||
[ "$#" -ge 2 ] || die "--profile requires safe or power"
|
||||
PROFILE="$2"
|
||||
shift 2
|
||||
;;
|
||||
--codex-home)
|
||||
[ "$#" -ge 2 ] || die "--codex-home requires a path"
|
||||
CODEX_HOME="$2"
|
||||
shift 2
|
||||
;;
|
||||
--restore-latest)
|
||||
RESTORE_LATEST="1"
|
||||
shift
|
||||
;;
|
||||
--dry-run)
|
||||
DRY_RUN="1"
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
die "unknown argument: $1"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
case "$PROFILE" in
|
||||
safe)
|
||||
SOURCE_CONFIG="config.toml"
|
||||
SOURCE_AGENTS="AGENTS.safe.md"
|
||||
;;
|
||||
power)
|
||||
SOURCE_CONFIG="config.power.toml"
|
||||
SOURCE_AGENTS="AGENTS.md"
|
||||
;;
|
||||
*)
|
||||
die "unsupported profile: $PROFILE"
|
||||
;;
|
||||
esac
|
||||
|
||||
CODEX_HOME="${CODEX_HOME/#\~/$HOME}"
|
||||
BACKUP_ROOT="$CODEX_HOME/backups/vibe-coding-cn"
|
||||
LATEST_LINK="$BACKUP_ROOT/LATEST"
|
||||
|
||||
restore_latest() {
|
||||
[ -e "$LATEST_LINK/restore.sh" ] || die "missing latest restore script: $LATEST_LINK/restore.sh"
|
||||
log "restoring latest backup from $LATEST_LINK"
|
||||
bash "$LATEST_LINK/restore.sh"
|
||||
}
|
||||
|
||||
if [ "$RESTORE_LATEST" = "1" ]; then
|
||||
restore_latest
|
||||
exit 0
|
||||
fi
|
||||
|
||||
fetch_asset() {
|
||||
local name="$1"
|
||||
local out="$2"
|
||||
|
||||
if [ -d "$RAW_BASE" ]; then
|
||||
cp "$RAW_BASE/$name" "$out"
|
||||
else
|
||||
command -v curl >/dev/null 2>&1 || die "curl is required when RAW_BASE is remote"
|
||||
curl -fsSL "$RAW_BASE/$name" -o "$out"
|
||||
fi
|
||||
}
|
||||
|
||||
backup_one() {
|
||||
local name="$1"
|
||||
local src="$CODEX_HOME/$name"
|
||||
local dst="$BACKUP_DIR/$name"
|
||||
|
||||
if [ -f "$src" ]; then
|
||||
cp "$src" "$dst"
|
||||
else
|
||||
: > "$BACKUP_DIR/.missing-$name"
|
||||
fi
|
||||
}
|
||||
|
||||
write_restore_script() {
|
||||
local codex_home_q backup_dir_q
|
||||
printf -v codex_home_q '%q' "$CODEX_HOME"
|
||||
printf -v backup_dir_q '%q' "$BACKUP_DIR"
|
||||
|
||||
cat > "$BACKUP_DIR/restore.sh" <<RESTORE
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
CODEX_HOME=$codex_home_q
|
||||
BACKUP_DIR=$backup_dir_q
|
||||
|
||||
restore_file() {
|
||||
local name="\$1"
|
||||
mkdir -p "\$CODEX_HOME"
|
||||
if [ -f "\$BACKUP_DIR/\$name" ]; then
|
||||
cp "\$BACKUP_DIR/\$name" "\$CODEX_HOME/\$name"
|
||||
printf '[vibe-coding-cn codex] restored %s\n' "\$CODEX_HOME/\$name"
|
||||
elif [ -f "\$BACKUP_DIR/.missing-\$name" ]; then
|
||||
rm -f "\$CODEX_HOME/\$name"
|
||||
printf '[vibe-coding-cn codex] removed %s because it did not exist before install\n' "\$CODEX_HOME/\$name"
|
||||
else
|
||||
printf '[vibe-coding-cn codex] skip %s: no backup marker\n' "\$name"
|
||||
fi
|
||||
}
|
||||
|
||||
restore_file config.toml
|
||||
restore_file AGENTS.md
|
||||
RESTORE
|
||||
chmod +x "$BACKUP_DIR/restore.sh"
|
||||
}
|
||||
|
||||
install_one() {
|
||||
local src="$1"
|
||||
local name="$2"
|
||||
install -m 600 "$src" "$CODEX_HOME/$name"
|
||||
log "installed $CODEX_HOME/$name"
|
||||
}
|
||||
|
||||
TIMESTAMP="$(date +%Y%m%d-%H%M%S)"
|
||||
BACKUP_DIR="$BACKUP_ROOT/$TIMESTAMP"
|
||||
TMP_DIR="$(mktemp -d)"
|
||||
trap 'rm -rf "$TMP_DIR"' EXIT
|
||||
|
||||
log "profile=$PROFILE"
|
||||
log "source=$RAW_BASE"
|
||||
log "codex_home=$CODEX_HOME"
|
||||
|
||||
if [ "$DRY_RUN" = "1" ]; then
|
||||
log "dry run only; no files will be changed"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
mkdir -p "$CODEX_HOME" "$BACKUP_DIR"
|
||||
backup_one config.toml
|
||||
backup_one AGENTS.md
|
||||
write_restore_script
|
||||
|
||||
cat > "$BACKUP_DIR/MANIFEST.txt" <<MANIFEST
|
||||
profile=$PROFILE
|
||||
source=$RAW_BASE
|
||||
codex_home=$CODEX_HOME
|
||||
created_at=$TIMESTAMP
|
||||
restore=$BACKUP_DIR/restore.sh
|
||||
MANIFEST
|
||||
|
||||
rm -rf "$LATEST_LINK"
|
||||
if ! ln -s "$BACKUP_DIR" "$LATEST_LINK" 2>/dev/null; then
|
||||
mkdir -p "$LATEST_LINK"
|
||||
cp "$BACKUP_DIR/restore.sh" "$LATEST_LINK/restore.sh"
|
||||
printf '%s\n' "$BACKUP_DIR" > "$LATEST_LINK/BACKUP_DIR"
|
||||
fi
|
||||
|
||||
fetch_asset "$SOURCE_CONFIG" "$TMP_DIR/config.toml"
|
||||
fetch_asset "$SOURCE_AGENTS" "$TMP_DIR/AGENTS.md"
|
||||
|
||||
install_one "$TMP_DIR/config.toml" config.toml
|
||||
install_one "$TMP_DIR/AGENTS.md" AGENTS.md
|
||||
|
||||
log "backup saved: $BACKUP_DIR"
|
||||
log "restore command: bash $BACKUP_DIR/restore.sh"
|
||||
log "latest restore command: bash $LATEST_LINK/restore.sh"
|
||||
@@ -7,6 +7,8 @@
|
||||
- 配置文件必须是可公开审查的模板或基线,不得包含真实密钥。
|
||||
- 本机专用配置应放在用户本地目录,不直接提交到仓库。
|
||||
- 修改 Codex 配置时,同步更新 `tools/config/.codex/README.md` 和相关 getting-started 文档。
|
||||
- 公开默认配置不得包含本机 `projects` 信任路径;高权限配置必须显式标注风险并通过独立 profile 安装。
|
||||
- 一键安装脚本必须先备份用户现有配置,并提供恢复脚本。
|
||||
|
||||
## 验证
|
||||
|
||||
|
||||
@@ -6,4 +6,4 @@
|
||||
|
||||
- 配置位置:`tools/config/.codex/`
|
||||
- 使用说明:`tools/config/.codex/README.md`
|
||||
|
||||
- 一键安装:支持安全默认配置、高权限配置、安装前备份和恢复脚本。
|
||||
|
||||
Reference in New Issue
Block a user