type ) { return AgentResult::refused( 'unsupported task type' ); } $memory_pruned = $context->memory()->prune(); $journal_rotated = $context->journal()->rotate(); $files_removed = $this->gc_stale_cache_files(); // Expired visitor sessions + day-old rate-limit events. $sessions_pruned = 0; if ( $context->services()->has( \Agentyllo\Chat\Session\SessionManager::class ) ) { $sessions_pruned = $context->services()->get( \Agentyllo\Chat\Session\SessionManager::class )->prune(); } return AgentResult::ok( array( 'memory_pruned' => $memory_pruned, 'journal_rotated' => $journal_rotated, 'sessions_pruned' => $sessions_pruned, 'files_removed' => $files_removed, ) ); } /** * Remove cache files older than 7 days from uploads/agentyllo/cache. */ private function gc_stale_cache_files(): int { $dir = Uploads::dir( 'cache' ); if ( ! is_dir( $dir ) ) { return 0; } $removed = 0; $cutoff = time() - WEEK_IN_SECONDS; $items = scandir( $dir ); foreach ( ( false === $items ? array() : $items ) as $item ) { $path = $dir . '/' . $item; if ( '.' === $item || '..' === $item || 'index.php' === $item || ! is_file( $path ) ) { continue; } if ( (int) filemtime( $path ) < $cutoff ) { wp_delete_file( $path ); ++$removed; } } return $removed; } /** * {@inheritDoc} */ public function self_check( AgentContext $context ): HealthReport { return ( new HealthReport() ) ->add( 'uploads_writable', Uploads::ensure(), Uploads::base_dir(), true ); } }