UNPKG

simple-task-master

Version:
139 lines (109 loc) 5.11 kB
# Feature Implementation Report: Config Reset Options ## Task Summary - **Task ID**: 15 - **Title**: Add --reset option to config command - **Status**: Completed - **Date**: 2025-07-25 ## Implementation Details ### Features Added 1. **`--reset <key>` Option** - Resets a single configuration key to its default value - Supports all resettable keys: `tasksDir`, `lockTimeoutMs`, `maxTaskSizeBytes` - Shows clear success message with the actual default value - Example: `stm config --reset lockTimeoutMs` 2. **`--reset-all` Option** - Resets all resettable configuration values at once - Displays all default values after reset - Example: `stm config --reset-all` ### Technical Implementation #### Modified Files - `/src/commands/config.ts` - Added `reset` and `resetAll` to `ConfigOptions` interface - Imported `CONFIG_DEFAULTS` from the config module - Implemented reset logic with proper file locking - Added comprehensive help text with reset examples #### Key Features 1. **Concurrent Safety**: Uses `LockManager` to prevent concurrent modifications 2. **Clear Messaging**: Success messages show the actual default values 3. **Error Handling**: Validates keys and provides clear error messages for invalid inputs 4. **Help Documentation**: Updated help text with reset examples and explanations ### Success Messages - Single key reset: `Configuration key 'lockTimeoutMs' reset to default value: 30000 (30 seconds)` - Reset all: Shows all default values in a formatted list ### Error Handling - Invalid key: `Unknown configuration key: invalidKey. Valid keys: tasksDir, lockTimeoutMs, maxTaskSizeBytes` - Schema protection: Cannot reset the schema version ## Testing Results ### Manual Testing Performed 1. **Single Key Reset** - ✅ Reset `lockTimeoutMs` from 60000 to default 30000 - ✅ Reset `tasksDir` (removed from config.json) - ✅ Error handling for invalid keys 2. **Reset All** - ✅ All values reset to defaults - ✅ Clear output showing all default values 3. **Integration** - ✅ File locking prevents concurrent access - ✅ Atomic writes ensure data integrity - ✅ Help text displays correctly ### Automated Testing - ✅ All existing unit tests pass (40 tests) - ✅ Build completes successfully ## Code Quality ### Implementation Highlights ```typescript // Handle --reset (requires lock) if (options.reset) { await lockManager.acquire(); try { const key = options.reset; const validKeys = ['tasksDir', 'lockTimeoutMs', 'maxTaskSizeBytes']; if (!validKeys.includes(key)) { throw new ValidationError( `Unknown configuration key: ${key}. Valid keys: ${validKeys.join(', ')}` ); } // Reset the specific key await configManager.reset([key]); // Get the default value for the success message let defaultValue: string; if (key === 'tasksDir') { defaultValue = '.simple-task-master/tasks (default location)'; } else if (key === 'lockTimeoutMs') { defaultValue = `${CONFIG_DEFAULTS.lockTimeoutMs} (${CONFIG_DEFAULTS.lockTimeoutMs / 1000} seconds)`; } else if (key === 'maxTaskSizeBytes') { const mb = CONFIG_DEFAULTS.maxTaskSizeBytes / 1048576; defaultValue = `${CONFIG_DEFAULTS.maxTaskSizeBytes} (${mb} MB)`; } printSuccess(`Configuration key '${key}' reset to default value: ${defaultValue}`); } finally { await lockManager.release(); } return; } ``` ### Help Text Update ``` Restoring Defaults: # Reset individual configuration values to defaults stm config --reset tasksDir # Reset to .simple-task-master/tasks stm config --reset lockTimeoutMs # Reset to 30000 (30 seconds) stm config --reset maxTaskSizeBytes # Reset to 1048576 (1 MB) # Reset all configuration values at once stm config --reset-all # Alternative: Delete config.json to use all defaults rm .simple-task-master/config.json ``` ## Validation Criteria Met**--reset option accepts configuration key**: Validates input and accepts valid keys ✅ **Success message shows what was reset and to what value**: Clear, informative messages ✅ **Error messages are clear for invalid keys**: Specific error with list of valid keys ✅ **File locking prevents concurrent modifications**: Uses LockManager consistently ✅ **Help text updated with reset examples**: Comprehensive examples added ## Additional Features Implemented Beyond the requirements, the implementation includes: - **--reset-all option**: Convenient way to reset all values at once - **Human-readable default values**: Shows "30 seconds" instead of just "30000" - **Consistent with existing patterns**: Follows the same error handling and locking patterns as --set ## Conclusion The config reset functionality has been successfully implemented with all validation criteria met. The feature provides a user-friendly way to reset configuration values to their defaults, with clear messaging and proper error handling. The implementation follows existing code patterns and maintains concurrent safety through proper file locking.