仓库脚本
仓库脚本是你按仓库配置的 shell 脚本(设置 → 仓库 → 仓库所在行上的终端
图标),Control Center 的服务器会针对该仓库的某个空间的工作树运行它们
——也就是智能体工作的那个隔离检出,位于
<dataDir>/<workspaceId>/spaces/<spaceId>/repos/<repo>/ 下。
共有两种:
| 脚本 | 何时运行 | 用途 |
|---|---|---|
| 设置 | 为空间预配工作树之后立即运行 | 安装依赖、生成文件、复制 .env |
| 归档 | 在工作树被销毁或垃圾回收之前 | 清理工作树之外的资源(docker 网络、隧道、外部状态) |
脚本在哪里运行
标题为“脚本在哪里运行”的部分两个脚本都通过 bash -lc 运行(登录 shell,因此通过 Homebrew/nvm 安装的
工具都在 PATH 上),并以工作树作为工作目录,同时设置以下环境变量:
| 变量 | 值 |
|---|---|
CC_WORKSPACE_PATH |
工作树(脚本的 cwd) |
CC_ROOT_PATH |
已注册的源仓库——你自己的检出 |
CC_SPACE_ID |
该工作树所属的空间 |
CC_SPACE_NAME |
空间的显示名称 |
CC_REPO_NAME |
仓库的显示名称 |
例如,下面这个设置脚本会安装依赖,并引入仓库中被 git 忽略的 .env:
pnpm installcp "$CC_ROOT_PATH/.env" .envpnpm run build失败行为
标题为“失败行为”的部分- 设置脚本以非零状态退出(或超过 5 分钟超时)会让该空间的预配失败:空间 会显示失败状态并提供重试,同时记录该次运行的输出尾部。重试会从干净的工作树 开始预配,并再次运行该脚本——编写设置脚本时,要保证在安装只完成一部分之后 重新运行仍然可用(包管理器本身就是这样做的)。
- 归档脚本是尽力而为:失败(或 2 分钟超时)会被记录,但绝不会阻止 删除。归档会在无人能回答提示的 GC 路径上运行(空间被删除、PR 被合并、 计划清理)。
设置只在全新的工作树上运行:把智能体重新派发到一个已经热起来的空间会复用 现有的检出,不会重复付出安装的代价。
运行历史
标题为“运行历史”的部分每一次执行都会记录其状态、耗时、退出码和一段有上限的输出尾部,可在同一个设置
对话框的“最近运行”下查看(repos.watchScriptRuns 订阅会实时推送它)。
这些脚本是由服务器执行的 shell,因此只有工作区管理员可以编写,并受
processSpawn 操作类别的护栏保护——与其他所有派生进程的操作共用的同一套
护栏网。