- Log number of tasks being scanned
- Log how many tasks have checkpoints
- Log how many need culling (older than 30 days)
- Log progress every 100 deletions during large culls
- Add purgeOldCheckpoints() function with hardcoded 30-day threshold
- Add startBackgroundCheckpointPurge() for fire-and-forget activation
- Culls only checkpoints/ subdirectory, preserves task history
- Runs silently on extension activation (no user notification)
- Coexists with existing taskHistoryRetention setting
- Add 6 new tests for checkpoint culling functionality
- Add parallel metadata reads with 50 concurrent operations
- Add parallel deletions with 10 concurrent operations
- Batch read all metadata first, then filter, then delete
- Reduce retry attempts from 3 to 1 (remove aggressive retries with sleeps)
- Extract helper functions for cleaner code (readTaskMetadata, pathExists, removeDir)
This significantly improves purge performance for users with many tasks (~9000+).
- Remove expensive recursive getDirectorySize() that caused UI freeze with ~9000 tasks
- Now only counts top-level task directories via single fs.readdir() call
- Make task count on-demand (user must click refresh) instead of auto-trigger on settings load
- Update types, i18n strings, and tests accordingly
- Check if workspace repo directory exists before git operations in deleteTask()
- Reduce log verbosity - only log actual errors, not expected cases
- Add test case for non-existent directory handling
- Add storage usage display showing total size and task count
- Add calculateTaskStorageSize utility to compute global storage folder sizes
- Add getTaskStorageSize message handler to communicate storage info to webview
- Update About settings section to display storage usage with refresh button
- Add taskHistoryStorage translations for all 18 supported languages
- Updated description and warning text for aboutRetention in all 18 languages
- Changed 'plugin reload' to 'extension is activated' for clarity
- Changed 'deletes tasks' to 'deletes old tasks' to clarify it doesn't delete all tasks
- Replace generic 'number' with explicit RetentionDays union type to prevent accidental misconfiguration
- Skip aggressive fs cleanup when deleteTaskById callback successfully removes the directory
- This avoids redundant filesystem work and log noise on stubborn paths
* Taskheader
* Subtask messages
* View subtask
* subtasks in history items
* i18n
* Table
* Lighter visuals
* bug
* fix: Align tests with implementation behavior
* refactor: extract CircularProgress component from TaskHeader
- Created reusable CircularProgress component for displaying percentage as a ring
- Moved inline SVG calculation from TaskHeader.tsx to dedicated component
- Added comprehensive tests for CircularProgress component (14 tests)
- Component supports customizable size, strokeWidth, and className
- Includes proper accessibility attributes (progressbar role, aria-valuenow)
* chore: update StandardTooltip default delay to 600ms
As mentioned in the PR description, increased the tooltip delay to 600ms
for less intrusive tooltips. The delay is still configurable via the
delay prop for components that need a different value.
---------
Co-authored-by: Roo Code <roomote@roocode.com>