fix: Address invalid JSON field in installation suite

- Separate SuperClaude metadata from Claude Code settings.json
- Create .superclaude-metadata.json for framework-specific data
- Fix JSON validation issues with settings management
- Update all components to use proper metadata storage
- Maintain compatibility with Claude Code settings format
- Add migration support for existing installations

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
NomenAK
2025-07-14 16:34:20 +02:00
parent 6425be82eb
commit 625088df64
8 changed files with 229 additions and 76 deletions

View File

@@ -131,8 +131,8 @@ class MCPComponent(Component):
"""Get files to install (none for MCP component)"""
return []
def get_settings_modifications(self) -> Dict[str, Any]:
"""Get settings modifications"""
def get_metadata_modifications(self) -> Dict[str, Any]:
"""Get metadata modifications for MCP component"""
return {
"components": {
"mcp": {
@@ -148,6 +148,11 @@ class MCPComponent(Component):
}
}
def get_settings_modifications(self) -> Dict[str, Any]:
"""Get settings.json modifications (now only Claude Code compatible settings)"""
# Return empty dict as we don't modify Claude Code settings
return {}
def _check_mcp_server_installed(self, server_name: str) -> bool:
"""Check if MCP server is already installed"""
try:
@@ -292,13 +297,27 @@ class MCPComponent(Component):
self.logger.error(f"Required MCP server {server_name} failed to install")
return False
# Update settings.json
# Update metadata
try:
settings_mods = self.get_settings_modifications()
self.settings_manager.update_settings(settings_mods)
self.logger.info("Updated settings.json with MCP component registration")
# Add component registration to metadata
self.settings_manager.add_component_registration("mcp", {
"version": "3.0.0",
"category": "integration",
"servers_count": len(self.mcp_servers)
})
# Add MCP configuration to metadata
metadata = self.settings_manager.load_metadata()
metadata["mcp"] = {
"enabled": True,
"servers": list(self.mcp_servers.keys()),
"auto_update": False
}
self.settings_manager.save_metadata(metadata)
self.logger.info("Updated metadata with MCP component registration")
except Exception as e:
self.logger.error(f"Failed to update settings.json: {e}")
self.logger.error(f"Failed to update metadata: {e}")
return False
# Verify installation
@@ -347,13 +366,18 @@ class MCPComponent(Component):
if self._uninstall_mcp_server(server_name):
uninstalled_count += 1
# Update settings.json to remove MCP component
# Update metadata to remove MCP component
try:
if self.settings_manager.is_component_installed("mcp"):
self.settings_manager.remove_component_registration("mcp")
self.logger.info("Removed MCP component from settings.json")
# Also remove MCP configuration from metadata
metadata = self.settings_manager.load_metadata()
if "mcp" in metadata:
del metadata["mcp"]
self.settings_manager.save_metadata(metadata)
self.logger.info("Removed MCP component from metadata")
except Exception as e:
self.logger.warning(f"Could not update settings.json: {e}")
self.logger.warning(f"Could not update metadata: {e}")
self.logger.success(f"MCP component uninstalled ({uninstalled_count} servers removed)")
return True
@@ -401,12 +425,18 @@ class MCPComponent(Component):
self.logger.error(f"Error updating MCP server {server_name}: {e}")
failed_servers.append(server_name)
# Update settings
# Update metadata
try:
settings_mods = self.get_settings_modifications()
self.settings_manager.update_settings(settings_mods)
# Update component version in metadata
metadata = self.settings_manager.load_metadata()
if "components" in metadata and "mcp" in metadata["components"]:
metadata["components"]["mcp"]["version"] = target_version
metadata["components"]["mcp"]["servers_count"] = len(self.mcp_servers)
if "mcp" in metadata:
metadata["mcp"]["servers"] = list(self.mcp_servers.keys())
self.settings_manager.save_metadata(metadata)
except Exception as e:
self.logger.warning(f"Could not update settings.json: {e}")
self.logger.warning(f"Could not update metadata: {e}")
if failed_servers:
self.logger.warning(f"Some MCP servers failed to update: {failed_servers}")
@@ -423,9 +453,9 @@ class MCPComponent(Component):
"""Validate MCP component installation"""
errors = []
# Check settings.json registration
# Check metadata registration
if not self.settings_manager.is_component_installed("mcp"):
errors.append("MCP component not registered in settings.json")
errors.append("MCP component not registered in metadata")
return False, errors
# Check version matches