@@ -8,20 +8,33 @@ import { logger } from "../../utils/logger";
88
99const log = logger . scope ( "memory" ) ;
1010
11+ const MAINTENANCE_INTERVAL_MS = 6 * 60 * 60 * 1000 ; // 6 hours
12+ const DECAY_RATE = 0.02 ;
13+ const DECAY_MIN_AGE_DAYS = 1 ;
14+ const PRUNE_THRESHOLD = 0.1 ;
15+ const PRUNE_MIN_AGE_DAYS = 30 ;
16+
1117function getDataDir ( ) : string {
1218 return join ( app . getPath ( "userData" ) , "memory" ) ;
1319}
1420
1521@injectable ( )
1622export class MemoryService {
1723 private svc : AgentMemoryService | null = null ;
24+ private maintenanceTimer : ReturnType < typeof setInterval > | null = null ;
1825
1926 @postConstruct ( )
2027 initialize ( ) : void {
2128 const dataDir = getDataDir ( ) ;
2229 log . info ( "Initializing memory service" , { dataDir } ) ;
2330 this . svc = new AgentMemoryService ( { dataDir } ) ;
2431 log . info ( "Memory service ready" , { count : this . svc . count ( ) } ) ;
32+
33+ this . runMaintenance ( ) ;
34+ this . maintenanceTimer = setInterval (
35+ ( ) => this . runMaintenance ( ) ,
36+ MAINTENANCE_INTERVAL_MS ,
37+ ) ;
2538 }
2639
2740 get service ( ) : AgentMemoryService {
@@ -81,8 +94,28 @@ export class MemoryService {
8194 return this . service . getAssociations ( memoryId ) ;
8295 }
8396
97+ runMaintenance ( ) : { decayed : number ; pruned : number } {
98+ try {
99+ const decayed = this . service . decayImportance (
100+ DECAY_RATE ,
101+ DECAY_MIN_AGE_DAYS ,
102+ ) ;
103+ const pruned = this . service . prune ( PRUNE_THRESHOLD , PRUNE_MIN_AGE_DAYS ) ;
104+ const total = this . service . count ( ) ;
105+ log . info ( "Memory maintenance complete" , { decayed, pruned, total } ) ;
106+ return { decayed, pruned } ;
107+ } catch ( error ) {
108+ log . error ( "Memory maintenance failed" , { error } ) ;
109+ return { decayed : 0 , pruned : 0 } ;
110+ }
111+ }
112+
84113 @preDestroy ( )
85114 close ( ) : void {
115+ if ( this . maintenanceTimer ) {
116+ clearInterval ( this . maintenanceTimer ) ;
117+ this . maintenanceTimer = null ;
118+ }
86119 if ( this . svc ) {
87120 log . info ( "Closing memory service" ) ;
88121 this . svc . close ( ) ;
0 commit comments