()
| 348 | } |
| 349 | |
| 350 | export async function cleanupOldSessionEnvDirs(): Promise<CleanupResult> { |
| 351 | const cutoffDate = getCutoffDate() |
| 352 | const result: CleanupResult = { messages: 0, errors: 0 } |
| 353 | const fsImpl = getFsImplementation() |
| 354 | |
| 355 | try { |
| 356 | const configDir = getClaudeConfigHomeDir() |
| 357 | const sessionEnvBaseDir = join(configDir, 'session-env') |
| 358 | |
| 359 | let dirents |
| 360 | try { |
| 361 | dirents = await fsImpl.readdir(sessionEnvBaseDir) |
| 362 | } catch { |
| 363 | return result |
| 364 | } |
| 365 | |
| 366 | const sessionEnvDirs = dirents |
| 367 | .filter(dirent => dirent.isDirectory()) |
| 368 | .map(dirent => join(sessionEnvBaseDir, dirent.name)) |
| 369 | |
| 370 | for (const sessionEnvDir of sessionEnvDirs) { |
| 371 | try { |
| 372 | const stats = await fsImpl.stat(sessionEnvDir) |
| 373 | if (stats.mtime < cutoffDate) { |
| 374 | await fsImpl.rm(sessionEnvDir, { recursive: true, force: true }) |
| 375 | result.messages++ |
| 376 | } |
| 377 | } catch { |
| 378 | result.errors++ |
| 379 | } |
| 380 | } |
| 381 | |
| 382 | await tryRmdir(sessionEnvBaseDir, fsImpl) |
| 383 | } catch (error) { |
| 384 | logError(error as Error) |
| 385 | } |
| 386 | |
| 387 | return result |
| 388 | } |
| 389 | |
| 390 | /** |
| 391 | * Cleans up old debug log files from ~/.claude/debug/ |
no test coverage detected