fix(pool): a Codex ChatGPT pool pane runs on the login placed for it
Codex >= 0.164 hands a plain TUI (no -c override) to the CODEX_HOME's shared app-server daemon, which outlives every TUI and keeps the login it started with. A ChatGPT pool account written into a member's auth.json therefore reached no pane while their daemon still ran on the previous login (reproduced on 0.164.0: the daemon kept sending the old key, a --no-daemon TUI sent the new one). Such a pane now runs `codex --no-daemon`, only when that binary's --help lists the flag (probed once per path/size/mtime), so an older Codex still starts.
This commit is contained in:
@@ -243,6 +243,29 @@ describe("codex pool: spawn", () => {
|
||||
assert.equal(row.account, "c");
|
||||
});
|
||||
|
||||
it("runs a ChatGPT pane without the shared daemon, only when its Codex has the flag", () => {
|
||||
// The home's app-server daemon keeps the login it started with: a placed
|
||||
// login reaches only a pane that runs its own app server.
|
||||
const fakeCodex = (name, help) => {
|
||||
const file = path.join(TMP, name);
|
||||
fs.writeFileSync(file, `#!/bin/sh\necho '${help}'\n`, { mode: 0o755 });
|
||||
return file;
|
||||
};
|
||||
const prev = process.env.AGENTHUB_CODEX_BIN;
|
||||
try {
|
||||
pool.addAccount("c", { auth: AUTH("acct-c") });
|
||||
process.env.AGENTHUB_CODEX_BIN = fakeCodex("codex-new", " --no-daemon Run without");
|
||||
assert.deepEqual(pool.forSpawn(MIA).argv, ["--no-daemon"]);
|
||||
process.env.AGENTHUB_CODEX_BIN = fakeCodex("codex-old", " --oss Use a local model");
|
||||
assert.deepEqual(pool.forSpawn(MIA).argv, [], "an older Codex would refuse the flag");
|
||||
process.env.AGENTHUB_CODEX_BIN = path.join(TMP, "no-such-codex");
|
||||
assert.deepEqual(pool.forSpawn(MIA).argv, []);
|
||||
} finally {
|
||||
if (prev === undefined) delete process.env.AGENTHUB_CODEX_BIN;
|
||||
else process.env.AGENTHUB_CODEX_BIN = prev;
|
||||
}
|
||||
});
|
||||
|
||||
it("never replaces a member's own login, and stays on the account their live pane uses", () => {
|
||||
pool.addAccount("c", { auth: AUTH("acct-c") });
|
||||
pool.addAccount("d", { auth: AUTH("acct-d") });
|
||||
@@ -272,7 +295,10 @@ describe("codex pool: spawn", () => {
|
||||
fs.writeFileSync(MIA_AUTH, JSON.stringify(own));
|
||||
assert.equal(pool.pickAccount(MIA), null);
|
||||
pty.spawnRun({ laneId: 50, cwd: path.join(MIA.home, "p"), tool: "codex" });
|
||||
assert.equal(JSON.parse(fs.readFileSync(MIA_AUTH, "utf8")).tokens.refresh_token, "rt-mias-seat");
|
||||
assert.equal(
|
||||
JSON.parse(fs.readFileSync(MIA_AUTH, "utf8")).tokens.refresh_token,
|
||||
"rt-mias-seat"
|
||||
);
|
||||
});
|
||||
|
||||
it("copies the newest auth.json back into the pool", () => {
|
||||
|
||||
Reference in New Issue
Block a user