@@ -3,12 +3,35 @@ import os from "node:os";
33import path from "node:path" ;
44import type { HarnessContextEngine as ContextEngine } from "openclaw/plugin-sdk/agent-harness-runtime" ;
55import { afterEach , beforeEach , describe , expect , it , vi } from "vitest" ;
6+ import type { CodexAppServerClientFactory } from "./client-factory.js" ;
67import type { CodexAppServerClient } from "./client.js" ;
7- import { maybeCompactCodexAppServerSession , __testing } from "./compact.js" ;
8+ import { maybeCompactCodexAppServerSession as maybeCompactCodexAppServerSessionImpl } from "./compact.js" ;
89import type { CodexServerNotification } from "./protocol.js" ;
910import { writeCodexAppServerBinding } from "./session-binding.js" ;
1011
1112let tempDir : string ;
13+ let codexAppServerClientFactoryForTest : CodexAppServerClientFactory | undefined ;
14+
15+ type MaybeCompactOptions = NonNullable < Parameters < typeof maybeCompactCodexAppServerSessionImpl > [ 1 ] > ;
16+
17+ function setCodexAppServerClientFactoryForTest ( factory : CodexAppServerClientFactory ) : void {
18+ codexAppServerClientFactoryForTest = factory ;
19+ }
20+
21+ function resetCodexAppServerClientFactoryForTest ( ) : void {
22+ codexAppServerClientFactoryForTest = undefined ;
23+ }
24+
25+ function maybeCompactCodexAppServerSession (
26+ params : Parameters < typeof maybeCompactCodexAppServerSessionImpl > [ 0 ] ,
27+ options : MaybeCompactOptions = { } ,
28+ ) {
29+ const clientFactory = options . clientFactory ?? codexAppServerClientFactoryForTest ;
30+ return maybeCompactCodexAppServerSessionImpl (
31+ params ,
32+ clientFactory ? { ...options , clientFactory } : options ,
33+ ) ;
34+ }
1235
1336async function writeTestBinding ( options : { authProfileId ?: string } = { } ) : Promise < string > {
1437 const sessionFile = path . join ( tempDir , "session.jsonl" ) ;
@@ -49,13 +72,13 @@ describe("maybeCompactCodexAppServerSession", () => {
4972 } ) ;
5073
5174 afterEach ( async ( ) => {
52- __testing . resetCodexAppServerClientFactoryForTests ( ) ;
75+ resetCodexAppServerClientFactoryForTest ( ) ;
5376 await fs . rm ( tempDir , { recursive : true , force : true } ) ;
5477 } ) ;
5578
5679 it ( "waits for native app-server compaction before reporting success" , async ( ) => {
5780 const fake = createFakeCodexClient ( ) ;
58- __testing . setCodexAppServerClientFactoryForTests ( async ( ) => fake . client ) ;
81+ setCodexAppServerClientFactoryForTest ( async ( ) => fake . client ) ;
5982 const sessionFile = await writeTestBinding ( ) ;
6083
6184 const pendingResult = startCompaction ( sessionFile , { currentTokenCount : 123 } ) ;
@@ -88,7 +111,7 @@ describe("maybeCompactCodexAppServerSession", () => {
88111
89112 it ( "accepts native context-compaction item completion as success" , async ( ) => {
90113 const fake = createFakeCodexClient ( ) ;
91- __testing . setCodexAppServerClientFactoryForTests ( async ( ) => fake . client ) ;
114+ setCodexAppServerClientFactoryForTest ( async ( ) => fake . client ) ;
92115 const sessionFile = await writeTestBinding ( ) ;
93116
94117 const pendingResult = startCompaction ( sessionFile ) ;
@@ -115,7 +138,7 @@ describe("maybeCompactCodexAppServerSession", () => {
115138 it ( "reuses the bound auth profile for native compaction" , async ( ) => {
116139 const fake = createFakeCodexClient ( ) ;
117140 let seenAuthProfileId : string | undefined ;
118- __testing . setCodexAppServerClientFactoryForTests ( async ( _startOptions , authProfileId ) => {
141+ setCodexAppServerClientFactoryForTest ( async ( _startOptions , authProfileId ) => {
119142 seenAuthProfileId = authProfileId ;
120143 return fake . client ;
121144 } ) ;
@@ -137,7 +160,7 @@ describe("maybeCompactCodexAppServerSession", () => {
137160 it ( "fails closed when the persisted binding auth profile disagrees with the runtime request" , async ( ) => {
138161 const fake = createFakeCodexClient ( ) ;
139162 const factory = vi . fn ( async ( ) => fake . client ) ;
140- __testing . setCodexAppServerClientFactoryForTests ( factory ) ;
163+ setCodexAppServerClientFactoryForTest ( factory ) ;
141164 const sessionFile = path . join ( tempDir , "session.jsonl" ) ;
142165 await writeCodexAppServerBinding ( sessionFile , {
143166 threadId : "thread-1" ,
@@ -163,7 +186,7 @@ describe("maybeCompactCodexAppServerSession", () => {
163186
164187 it ( "prefers owning context-engine compaction and records native status separately" , async ( ) => {
165188 const fake = createFakeCodexClient ( ) ;
166- __testing . setCodexAppServerClientFactoryForTests ( async ( ) => fake . client ) ;
189+ setCodexAppServerClientFactoryForTest ( async ( ) => fake . client ) ;
167190 const sessionFile = await writeTestBinding ( ) ;
168191 const compact = vi . fn ( async ( _params : unknown ) => ( {
169192 ok : true ,
@@ -260,7 +283,7 @@ describe("maybeCompactCodexAppServerSession", () => {
260283
261284 it ( "still runs native compaction when context-engine maintenance fails" , async ( ) => {
262285 const fake = createFakeCodexClient ( ) ;
263- __testing . setCodexAppServerClientFactoryForTests ( async ( ) => fake . client ) ;
286+ setCodexAppServerClientFactoryForTest ( async ( ) => fake . client ) ;
264287 const sessionFile = await writeTestBinding ( ) ;
265288 const contextEngine : ContextEngine = {
266289 info : { id : "lossless-claw" , name : "Lossless Claw" , ownsCompaction : true } ,
@@ -307,7 +330,7 @@ describe("maybeCompactCodexAppServerSession", () => {
307330
308331 it ( "records native compaction status when primary compaction has no result payload" , async ( ) => {
309332 const fake = createFakeCodexClient ( ) ;
310- __testing . setCodexAppServerClientFactoryForTests ( async ( ) => fake . client ) ;
333+ setCodexAppServerClientFactoryForTest ( async ( ) => fake . client ) ;
311334 const sessionFile = await writeTestBinding ( ) ;
312335 const contextEngine : ContextEngine = {
313336 info : { id : "lossless-claw" , name : "Lossless Claw" , ownsCompaction : true } ,
@@ -350,7 +373,7 @@ describe("maybeCompactCodexAppServerSession", () => {
350373
351374 it ( "reports context-engine compaction errors without skipping native compaction" , async ( ) => {
352375 const fake = createFakeCodexClient ( ) ;
353- __testing . setCodexAppServerClientFactoryForTests ( async ( ) => fake . client ) ;
376+ setCodexAppServerClientFactoryForTest ( async ( ) => fake . client ) ;
354377 const sessionFile = await writeTestBinding ( ) ;
355378 const contextEngine : ContextEngine = {
356379 info : { id : "lossless-claw" , name : "Lossless Claw" , ownsCompaction : true } ,
0 commit comments