Files
gh-human-frontier-labs-inc-…/scripts/design_architecture.py
2025-11-29 18:47:30 +08:00

68 lines
2.1 KiB
Python

#!/usr/bin/env python3
"""Architecture designer for Bubble Tea TUIs."""
import sys
from pathlib import Path
from typing import Dict, List
sys.path.insert(0, str(Path(__file__).parent))
from utils.template_generator import (
generate_model_struct,
generate_init_function,
generate_update_skeleton,
generate_view_skeleton
)
from utils.ascii_diagram import (
draw_component_tree,
draw_message_flow,
draw_state_machine
)
from utils.validators import DesignValidator
def design_architecture(components: Dict, patterns: Dict, requirements: Dict) -> Dict:
"""Design TUI architecture."""
primary = components.get('primary_components', [])
comp_names = [c['component'].replace('.Model', '') for c in primary]
archetype = requirements.get('archetype', 'general')
views = requirements.get('views', 'single')
# Generate code structures
model_struct = generate_model_struct(comp_names, archetype)
init_logic = generate_init_function(comp_names)
message_handlers = {
'tea.KeyMsg': 'Handle keyboard input (arrows, enter, q, etc.)',
'tea.WindowSizeMsg': 'Handle window resize, update component dimensions'
}
# Add component-specific handlers
if 'progress' in comp_names or 'spinner' in comp_names:
message_handlers['progress.FrameMsg'] = 'Update progress/spinner animation'
view_logic = generate_view_skeleton(comp_names)
# Generate diagrams
diagrams = {
'component_hierarchy': draw_component_tree(comp_names, archetype),
'message_flow': draw_message_flow(list(message_handlers.keys()))
}
if views == 'multi':
diagrams['state_machine'] = draw_state_machine(['View 1', 'View 2', 'View 3'])
architecture = {
'model_struct': model_struct,
'init_logic': init_logic,
'message_handlers': message_handlers,
'view_logic': view_logic,
'diagrams': diagrams
}
# Validate
validator = DesignValidator()
validation = validator.validate_architecture(architecture)
architecture['validation'] = validation.to_dict()
return architecture