baa-conductor


baa-conductor / docs / runtime
im_wower  ·  2026-03-29

environment.md

  1# runtime environment
  2
  3当前只保留 `mini` 单节点变量,默认口径如下:
  4
  5- canonical local API: `http://100.71.210.78:4317`
  6- canonical local Firefox WS: `ws://100.71.210.78:4317/ws/firefox`
  7- codexd local API: `http://127.0.0.1:4319`
  8- codexd event stream: `ws://127.0.0.1:4319/v1/codexd/events`
  9- canonical public host: `https://conductor.makefile.so`
 10- local status view: `http://100.71.210.78:4318`
 11- `status-api` 默认真相源:`BAA_CONDUCTOR_LOCAL_API` -> `http://100.71.210.78:4317/v1/system/state`
 12- `conductor` upstream/public API base 的 canonical 变量名是 `BAA_CONDUCTOR_PUBLIC_API_BASE`
 13- legacy 变量名 `BAA_CONTROL_API_BASE` 只剩两个保留点:`conductor` 把它当兼容别名,`status-api` 只在手工兼容场景下回退读取
 14
 15## 共享变量
 16
 17- `BAA_SHARED_TOKEN`
 18- `BAA_RUNS_DIR`
 19- `BAA_WORKTREES_DIR`
 20- `BAA_LOGS_DIR`
 21- `BAA_TMP_DIR`
 22- `BAA_STATE_DIR`
 23
 24说明:
 25
 26- `codexd` 独立安装时不要求 `BAA_SHARED_TOKEN`
 27
 28## conductor public API 变量
 29
 30- `BAA_CONDUCTOR_PUBLIC_API_BASE`
 31- `BAA_CONTROL_API_BASE`
 32
 33说明:
 34
 35- `BAA_CONDUCTOR_PUBLIC_API_BASE` 是 canonical 配置名,`BAA_CONTROL_API_BASE` 是 legacy 兼容别名
 36- 如果两个 env 同时存在,`BAA_CONDUCTOR_PUBLIC_API_BASE` 优先
 37- launchd 安装脚本会把这两个名字都写给 `conductor` 安装副本,避免新旧副本/脚本混跑时失配
 38- `status-api` 现在会优先读取 `BAA_CONDUCTOR_LOCAL_API`,只有手工启动或旧配置缺少该值时才回退到 `BAA_CONTROL_API_BASE`
 39- mini 默认兼容值仍是 `https://conductor.makefile.so`
 40
 41## 可选 D1 同步变量
 42
 43- `D1_ACCOUNT_ID`
 44- `D1_DATABASE_ID`
 45- `CLOUDFLARE_API_TOKEN`
 46
 47说明:
 48
 49- 这组三元组只对 `conductor` 生效,用于启用 artifact D1 sync worker
 50- 三个值必须同时存在;只配其中一部分时,launchd 安装脚本会直接报错
 51- `install-launchd.sh` / `install-mini.sh` 会优先读取当前 shell env,也支持从 `~/.config/baa-conductor/runtime-secrets.env` 之类的 env 文件读取
 52- 当前正式运行面只把这组三元组写给 `conductor` 安装副本,不会写给 `codexd` / `status-api`
 53
 54## codexd 变量
 55
 56`apps/codexd` 当前识别这些变量:
 57
 58- `BAA_CODEXD_REPO_ROOT`
 59- `BAA_CODEXD_LOCAL_API_BASE`
 60- `BAA_CODEXD_EVENT_STREAM_PATH`
 61- `BAA_CODEXD_MODE`
 62- `BAA_CODEXD_LOGS_DIR`
 63- `BAA_CODEXD_STATE_DIR`
 64- `BAA_CODEXD_SERVER_ENDPOINT`
 65- `BAA_CODEXD_SERVER_STRATEGY`
 66- `BAA_CODEXD_SERVER_COMMAND`
 67- `BAA_CODEXD_SERVER_ARGS`
 68- `BAA_CODEXD_SERVER_CWD`
 69- `BAA_CODEXD_EVENT_CACHE_SIZE`
 70- `BAA_CODEXD_SMOKE_LIFETIME_MS`
 71- `BAA_CODEXD_VERSION`
 72
 73正式 launchd 运行面默认写入:
 74
 75```text
 76BAA_CODEXD_REPO_ROOT=/Users/george/code/baa-conductor
 77BAA_CODEXD_LOCAL_API_BASE=http://127.0.0.1:4319
 78BAA_CODEXD_EVENT_STREAM_PATH=/v1/codexd/events
 79BAA_CODEXD_MODE=app-server
 80BAA_CODEXD_SERVER_STRATEGY=spawn
 81BAA_CODEXD_SERVER_COMMAND=codex
 82BAA_CODEXD_SERVER_ARGS=app-server
 83BAA_CODEXD_SERVER_CWD=/Users/george/code/baa-conductor
 84BAA_CODEXD_SERVER_ENDPOINT=stdio://codex-app-server
 85BAA_CODEXD_LOGS_DIR=/Users/george/code/baa-conductor/logs/codexd
 86BAA_CODEXD_STATE_DIR=/Users/george/code/baa-conductor/state/codexd
 87```
 88
 89说明:
 90
 91- 正式运行面只支持 `app-server`
 92- 正式 API 只保留 `/healthz`、`/describe`、`/v1/codexd/status`、`/v1/codexd/sessions`、`/v1/codexd/sessions/:session_id`、`/v1/codexd/turn`、`/v1/codexd/events`
 93- 正式运行面只保留这条 `app-server` 会话链路所需变量
 94- `BAA_CODEXD_LOCAL_API_BASE` 必须保持 loopback host;当前默认是 `127.0.0.1:4319`
 95
 96## 节点变量
 97
 98```text
 99BAA_CONDUCTOR_HOST=mini
100BAA_CONDUCTOR_ROLE=primary
101BAA_NODE_ID=mini-main
102BAA_CONDUCTOR_LOCAL_API=http://100.71.210.78:4317
103BAA_CONDUCTOR_LOCAL_API_ALLOWED_HOSTS=100.71.210.78
104BAA_CODEXD_LOCAL_API_BASE=http://127.0.0.1:4319
105BAA_STATUS_API_HOST=100.71.210.78
106BAA_CONDUCTOR_PUBLIC_API_BASE=https://conductor.makefile.so
107BAA_CONTROL_API_BASE=https://conductor.makefile.so
108```
109
110最后两项现在都只写给 `conductor` 安装副本;`status-api` 的默认真相源仍然是 `BAA_CONDUCTOR_LOCAL_API=http://100.71.210.78:4317`,默认 launchd 不再额外携带这些 conductor public-api base 变量。
111
112说明:
113
114- `BAA_CODEXD_LOCAL_API_BASE` 不只是 `codexd` 自己使用,`conductor` 也通过它代理 `/v1/codex*`
115- 这个值必须保持 loopback 地址;当前正式值是 `http://127.0.0.1:4319`
116- 如果 `conductor` 进程缺这个变量,`/v1/codex` 会返回 `503 codexd_not_configured`
117
118Firefox WS 派生规则:
119
120- 不新增 `BAA_CONDUCTOR_FIREFOX_WS` 之类单独变量
121- 运行时直接从 `BAA_CONDUCTOR_LOCAL_API` 派生
122- 公式固定为 `${BAA_CONDUCTOR_LOCAL_API}` 把 scheme 从 `http` 换成 `ws`,再把 path 设为 `/ws/firefox`
123
124例如:
125
126- `http://100.71.210.78:4317` -> `ws://100.71.210.78:4317/ws/firefox`
127- `http://127.0.0.1:4317` -> `ws://127.0.0.1:4317/ws/firefox`
128
129## 最小例子
130
131```bash
132./scripts/runtime/install-launchd.sh \
133  --repo-dir /Users/george/code/baa-conductor \
134  --node mini \
135  --service conductor \
136  --service codexd \
137  --shared-token-file /Users/george/.config/baa-conductor/shared-token.txt \
138  --d1-secrets-env /Users/george/.config/baa-conductor/runtime-secrets.env \
139  --local-api-base http://100.71.210.78:4317 \
140  --local-api-allowed-hosts 100.71.210.78 \
141  --codexd-local-api-base http://127.0.0.1:4319
142```
143
144默认 mini 安装不需要显式传 `--public-api-base`;只有 `conductor` 的 upstream/public API base 不是 `https://conductor.makefile.so` 时才需要覆盖。`--control-api-base` 仍可作为 legacy 兼容别名使用;如果同一轮 CLI 同时给出新旧参数名,`--public-api-base` 优先。脚本现在也只会把这些变量写给 `conductor` 安装副本;`status-api` 默认仍然优先读取 `--local-api-base` 对应的 conductor 主接口。
145
146如果你希望 launchd 安装副本稳定带上 D1 同步配置,可以在 `runtime-secrets.env` 里补这三行:
147
148```text
149D1_ACCOUNT_ID=3cb181c015e004e4d6f81891c0d66fec
150D1_DATABASE_ID=<cloudflare-d1-database-id>
151CLOUDFLARE_API_TOKEN=<api-token>
152```
153
154如果要安装可选状态观察面,再单独执行:
155
156```bash
157./scripts/runtime/install-launchd.sh \
158  --repo-dir /Users/george/code/baa-conductor \
159  --node mini \
160  --service status-api \
161  --status-api-host 100.71.210.78
162```