@@ -12,7 +12,9 @@ import {
1212 listRegisteredPluginAgentPromptGuidanceMock ,
1313 loadCompactHooksHarness ,
1414 maybeCompactAgentHarnessSessionMock ,
15+ resolveAgentHarnessPolicyMock ,
1516 registerProviderStreamForModelMock ,
17+ resolveContextWindowInfoMock ,
1618 resolveContextEngineMock ,
1719 resolveEmbeddedAgentStreamFnMock ,
1820 resolveMemorySearchConfigMock ,
@@ -441,6 +443,115 @@ describe("compactEmbeddedPiSessionDirect hooks", () => {
441443 }
442444 } ) ;
443445
446+ 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+
444555 it ( "keeps compaction fallback selection ephemeral" , async ( ) => {
445556 resolveModelMock . mockImplementation ( ( provider = "openai" , modelId = "fake" ) => ( {
446557 model : { provider, api : "responses" , id : modelId , input : [ ] } ,
0 commit comments