- Added newline after each section header for better separation
- Added newline after enabler prompts for visual breathing room
- Added 'Default values:' label before showing optional values
- Added newline before and after default values display
- Added newline after 'change values' prompt
- Overall much more readable with proper visual spacing
The output now has better visual hierarchy and is easier to scan.
- Unified handling of required variables across all sections
- Section headers now always show: 'Icon SectionName' (no more 'Required Configuration')
- Icons appear only with section headers, not in value displays
- Optional values shown inline without headers (just the values)
- Consistent formatting whether section has enabler, required vars, or only optional
- Cleaner, more concise output with better visual hierarchy
Example:
📦 General
Enter service_name: ...
container_name: nginx, port: 8080
Do you want to change any values?
- Created module metadata files (.meta.yaml) for variable hints, descriptions, and icons
- Templates can override metadata via frontmatter 'variables' section
- Added hint display during prompting (e.g., webapp, api, database)
- Added tips for complex variables (shown with 💡)
- Icons now come from metadata only (no fallback emojis)
- Cleaned up formatting: removed indentation, consistent spacing
- Example compose.meta.yaml with comprehensive variable metadata
This creates a powerful two-tier metadata system where modules provide
defaults and templates can override or extend with specific needs.
- Removed 'Optional Configuration' header
- Display as single line with category icon
- Format: '📦 General: var1: value1, var2: value2'
- Icons for different categories (network, traefik, swarm, etc.)
- More concise and visually appealing output
- Show all optional variables in a single line
- Use dim white formatting for subtle display
- More compact and cleaner output
- Example: 'service_port_https: 8443, container_name: nginx, service_port_http: 8080'
- Removed all dict variable handling code
- Simplified TemplateVariable dataclass (no more is_dict, dict_keys)
- Simplified template parser to only handle dotted notation
- Removed _prompt_dict_variable from prompt handler
- Updated nginx template to use underscores instead of dots/dicts
This greatly simplifies the system but requires templates to use
underscores (service_port_http) instead of dots or dict access
to avoid Jinja2's attribute resolution confusion.
Major refactoring to simplify the variable system:
- Removed VariableRegistry entirely - templates are now the single source of truth
- Created TemplateVariable dataclass to represent auto-detected variables
- Enhanced template parser to detect:
- Enabler variables (used in {% if %} conditions)
- Dotted notation (traefik.host, network.name)
- Dict access patterns (service_port['http'])
- Nested patterns (nginx_dashboard.port['dashboard'])
- Variables are now automatically analyzed from templates with type inference
- Simplified Module base class - no more _init_variables
- Updated all modules to remove variable registration
- Prompt handler now works with template-detected variables
This makes the system much more flexible - any variable used in a template
is automatically available without needing to be registered in code.
- Filter out enabler variables (network, traefik, swarm) from the optional configuration overview
- Enablers are now only shown when prompting for enable/disable, not in the optional values list
- Prevents redundant display of boolean enabler variables