




























@@ -1,7 +1,6 @@
11import fs from "node:fs/promises";
22import os from "node:os";
33import path from "node:path";
4-import { saveAuthProfileStore } from "openclaw/plugin-sdk/agent-runtime";
54import { afterEach, describe, expect, it } from "vitest";
65import { prepareAcpxCodexAuthConfig } from "./codex-auth-bridge.js";
76import { resolveAcpxPluginConfig } from "./config.js";
@@ -28,10 +27,6 @@ function restoreEnv(name: keyof typeof previousEnv): void {
2827}
2928}
302931-function unquoteCommandPath(command: string): string {
32-return command.replace(/^'|'$/g, "").replace(/'\\''/g, "'");
33-}
34-3530afterEach(async () => {
3631restoreEnv("CODEX_HOME");
3732restoreEnv("OPENCLAW_AGENT_DIR");
@@ -42,28 +37,10 @@ afterEach(async () => {
4237});
43384439describe("prepareAcpxCodexAuthConfig", () => {
45-it("wraps built-in Codex ACP with an isolated CODEX_HOME from canonical OpenClaw OAuth", async () => {
40+it("does not synthesize a Codex ACP auth home from canonical OpenClaw OAuth", async () => {
4641const root = await makeTempDir();
4742const agentDir = path.join(root, "agent");
4843const stateDir = path.join(root, "state");
49-saveAuthProfileStore(
50-{
51-version: 1,
52-profiles: {
53-"openai-codex:default": {
54-type: "oauth",
55-provider: "openai-codex",
56-access: "access-token",
57-refresh: "refresh-token",
58-expires: Date.now() + 60_000,
59-accountId: "acct-123",
60-idToken: "id-token",
61-},
62-},
63-},
64-agentDir,
65-{ filterExternalAuthProfiles: false },
66-);
6744process.env.OPENCLAW_AGENT_DIR = agentDir;
6845delete process.env.PI_CODING_AGENT_DIR;
6946@@ -76,44 +53,16 @@ describe("prepareAcpxCodexAuthConfig", () => {
7653 stateDir,
7754});
785579-const wrapperPath = unquoteCommandPath(resolved.agents.codex ?? "");
80-expect(wrapperPath).toBe(path.join(stateDir, "acpx", "codex-acp-wrapper.mjs"));
81-await expect(fs.access(wrapperPath)).resolves.toBeUndefined();
82-83-const bridgeRoot = path.join(agentDir, "acp-auth", "codex");
84-const bridgeDirs = await fs.readdir(bridgeRoot);
85-expect(bridgeDirs).toHaveLength(1);
86-const bridgeDir = bridgeDirs[0];
87-if (!bridgeDir) {
88-throw new Error("expected one Codex auth bridge directory");
89-}
90-const isolatedAuthPath = path.join(bridgeRoot, bridgeDir, "auth.json");
91-const copiedAuth = JSON.parse(await fs.readFile(isolatedAuthPath, "utf8")) as {
92-auth_mode?: string;
93-tokens?: Record<string, unknown>;
94-};
95-expect(copiedAuth).toEqual({
96-auth_mode: "chatgpt",
97-tokens: {
98-id_token: "id-token",
99-access_token: "access-token",
100-refresh_token: "refresh-token",
101-account_id: "acct-123",
102-},
103-last_refresh: expect.any(String),
104-});
105-expect((await fs.stat(isolatedAuthPath)).mode & 0o777).toBe(0o600);
56+expect(resolved.agents.codex).toBeUndefined();
10657await expect(
107-fs.access(path.join(agentDir, "acp-auth", "codex-source", "auth.json")),
58+fs.access(path.join(stateDir, "acpx", "codex-acp-wrapper.mjs")),
59+).rejects.toMatchObject({ code: "ENOENT" });
60+await expect(
61+fs.access(path.join(agentDir, "acp-auth", "codex", "auth.json")),
10862).rejects.toMatchObject({ code: "ENOENT" });
109-110-const wrapper = await fs.readFile(wrapperPath, "utf8");
111-expect(wrapper).toContain(`CODEX_HOME: ${JSON.stringify(path.dirname(isolatedAuthPath))}`);
112-expect(wrapper).toContain("for (const key of [])");
113-expect(wrapper).not.toContain("access-token");
11463});
11564116-it("does not copy source Codex auth when canonical OpenClaw OAuth is unavailable", async () => {
65+it("does not copy source Codex auth", async () => {
11766const root = await makeTempDir();
11867const sourceCodexHome = path.join(root, "source-codex");
11968const agentDir = path.join(root, "agent");
@@ -139,6 +88,9 @@ describe("prepareAcpxCodexAuthConfig", () => {
13988await expect(
14089fs.access(path.join(agentDir, "acp-auth", "codex-source", "auth.json")),
14190).rejects.toMatchObject({ code: "ENOENT" });
91+await expect(
92+fs.access(path.join(agentDir, "acp-auth", "codex", "auth.json")),
93+).rejects.toMatchObject({ code: "ENOENT" });
14294});
1439514496it("does not override an explicitly configured Codex agent command", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。