





















@@ -913,6 +913,88 @@ describe("CLI attempt execution", () => {
913913});
914914});
915915916+it("forwards user-pinned OpenAI API-key backup profiles to Codex harness runs", async () => {
917+const { clearAgentHarnesses, registerAgentHarness } = await import("../harness/registry.js");
918+const sessionKey = "agent:main:direct:openai-codex-api-key";
919+const sessionEntry: SessionEntry = {
920+sessionId: "openclaw-session-openai-codex-api-key",
921+updatedAt: Date.now(),
922+authProfileOverride: "openai:backup",
923+authProfileOverrideSource: "user",
924+};
925+const sessionStore: Record<string, SessionEntry> = { [sessionKey]: sessionEntry };
926+await fs.writeFile(storePath, JSON.stringify(sessionStore, null, 2), "utf-8");
927+await fs.writeFile(
928+path.join(tmpDir, "auth-profiles.json"),
929+JSON.stringify(
930+{
931+version: 1,
932+profiles: {
933+"openai:backup": {
934+type: "api_key",
935+provider: "openai",
936+key: "sk-test",
937+},
938+},
939+},
940+null,
941+2,
942+),
943+"utf-8",
944+);
945+clearAgentHarnesses();
946+registerAgentHarness({
947+id: "codex",
948+label: "Codex",
949+supports: () => ({ supported: true, priority: 100 }),
950+runAttempt: vi.fn(),
951+});
952+runEmbeddedPiAgentMock.mockResolvedValueOnce({
953+meta: { durationMs: 1 },
954+} satisfies EmbeddedPiRunResult);
955+956+try {
957+await runAgentAttempt({
958+providerOverride: "openai",
959+originalProvider: "openai",
960+modelOverride: "gpt-5.4",
961+cfg: {} as OpenClawConfig,
962+ sessionEntry,
963+sessionId: sessionEntry.sessionId,
964+ sessionKey,
965+sessionAgentId: "main",
966+sessionFile: path.join(tmpDir, "session.jsonl"),
967+workspaceDir: tmpDir,
968+body: "use backup auth",
969+isFallbackRetry: false,
970+resolvedThinkLevel: "medium",
971+timeoutMs: 1_000,
972+runId: "run-openai-codex-api-key-backup",
973+opts: { senderIsOwner: false } as Parameters<typeof runAgentAttempt>[0]["opts"],
974+runContext: {} as Parameters<typeof runAgentAttempt>[0]["runContext"],
975+spawnedBy: undefined,
976+messageChannel: undefined,
977+skillsSnapshot: undefined,
978+resolvedVerboseLevel: undefined,
979+agentDir: tmpDir,
980+onAgentEvent: vi.fn(),
981+authProfileProvider: "openai",
982+ sessionStore,
983+ storePath,
984+sessionHasHistory: false,
985+});
986+} finally {
987+clearAgentHarnesses();
988+}
989+990+expectMockArgFields(runEmbeddedPiAgentMock, {
991+provider: "openai",
992+model: "gpt-5.4",
993+authProfileId: "openai:backup",
994+authProfileIdSource: "user",
995+});
996+});
997+916998it("keeps one-shot model runs on the raw embedded provider path", async () => {
917999const sessionKey = "agent:main:direct:model-run-raw";
9181000const sessionEntry: SessionEntry = {
@@ -1283,6 +1365,7 @@ describe("embedded attempt harness pinning", () => {
12831365});
1284136612851367it("auto-forwards OpenAI Codex auth profiles to default Codex harness runs", async () => {
1368+const { clearAgentHarnesses, registerAgentHarness } = await import("../harness/registry.js");
12861369const sessionEntry: SessionEntry = {
12871370sessionId: "codex-auth-session",
12881371updatedAt: Date.now(),
@@ -1305,35 +1388,46 @@ describe("embedded attempt harness pinning", () => {
13051388runEmbeddedPiAgentMock.mockResolvedValueOnce({
13061389meta: { durationMs: 1 },
13071390} satisfies EmbeddedPiRunResult);
1308-1309-await runAgentAttempt({
1310-providerOverride: "openai",
1311-originalProvider: "openai",
1312-modelOverride: "gpt-5.4",
1313-cfg: {} as OpenClawConfig,
1314- sessionEntry,
1315-sessionId: sessionEntry.sessionId,
1316-sessionKey: "agent:main:main",
1317-sessionAgentId: "main",
1318-sessionFile: path.join(tmpDir, "session.jsonl"),
1319-workspaceDir: tmpDir,
1320-body: "continue",
1321-isFallbackRetry: false,
1322-resolvedThinkLevel: "medium",
1323-timeoutMs: 1_000,
1324-runId: "run-codex-auto-auth-profile",
1325-opts: { senderIsOwner: false } as Parameters<typeof runAgentAttempt>[0]["opts"],
1326-runContext: {} as Parameters<typeof runAgentAttempt>[0]["runContext"],
1327-spawnedBy: undefined,
1328-messageChannel: undefined,
1329-skillsSnapshot: undefined,
1330-resolvedVerboseLevel: undefined,
1331-agentDir: tmpDir,
1332-onAgentEvent: vi.fn(),
1333-authProfileProvider: "openai",
1334-sessionHasHistory: true,
1391+clearAgentHarnesses();
1392+registerAgentHarness({
1393+id: "codex",
1394+label: "Codex",
1395+supports: () => ({ supported: true, priority: 100 }),
1396+runAttempt: vi.fn(),
13351397});
133613981399+try {
1400+await runAgentAttempt({
1401+providerOverride: "openai",
1402+originalProvider: "openai",
1403+modelOverride: "gpt-5.4",
1404+cfg: {} as OpenClawConfig,
1405+ sessionEntry,
1406+sessionId: sessionEntry.sessionId,
1407+sessionKey: "agent:main:main",
1408+sessionAgentId: "main",
1409+sessionFile: path.join(tmpDir, "session.jsonl"),
1410+workspaceDir: tmpDir,
1411+body: "continue",
1412+isFallbackRetry: false,
1413+resolvedThinkLevel: "medium",
1414+timeoutMs: 1_000,
1415+runId: "run-codex-auto-auth-profile",
1416+opts: { senderIsOwner: false } as Parameters<typeof runAgentAttempt>[0]["opts"],
1417+runContext: {} as Parameters<typeof runAgentAttempt>[0]["runContext"],
1418+spawnedBy: undefined,
1419+messageChannel: undefined,
1420+skillsSnapshot: undefined,
1421+resolvedVerboseLevel: undefined,
1422+agentDir: tmpDir,
1423+onAgentEvent: vi.fn(),
1424+authProfileProvider: "openai",
1425+sessionHasHistory: true,
1426+});
1427+} finally {
1428+clearAgentHarnesses();
1429+}
1430+13371431expectMockArgFields(runEmbeddedPiAgentMock, {
13381432agentHarnessId: undefined,
13391433authProfileId: "openai-codex:work",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。