- 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