@@ -21,11 +21,19 @@ export const checkSession = async (
2121 if ( state . sessionId === null || state . sessionId !== lastSessionId ) {
2222 logger . info ( `Session changed: ${ state . sessionId } -> ${ lastSessionId } ` )
2323 try {
24- await ensureSessionInitialized ( client , state , lastSessionId , logger )
24+ await ensureSessionInitialized ( client , state , lastSessionId , logger , messages )
2525 } catch ( err : any ) {
2626 logger . error ( "Failed to initialize session state" , { error : err . message } )
2727 }
2828 }
29+
30+ const lastCompactionTimestamp = findLastCompactionTimestamp ( messages )
31+ if ( lastCompactionTimestamp > state . lastCompaction ) {
32+ state . lastCompaction = lastCompactionTimestamp
33+ state . toolParameters . clear ( )
34+ state . prune . toolIds = [ ]
35+ logger . info ( "Detected compaction from messages - cleared tool cache" , { timestamp : lastCompactionTimestamp } )
36+ }
2937}
3038
3139export function createSessionState ( ) : SessionState {
@@ -66,7 +74,8 @@ export async function ensureSessionInitialized(
6674 client : any ,
6775 state : SessionState ,
6876 sessionId : string ,
69- logger : Logger
77+ logger : Logger ,
78+ messages : WithParts [ ]
7079) : Promise < void > {
7180 if ( state . sessionId === sessionId ) {
7281 return ;
@@ -97,5 +106,14 @@ export async function ensureSessionInitialized(
97106 pruneTokenCounter : persisted . stats ?. pruneTokenCounter || 0 ,
98107 totalPruneTokens : persisted . stats ?. totalPruneTokens || 0 ,
99108 }
100- state . lastCompaction = persisted . lastCompacted || 0
109+ }
110+
111+ function findLastCompactionTimestamp ( messages : WithParts [ ] ) : number {
112+ for ( let i = messages . length - 1 ; i >= 0 ; i -- ) {
113+ const msg = messages [ i ]
114+ if ( msg . info . role === "assistant" && msg . info . summary === true ) {
115+ return msg . info . time . created
116+ }
117+ }
118+ return 0
101119}
0 commit comments