@@ -513,6 +513,67 @@ describe("maybeCompactCodexAppServerSession", () => {
513513 ) ;
514514 } ) ;
515515
516+ it ( "adopts successor transcript handles after owning context-engine compaction" , async ( ) => {
517+ const sessionFile = await writeTestBinding ( ) ;
518+ const successorFile = path . join ( tempDir , "session.compacted.jsonl" ) ;
519+ await writeCodexAppServerBinding ( successorFile , {
520+ threadId : "thread-successor" ,
521+ cwd : tempDir ,
522+ } ) ;
523+ const compact = vi . fn ( async ( ) => ( {
524+ ok : true ,
525+ compacted : true ,
526+ result : {
527+ summary : "engine summary" ,
528+ firstKeptEntryId : "entry-1" ,
529+ tokensBefore : 55 ,
530+ sessionId : "session-1-compacted" ,
531+ sessionFile : successorFile ,
532+ } ,
533+ } ) ) ;
534+ const maintain = vi . fn (
535+ async ( _params : Parameters < NonNullable < ContextEngine [ "maintain" ] > > [ 0 ] ) => ( {
536+ changed : false ,
537+ bytesFreed : 0 ,
538+ rewrittenEntries : 0 ,
539+ } ) ,
540+ ) ;
541+ const contextEngine : ContextEngine = {
542+ info : { id : "lossless-claw" , name : "Lossless Claw" , ownsCompaction : true } ,
543+ assemble : vi . fn ( ) as never ,
544+ ingest : vi . fn ( ) as never ,
545+ compact,
546+ maintain,
547+ } ;
548+
549+ const result = requireCompactResult (
550+ await maybeCompactCodexAppServerSession ( {
551+ sessionId : "session-1" ,
552+ sessionKey : "agent:main:session-1" ,
553+ sessionFile,
554+ workspaceDir : tempDir ,
555+ contextEngine,
556+ } ) ,
557+ ) ;
558+
559+ expect ( result . ok ) . toBe ( true ) ;
560+ expect ( result . compacted ) . toBe ( true ) ;
561+ expect ( result . result ?. sessionId ) . toBe ( "session-1-compacted" ) ;
562+ expect ( result . result ?. sessionFile ) . toBe ( successorFile ) ;
563+ expect ( await readCodexAppServerBinding ( sessionFile ) ) . toBeUndefined ( ) ;
564+ expect ( await readCodexAppServerBinding ( successorFile ) ) . toBeUndefined ( ) ;
565+ expect ( maintain ) . toHaveBeenCalledTimes ( 1 ) ;
566+ const [ maintainCall ] = maintain . mock . calls [ 0 ] ?? [ ] ;
567+ const maintainParams = maintainCall as
568+ | {
569+ sessionId ?: string ;
570+ sessionFile ?: string ;
571+ }
572+ | undefined ;
573+ expect ( maintainParams ?. sessionId ) . toBe ( "session-1-compacted" ) ;
574+ expect ( maintainParams ?. sessionFile ) . toBe ( successorFile ) ;
575+ } ) ;
576+
516577 it ( "returns context-engine compaction success when maintenance fails" , async ( ) => {
517578 const sessionFile = await writeTestBinding ( ) ;
518579 const compact = vi . fn ( async ( ) => ( {
0 commit comments