





















@@ -12,7 +12,9 @@ import {
1212listRegisteredPluginAgentPromptGuidanceMock,
1313loadCompactHooksHarness,
1414maybeCompactAgentHarnessSessionMock,
15+resolveAgentHarnessPolicyMock,
1516registerProviderStreamForModelMock,
17+resolveContextWindowInfoMock,
1618resolveContextEngineMock,
1719resolveEmbeddedAgentStreamFnMock,
1820resolveMemorySearchConfigMock,
@@ -441,6 +443,115 @@ describe("compactEmbeddedPiSessionDirect hooks", () => {
441443}
442444});
443445446+it("routes OpenAI compaction through the selected Codex runtime provider before auth", async () => {
447+resolveAgentHarnessPolicyMock.mockReturnValue({ runtime: "codex" });
448+resolveModelMock.mockImplementation((provider = "openai", modelId = "fake") => ({
449+model: { provider, api: "responses", id: modelId, input: [] },
450+error: null,
451+authStorage: { setRuntimeApiKey: vi.fn() },
452+modelRegistry: {},
453+}));
454+455+const result = await compactEmbeddedPiSessionDirect({
456+sessionId: "session-1",
457+sessionKey: TEST_SESSION_KEY,
458+sessionFile: "/tmp/session.jsonl",
459+workspaceDir: "/tmp/workspace",
460+provider: "openai",
461+model: "gpt-5.5",
462+config: {
463+models: {
464+providers: {
465+openai: { models: [{ id: "gpt-5.5", contextWindow: 1_000_000 }] },
466+"openai-codex": { models: [{ id: "gpt-5.5", contextWindow: 350_000 }] },
467+},
468+},
469+auth: {
470+order: {
471+"openai-codex": ["openai-codex:work"],
472+},
473+},
474+agents: { defaults: { embeddedHarness: { runtime: "codex" } } },
475+} as never,
476+});
477+478+expect(result.ok).toBe(true);
479+expect(mockCallArg(resolveModelMock)).toBe("openai-codex");
480+expect(mockCallArg(resolveModelMock, 0, 1)).toBe("gpt-5.5");
481+});
482+483+it("preserves direct OpenAI API-key compaction when no Codex auth is configured", async () => {
484+resolveAgentHarnessPolicyMock.mockReturnValue({ runtime: "codex" });
485+resolveModelMock.mockImplementation((provider = "openai", modelId = "fake") => ({
486+model: { provider, api: "responses", id: modelId, input: [] },
487+error: null,
488+authStorage: { setRuntimeApiKey: vi.fn() },
489+modelRegistry: {},
490+}));
491+492+const result = await compactEmbeddedPiSessionDirect({
493+sessionId: "session-1",
494+sessionKey: TEST_SESSION_KEY,
495+sessionFile: "/tmp/session.jsonl",
496+workspaceDir: "/tmp/workspace",
497+provider: "openai",
498+model: "gpt-5.5",
499+config: {
500+models: {
501+providers: {
502+openai: { models: [{ id: "gpt-5.5", contextWindow: 1_000_000 }] },
503+},
504+},
505+agents: { defaults: { embeddedHarness: { runtime: "codex" } } },
506+} as never,
507+});
508+509+expect(result.ok).toBe(true);
510+expect(mockCallArg(resolveModelMock)).toBe("openai");
511+expect(mockCallArg(resolveModelMock, 0, 1)).toBe("gpt-5.5");
512+});
513+514+it("uses the persisted Codex runtime for compaction context windows", async () => {
515+resolveAgentHarnessPolicyMock.mockReturnValue({ runtime: "pi" });
516+resolveModelMock.mockImplementation((provider = "openai", modelId = "fake") => ({
517+model: { provider, api: "responses", id: modelId, input: [], contextWindow: 1_000_000 },
518+error: null,
519+authStorage: { setRuntimeApiKey: vi.fn() },
520+modelRegistry: {},
521+}));
522+523+const result = await compactEmbeddedPiSessionDirect({
524+sessionId: "session-1",
525+sessionKey: TEST_SESSION_KEY,
526+sessionFile: "/tmp/session.jsonl",
527+workspaceDir: "/tmp/workspace",
528+provider: "openai",
529+model: "gpt-5.5",
530+agentHarnessId: "codex",
531+config: {
532+models: {
533+providers: {
534+openai: { models: [{ id: "gpt-5.5", contextWindow: 1_000_000 }] },
535+"openai-codex": { models: [{ id: "gpt-5.5", contextWindow: 350_000 }] },
536+},
537+},
538+auth: {
539+order: {
540+"openai-codex": ["openai-codex:work"],
541+},
542+},
543+agents: { defaults: { embeddedHarness: { runtime: "pi" } } },
544+} as never,
545+});
546+547+expect(result.ok).toBe(true);
548+expect(mockCallArg(resolveModelMock)).toBe("openai-codex");
549+expectRecordFields(mockCallArg(resolveContextWindowInfoMock), {
550+provider: "openai-codex",
551+modelId: "gpt-5.5",
552+});
553+});
554+444555it("keeps compaction fallback selection ephemeral", async () => {
445556resolveModelMock.mockImplementation((provider = "openai", modelId = "fake") => ({
446557model: { provider, api: "responses", id: modelId, input: [] },
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。