mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-12 23:21:27 -07:00
fix(plan): clean up session directories and plans on deletion (#20914)
This commit is contained in:
@@ -919,6 +919,32 @@ describe('Session Cleanup', () => {
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
it('should delete the session-specific directory', async () => {
|
||||
const config = createMockConfig();
|
||||
const settings: Settings = {
|
||||
general: {
|
||||
sessionRetention: {
|
||||
enabled: true,
|
||||
maxAge: '1d', // Very short retention to trigger deletion of all but current
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Mock successful file operations
|
||||
mockFs.access.mockResolvedValue(undefined);
|
||||
mockFs.unlink.mockResolvedValue(undefined);
|
||||
mockFs.rm.mockResolvedValue(undefined);
|
||||
|
||||
await cleanupExpiredSessions(config, settings);
|
||||
|
||||
// Verify that fs.rm was called with the session directory for the deleted session that has sessionInfo
|
||||
// recent456 should be deleted and its directory removed
|
||||
expect(mockFs.rm).toHaveBeenCalledWith(
|
||||
path.join('/tmp/test-project', 'recent456'),
|
||||
expect.objectContaining({ recursive: true, force: true }),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('parseRetentionPeriod format validation', () => {
|
||||
|
||||
@@ -115,6 +115,17 @@ export async function cleanupExpiredSessions(
|
||||
} catch {
|
||||
/* ignore if doesn't exist */
|
||||
}
|
||||
|
||||
// ALSO cleanup the session-specific directory (contains plans, tasks, etc.)
|
||||
const sessionDir = path.join(
|
||||
config.storage.getProjectTempDir(),
|
||||
sessionId,
|
||||
);
|
||||
try {
|
||||
await fs.rm(sessionDir, { recursive: true, force: true });
|
||||
} catch {
|
||||
/* ignore if doesn't exist */
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getDebugMode()) {
|
||||
|
||||
Reference in New Issue
Block a user