跳转到内容

仓库脚本

仓库脚本是你按仓库配置的 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 install
cp "$CC_ROOT_PATH/.env" .env
pnpm run build
  • 设置脚本以非零状态退出(或超过 5 分钟超时)会让该空间的预配失败:空间 会显示失败状态并提供重试,同时记录该次运行的输出尾部。重试会从干净的工作树 开始预配,并再次运行该脚本——编写设置脚本时,要保证在安装只完成一部分之后 重新运行仍然可用(包管理器本身就是这样做的)。
  • 归档脚本是尽力而为:失败(或 2 分钟超时)会被记录,但绝不会阻止 删除。归档会在无人能回答提示的 GC 路径上运行(空间被删除、PR 被合并、 计划清理)。

设置只在全新的工作树上运行:把智能体重新派发到一个已经热起来的空间会复用 现有的检出,不会重复付出安装的代价。

每一次执行都会记录其状态、耗时、退出码和一段有上限的输出尾部,可在同一个设置 对话框的“最近运行”下查看(repos.watchScriptRuns 订阅会实时推送它)。

这些脚本是由服务器执行的 shell,因此只有工作区管理员可以编写,并受 processSpawn 操作类别的护栏保护——与其他所有派生进程的操作共用的同一套 护栏网。