diff --git a/setup/managers/__init__.py b/setup/managers/__init__.py new file mode 100644 index 0000000..f179dd6 --- /dev/null +++ b/setup/managers/__init__.py @@ -0,0 +1,9 @@ +from .config_manager import ConfigManager +from .settings_manager import SettingsManager +from .file_manager import FileManager + +__all__ = [ + 'ConfigManager', + 'SettingsManager', + 'FileManager' +] diff --git a/setup/core/config_manager.py b/setup/managers/config_manager.py similarity index 100% rename from setup/core/config_manager.py rename to setup/managers/config_manager.py diff --git a/setup/core/file_manager.py b/setup/managers/file_manager.py similarity index 100% rename from setup/core/file_manager.py rename to setup/managers/file_manager.py diff --git a/setup/core/settings_manager.py b/setup/managers/settings_manager.py similarity index 92% rename from setup/core/settings_manager.py rename to setup/managers/settings_manager.py index ee77b8e..a85c71e 100644 --- a/setup/core/settings_manager.py +++ b/setup/managers/settings_manager.py @@ -1,6 +1,7 @@ """ Settings management for SuperClaude installation system -Handles settings.json manipulation with deep merge and backup +Handles settings.json migration to the new SuperClaude metadata json file +Allows for manipulation of these json files with deep merge and backup """ import json @@ -96,7 +97,31 @@ class SettingsManager: json.dump(metadata, f, indent=2, ensure_ascii=False, sort_keys=True) except IOError as e: raise ValueError(f"Could not save metadata to {self.metadata_file}: {e}") - + + def merge_metadata(self, modifications: Dict[str, Any]) -> Dict[str, Any]: + """ + Deep merge modifications into existing settings + + Args: + modifications: Settings modifications to merge + + Returns: + Merged settings dict + """ + existing = self.load_metadata() + return self._deep_merge(existing, modifications) + + def update_metadata(self, modifications: Dict[str, Any]) -> None: + """ + Update settings with modifications + + Args: + modifications: Settings modifications to apply + create_backup: Whether to create backup before updating + """ + merged = self.merge_metadata(modifications) + self.save_metadata(merged) + def migrate_superclaude_data(self) -> bool: """ Migrate SuperClaude-specific data from settings.json to metadata file @@ -322,16 +347,23 @@ class SettingsManager: self.save_metadata(metadata) - def get_framework_version(self) -> Optional[str]: + def check_installation_exists(self) -> bool: """ Get SuperClaude framework version from metadata Returns: Version string or None if not set """ - metadata = self.load_metadata() - framework = metadata.get("framework", {}) - return framework.get("version") + return self.metadata_file.exists() + + def check_v2_installation_exists(self) -> bool: + """ + Get SuperClaude framework version from metadata + + Returns: + Version string or None if not set + """ + return self.settings_file.exists() def get_metadata_setting(self, key_path: str, default: Any = None) -> Any: """ @@ -480,4 +512,4 @@ class SettingsManager: return True except (json.JSONDecodeError, IOError): - return False \ No newline at end of file + return False