Skip to content

Commit 115d8e8

Browse files
committed
Fix Windows profile guard opt-in
1 parent 7dbf9b0 commit 115d8e8

2 files changed

Lines changed: 82 additions & 17 deletions

File tree

scripts/codex.js

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,9 @@ function ensurePowerShellProfileGuard(shimDirectory) {
455455
}
456456

457457
function ensureWindowsShellShimGuards() {
458-
if (!shouldInstallWindowsBatchShimGuard()) return;
458+
const shouldInstallBatchGuard = shouldInstallWindowsBatchShimGuard();
459+
const shouldInstallProfileGuard = shouldInstallPowerShellProfileGuard();
460+
if (!shouldInstallBatchGuard && !shouldInstallProfileGuard) return;
459461
const shimDirectory = resolveWindowsShimDirectoryFromPath();
460462
if (!shimDirectory) return;
461463

@@ -464,23 +466,31 @@ function ensureWindowsShellShimGuards() {
464466

465467
const overwriteCustomShim =
466468
(process.env.CODEX_MULTI_AUTH_OVERWRITE_CUSTOM_BATCH_SHIM ?? "0").trim() === "1";
467-
const installedBatch = ensureWindowsShellShim(
468-
join(shimDirectory, "codex.bat"),
469-
buildWindowsBatchShimContent(),
470-
{ overwriteCustomShim },
471-
);
472-
const installedCmd = ensureWindowsShellShim(
473-
join(shimDirectory, "codex.cmd"),
474-
buildWindowsCmdShimContent(),
475-
{ overwriteCustomShim },
476-
);
477-
const installedPs1 = ensureWindowsShellShim(
478-
join(shimDirectory, "codex.ps1"),
479-
buildWindowsPowerShellShimContent(),
480-
{ overwriteCustomShim },
481-
);
469+
const installedBatch = shouldInstallBatchGuard
470+
? ensureWindowsShellShim(
471+
join(shimDirectory, "codex.bat"),
472+
buildWindowsBatchShimContent(),
473+
{ overwriteCustomShim },
474+
)
475+
: false;
476+
const installedCmd = shouldInstallBatchGuard
477+
? ensureWindowsShellShim(
478+
join(shimDirectory, "codex.cmd"),
479+
buildWindowsCmdShimContent(),
480+
{ overwriteCustomShim },
481+
)
482+
: false;
483+
const installedPs1 = shouldInstallBatchGuard
484+
? ensureWindowsShellShim(
485+
join(shimDirectory, "codex.ps1"),
486+
buildWindowsPowerShellShimContent(),
487+
{ overwriteCustomShim },
488+
)
489+
: false;
482490
const installedAny = installedBatch || installedCmd || installedPs1;
483-
const installedProfileGuard = ensurePowerShellProfileGuard(shimDirectory);
491+
const installedProfileGuard = shouldInstallProfileGuard
492+
? ensurePowerShellProfileGuard(shimDirectory)
493+
: false;
484494
if (installedAny || installedProfileGuard) {
485495
console.error(
486496
"codex-multi-auth: installed Windows shell guards to keep multi-auth routing after codex npm updates.",

test/codex-bin-wrapper.test.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,61 @@ describe("codex bin wrapper", () => {
389389
},
390390
);
391391

392+
it.skipIf(process.platform !== "win32")(
393+
"installs the PowerShell profile guard without requiring batch shim guards",
394+
() => {
395+
const fixtureRoot = createWrapperFixture();
396+
const fakeBin = createFakeCodexBin(fixtureRoot);
397+
const shimDir = join(fixtureRoot, "shim-bin");
398+
mkdirSync(shimDir, { recursive: true });
399+
writeFileSync(
400+
join(shimDir, "codex-multi-auth.cmd"),
401+
"@ECHO OFF\r\nREM fixture codex-multi-auth shim\r\n",
402+
"utf8",
403+
);
404+
writeFileSync(
405+
join(shimDir, "codex.cmd"),
406+
'@ECHO OFF\r\necho "%dp0%\\node_modules\\@openai\\codex\\bin\\codex.js"\r\n',
407+
"utf8",
408+
);
409+
writeFileSync(
410+
join(shimDir, "codex.ps1"),
411+
'Write-Output "$basedir/node_modules/@openai/codex/bin/codex.js"' +
412+
"\r\n",
413+
"utf8",
414+
);
415+
416+
const result = runWrapper(fixtureRoot, ["--version"], {
417+
CODEX_MULTI_AUTH_REAL_CODEX_BIN: fakeBin,
418+
CODEX_MULTI_AUTH_PWSH_PROFILE_GUARD: "1",
419+
PATH: `${shimDir}${delimiter}${process.env.PATH ?? ""}`,
420+
USERPROFILE: fixtureRoot,
421+
HOME: fixtureRoot,
422+
});
423+
expect(result.status).toBe(0);
424+
425+
expect(() => readFileSync(join(shimDir, "codex.bat"), "utf8")).toThrow();
426+
expect(readFileSync(join(shimDir, "codex.cmd"), "utf8")).toContain(
427+
"node_modules\\@openai\\codex\\bin\\codex.js",
428+
);
429+
expect(readFileSync(join(shimDir, "codex.ps1"), "utf8")).toContain(
430+
"node_modules/@openai/codex/bin/codex.js",
431+
);
432+
const pwshProfilePath = join(
433+
fixtureRoot,
434+
"Documents",
435+
"PowerShell",
436+
"Microsoft.PowerShell_profile.ps1",
437+
);
438+
expect(readFileSync(pwshProfilePath, "utf8")).toContain(
439+
"# >>> codex-multi-auth shell guard >>>",
440+
);
441+
expect(readFileSync(pwshProfilePath, "utf8")).toContain(
442+
"CodexMultiAuthShim",
443+
);
444+
},
445+
);
446+
392447
it.skipIf(process.platform !== "win32")(
393448
"prefers invocation-derived shim directory over PATH-decoy shim entries",
394449
() => {

0 commit comments

Comments
 (0)