Initial commit: Clean DSS implementation
Migrated from design-system-swarm with fresh git history.
Old project history preserved in /home/overbits/apps/design-system-swarm
Core components:
- MCP Server (Python FastAPI with mcp 1.23.1)
- Claude Plugin (agents, commands, skills, strategies, hooks, core)
- DSS Backend (dss-mvp1 - token translation, Figma sync)
- Admin UI (Node.js/React)
- Server (Node.js/Express)
- Storybook integration (dss-mvp1/.storybook)
Self-contained configuration:
- All paths relative or use DSS_BASE_PATH=/home/overbits/dss
- PYTHONPATH configured for dss-mvp1 and dss-claude-plugin
- .env file with all configuration
- Claude plugin uses ${CLAUDE_PLUGIN_ROOT} for portability
Migration completed: $(date)
🤖 Clean migration with full functionality preserved
This commit is contained in:
127
demo/tools/config.py
Normal file
127
demo/tools/config.py
Normal file
@@ -0,0 +1,127 @@
|
||||
"""
|
||||
DSS Configuration Management
|
||||
|
||||
Secure configuration loading with:
|
||||
- Environment variables (highest priority)
|
||||
- .env files
|
||||
- Default values
|
||||
|
||||
Never logs or exposes sensitive values.
|
||||
"""
|
||||
|
||||
import os
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
from dataclasses import dataclass
|
||||
|
||||
# Try to load dotenv if available
|
||||
try:
|
||||
from dotenv import load_dotenv
|
||||
# Load from multiple possible locations (first found wins)
|
||||
project_root = Path(__file__).parent.parent
|
||||
env_locations = [
|
||||
project_root / ".env", # Project root
|
||||
project_root / "dss-mvp1" / ".env", # dss-mvp1 subdirectory
|
||||
]
|
||||
for env_path in env_locations:
|
||||
if env_path.exists():
|
||||
load_dotenv(env_path)
|
||||
break
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
|
||||
@dataclass
|
||||
class FigmaConfig:
|
||||
"""Figma API configuration."""
|
||||
token: Optional[str] = None
|
||||
cache_ttl: int = 300 # 5 minutes
|
||||
|
||||
@classmethod
|
||||
def from_env(cls) -> "FigmaConfig":
|
||||
return cls(
|
||||
token=os.getenv("FIGMA_TOKEN"),
|
||||
cache_ttl=int(os.getenv("FIGMA_CACHE_TTL", "300"))
|
||||
)
|
||||
|
||||
@property
|
||||
def is_configured(self) -> bool:
|
||||
return bool(self.token)
|
||||
|
||||
|
||||
@dataclass
|
||||
class DatabaseConfig:
|
||||
"""Database configuration."""
|
||||
path: str = ".dss/dss.db"
|
||||
|
||||
@classmethod
|
||||
def from_env(cls) -> "DatabaseConfig":
|
||||
return cls(
|
||||
path=os.getenv("DATABASE_PATH", ".dss/dss.db")
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
class ServerConfig:
|
||||
"""Server configuration."""
|
||||
port: int = 3456
|
||||
host: str = "0.0.0.0"
|
||||
env: str = "development"
|
||||
log_level: str = "info"
|
||||
|
||||
@classmethod
|
||||
def from_env(cls) -> "ServerConfig":
|
||||
return cls(
|
||||
port=int(os.getenv("PORT", "3456")),
|
||||
host=os.getenv("HOST", "0.0.0.0"),
|
||||
env=os.getenv("NODE_ENV", "development"),
|
||||
log_level=os.getenv("LOG_LEVEL", "info")
|
||||
)
|
||||
|
||||
@property
|
||||
def is_production(self) -> bool:
|
||||
return self.env == "production"
|
||||
|
||||
|
||||
@dataclass
|
||||
class Config:
|
||||
"""Main configuration container."""
|
||||
figma: FigmaConfig
|
||||
database: DatabaseConfig
|
||||
server: ServerConfig
|
||||
|
||||
@classmethod
|
||||
def load(cls) -> "Config":
|
||||
"""Load configuration from environment."""
|
||||
return cls(
|
||||
figma=FigmaConfig.from_env(),
|
||||
database=DatabaseConfig.from_env(),
|
||||
server=ServerConfig.from_env()
|
||||
)
|
||||
|
||||
def summary(self) -> dict:
|
||||
"""Return config summary (no secrets)."""
|
||||
return {
|
||||
"figma": {
|
||||
"configured": self.figma.is_configured,
|
||||
"cache_ttl": self.figma.cache_ttl
|
||||
},
|
||||
"database": {
|
||||
"path": self.database.path
|
||||
},
|
||||
"server": {
|
||||
"port": self.server.port,
|
||||
"env": self.server.env,
|
||||
"log_level": self.server.log_level
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Global config instance
|
||||
config = Config.load()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import json
|
||||
print("DSS Configuration:")
|
||||
print(json.dumps(config.summary(), indent=2))
|
||||
Reference in New Issue
Block a user