Implement metadata-driven frontend (remove hardcoded service logic)
## Context
The frontend wizard components contained multiple hardcoded constants and conditional logic tied to specific service/trigger/action IDs:
- `AUTO_OPERATOR_TRIGGERS` - list of trigger IDs that should auto-set the operator
- `TRIGGER_MESSAGE_TEMPLATES` - hardcoded default message templates per trigger
- `CHANNEL_ACTION_IDS` - hardcoded action IDs that need channel selection
- `HIDDEN_CONFIG_FIELDS` - hardcoded list of fields to hide in the UI
- Various `if (triggerId === 'weather_...')` conditions
This approach means adding a new service requires modifying multiple frontend files.
## Implementation
### Backend: Add UI metadata to service definitions
Each trigger/action definition now includes metadata properties:
- `format`: `'template'`, `'template-multiline'`, `'column-select'`, `'location'` - controls which UI component renders
- `hidden: true` - hides the field from user input (auto-populated)
- `defaultTemplate` - pre-fills the action message template when this trigger is selected
- `autoOperator` - auto-sets the operator value and hides the operator selector
- `channelType` - `'discord'` or `'slack'` - shows the channel picker for this action
- `supportsEnrichment` - shows the data enrichment panel for this trigger
- `requiresLocation` - shows the location picker for this trigger
### Frontend: Consume metadata dynamically
- `wizardStore.js`: Remove all hardcoded constants; read metadata from trigger/action objects
- `DynamicFormFields.jsx`: Render components based on `prop.format` and `prop.hidden`
- `StepTriggers.jsx`: Use `trigger.requiresLocation` and `trigger.supportsEnrichment` instead of ID checks
- `StepActions.jsx`: Use `action.channelType` instead of hardcoded action ID lists
- `StepReview.jsx`: Use `getSchemaHiddenFields(schema)` utility for display filtering
## Key Files
- `frontend/src/features/rules/stores/wizardStore.js`
- `frontend/src/features/rules/components/DynamicFormFields.jsx`
- `frontend/src/features/rules/components/wizard/StepTriggers.jsx`
- `frontend/src/features/rules/components/wizard/StepActions.jsx`
- `frontend/src/features/rules/components/wizard/StepReview.jsx`
- All `backend/src/services/*/index.js` (metadata additions)
- `backend/src/services/weather/triggers.js` (metadata additions)
## Acceptance Criteria
- [x] No hardcoded service/trigger/action IDs remain in frontend components
- [x] All removed constants (`AUTO_OPERATOR_TRIGGERS`, `TRIGGER_MESSAGE_TEMPLATES`, `CHANNEL_ACTION_IDS`, `HIDDEN_CONFIG_FIELDS`) are fully replaced by metadata reads
- [x] Adding a new service with triggers/actions requires zero frontend code changes
- [x] All existing rule creation wizard flows work identically to before
- [x] All tests pass
issue