背景
在 PR #605(重定向 Codex 不再暴露宿主 ~/.codex + authPaths 按宿主数据根过滤)的 codex 复审中发现一个与该 PR 正交的既有缺口,此处单独记录以免遗忘。
问题
重定向 bot(sandbox + supportsReadIsolation + !wrapperCli + SESSION_DATA_DIR)会把 CLI 数据重定向到 BOT_HOME(CLAUDE_CONFIG_DIR/CODEX_HOME)。对 Seed / Relay(经 createClaudeFamilyAdapter 得 supportsReadIsolation: true):
- worker 在 adapter
spawnEnv 之后覆盖 CLAUDE_CONFIG_DIR = <BOT_HOME>/claude(worker.ts spawnEnv@7000 → override@7027,注释明写 "set AFTER spawnEnv so it overrides")。
- Relay 包(
@bytedance-relay/claude-code)的 getStoredBytedCloudApiKey() / 启动 fast-path 从 join(getClaudeConfigHomeDir(), "byted-cloud-auth.json") = $CLAUDE_CONFIG_DIR/byted-cloud-auth.json 读 SuperRelay key。
- 重定向后该路径 =
<BOT_HOME>/claude/byted-cloud-auth.json,但 provisionIsolatedBotHome 的 claude 分支只种 settings.json / .credentials.json / .claude.json,从不复制 byted-cloud-auth.json。
结果:重定向 Seed/Relay 的 SuperRelay key fast-path 在 BOT_HOME 下始终为空,登录只能靠 ~/.local/share/bytedcli 的 SSO fallback(PR #605 已确保这条 authPath 在重定向下保留)。也就是说当前登录不 broken,但 fast-path 名存实亡,且这是 master 早已存在、非 PR #605 引入。
建议
在 provisionIsolatedBotHome(或等价的每次冷启同步点)为 claude 家族且声明了 <dataDir>/byted-cloud-auth.json authPath 的适配器(Seed/Relay),把宿主 <dataDir>/byted-cloud-auth.json provision/sync 到 <BOT_HOME>/claude/byted-cloud-auth.json(类似现有 .credentials.json 的 writeCredIfChanged 每次 spawn 同步,让别处 re-login 自愈)。
需一并测清的点(所以单独做而非并进 #605):
- 同步策略(每次 spawn 覆盖 vs 首次种入)与 token 刷新方向(谁是权威副本);
- 冷启 / token 过期 / 别处重新登录 三种场景;
- 与
~/.local/share/bytedcli SSO fallback 的优先级关系。
参考
背景
在 PR #605(重定向 Codex 不再暴露宿主
~/.codex+ authPaths 按宿主数据根过滤)的 codex 复审中发现一个与该 PR 正交的既有缺口,此处单独记录以免遗忘。问题
重定向 bot(
sandbox + supportsReadIsolation + !wrapperCli + SESSION_DATA_DIR)会把 CLI 数据重定向到 BOT_HOME(CLAUDE_CONFIG_DIR/CODEX_HOME)。对 Seed / Relay(经createClaudeFamilyAdapter得supportsReadIsolation: true):spawnEnv之后覆盖CLAUDE_CONFIG_DIR = <BOT_HOME>/claude(worker.tsspawnEnv@7000 → override@7027,注释明写 "set AFTER spawnEnv so it overrides")。@bytedance-relay/claude-code)的getStoredBytedCloudApiKey()/ 启动 fast-path 从join(getClaudeConfigHomeDir(), "byted-cloud-auth.json")=$CLAUDE_CONFIG_DIR/byted-cloud-auth.json读 SuperRelay key。<BOT_HOME>/claude/byted-cloud-auth.json,但provisionIsolatedBotHome的 claude 分支只种settings.json/.credentials.json/.claude.json,从不复制byted-cloud-auth.json。结果:重定向 Seed/Relay 的 SuperRelay key fast-path 在 BOT_HOME 下始终为空,登录只能靠
~/.local/share/bytedcli的 SSO fallback(PR #605 已确保这条 authPath 在重定向下保留)。也就是说当前登录不 broken,但 fast-path 名存实亡,且这是 master 早已存在、非 PR #605 引入。建议
在
provisionIsolatedBotHome(或等价的每次冷启同步点)为 claude 家族且声明了<dataDir>/byted-cloud-auth.jsonauthPath 的适配器(Seed/Relay),把宿主<dataDir>/byted-cloud-auth.jsonprovision/sync 到<BOT_HOME>/claude/byted-cloud-auth.json(类似现有.credentials.json的writeCredIfChanged每次 spawn 同步,让别处 re-login 自愈)。需一并测清的点(所以单独做而非并进 #605):
~/.local/share/bytedcliSSO fallback 的优先级关系。参考
src/worker.tsprovisionIsolatedBotHome、src/adapters/cli/relay.ts/seed.ts的authPaths、resolveRedirectedAdapterAuthPaths(fs-policy.ts)