Class: Aidp::Harness::ConfigLoader
- Inherits:
-
Object
- Object
- Aidp::Harness::ConfigLoader
- Defined in:
- lib/aidp/harness/config_loader.rb
Overview
Enhanced configuration loader for harness
Instance Method Summary collapse
-
#all_provider_configs(force_reload = false) ⇒ Object
Get all provider configurations.
-
#config_exists? ⇒ Boolean
Check if configuration exists.
-
#config_file_path ⇒ Object
Get configuration file path.
-
#config_summary ⇒ Object
Get configuration summary.
-
#config_valid? ⇒ Boolean
Check if configuration is valid.
-
#config_with_features(features = {}, force_reload = false) ⇒ Object
Get configuration with feature flags.
-
#config_with_overrides(overrides = {}) ⇒ Object
Get configuration with specific overrides.
-
#configured_providers(force_reload = false) ⇒ Object
Get configured provider names.
-
#create_example_config ⇒ Object
Create example configuration.
-
#environment_config(environment = nil, force_reload = false) ⇒ Object
Get environment-specific configuration.
-
#export_config(format = :yaml) ⇒ Object
Export configuration.
-
#fix_config_issues ⇒ Object
Fix configuration issues.
-
#get_step_config(step_name, force_reload = false) ⇒ Object
Get configuration for specific step.
-
#get_user_config(user_id = nil, force_reload = false) ⇒ Object
Get configuration for specific user.
-
#harness_config(force_reload = false) ⇒ Object
Get harness configuration with defaults.
-
#harness_config_with_overrides(overrides = {}) ⇒ Object
Get harness configuration with overrides.
-
#initialize(project_dir = Dir.pwd, validator: nil) ⇒ ConfigLoader
constructor
A new instance of ConfigLoader.
-
#load_config(force_reload = false) ⇒ Object
Load and validate configuration with caching.
-
#mode_config(mode, force_reload = false) ⇒ Object
Get configuration for specific harness mode.
-
#provider_config(provider_name, force_reload = false) ⇒ Object
Get provider configuration with defaults.
-
#provider_config_with_overrides(provider_name, overrides = {}) ⇒ Object
Get provider configuration with overrides.
-
#provider_configured?(provider_name) ⇒ Boolean
Check if provider is configured.
-
#reload_config ⇒ Object
Reload configuration from file.
-
#time_based_config(force_reload = false) ⇒ Object
Get configuration with time-based overrides.
-
#validate_provider(provider_name) ⇒ Object
Validate specific provider.
-
#validation_errors ⇒ Object
Get validation errors.
-
#validation_warnings ⇒ Object
Get validation warnings.
Constructor Details
#initialize(project_dir = Dir.pwd, validator: nil) ⇒ ConfigLoader
Returns a new instance of ConfigLoader.
12 13 14 15 16 17 18 |
# File 'lib/aidp/harness/config_loader.rb', line 12 def initialize(project_dir = Dir.pwd, validator: nil) @project_dir = project_dir @validator = validator || ConfigValidator.new(project_dir) @config_cache = nil @last_loaded = nil @last_signature = nil # stores {mtime:, size:, hash:} end |
Instance Method Details
#all_provider_configs(force_reload = false) ⇒ Object
Get all provider configurations
63 64 65 66 67 68 |
# File 'lib/aidp/harness/config_loader.rb', line 63 def all_provider_configs(force_reload = false) config = load_config(force_reload) return {} unless config config[:providers] || {} end |
#config_exists? ⇒ Boolean
Check if configuration exists
80 81 82 |
# File 'lib/aidp/harness/config_loader.rb', line 80 def config_exists? @validator.config_exists? end |
#config_file_path ⇒ Object
Get configuration file path
85 86 87 |
# File 'lib/aidp/harness/config_loader.rb', line 85 def config_file_path @validator.config_file_path end |
#config_summary ⇒ Object
Get configuration summary
100 101 102 |
# File 'lib/aidp/harness/config_loader.rb', line 100 def config_summary @validator.get_summary end |
#config_valid? ⇒ Boolean
Check if configuration is valid
158 159 160 161 |
# File 'lib/aidp/harness/config_loader.rb', line 158 def config_valid? validation_result = @validator.validate_existing validation_result[:valid] end |
#config_with_features(features = {}, force_reload = false) ⇒ Object
Get configuration with feature flags
220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 |
# File 'lib/aidp/harness/config_loader.rb', line 220 def config_with_features(features = {}, force_reload = false) config = load_config(force_reload) return nil unless config feature_overrides = {} features.each do |feature, enabled| if enabled feature_config = config[:features]&.dig(feature.to_sym) || config[:features]&.dig(feature.to_s) || config["features"]&.dig(feature.to_s) || config["features"]&.dig(feature.to_sym) || {} feature_overrides = deep_merge(feature_overrides, feature_config) end end merge_overrides(config, feature_overrides) end |
#config_with_overrides(overrides = {}) ⇒ Object
Get configuration with specific overrides
115 116 117 118 119 120 |
# File 'lib/aidp/harness/config_loader.rb', line 115 def config_with_overrides(overrides = {}) base_config = load_config return nil unless base_config merge_overrides(base_config, overrides) end |
#configured_providers(force_reload = false) ⇒ Object
Get configured provider names
71 72 73 74 75 76 77 |
# File 'lib/aidp/harness/config_loader.rb', line 71 def configured_providers(force_reload = false) config = load_config(force_reload) return [] unless config providers = config[:providers] || {} providers.keys.map(&:to_s) end |
#create_example_config ⇒ Object
Create example configuration
90 91 92 |
# File 'lib/aidp/harness/config_loader.rb', line 90 def create_example_config @validator.create_example_config end |
#environment_config(environment = nil, force_reload = false) ⇒ Object
Get environment-specific configuration
191 192 193 194 195 196 197 198 199 200 201 202 203 |
# File 'lib/aidp/harness/config_loader.rb', line 191 def environment_config(environment = nil, force_reload = false) environment ||= ENV["AIDP_ENV"] || "development" config = load_config(force_reload) return nil unless config env_config = config[:environments]&.dig(environment.to_sym) || config[:environments]&.dig(environment.to_s) || config["environments"]&.dig(environment.to_s) || config["environments"]&.dig(environment.to_sym) || {} merge_overrides(config, env_config) end |
#export_config(format = :yaml) ⇒ Object
Export configuration
146 147 148 |
# File 'lib/aidp/harness/config_loader.rb', line 146 def export_config(format = :yaml) @validator.export_config(format) end |
#fix_config_issues ⇒ Object
Fix configuration issues
95 96 97 |
# File 'lib/aidp/harness/config_loader.rb', line 95 def fix_config_issues @validator.fix_common_issues end |
#get_step_config(step_name, force_reload = false) ⇒ Object
Get configuration for specific step
206 207 208 209 210 211 212 213 214 215 216 217 |
# File 'lib/aidp/harness/config_loader.rb', line 206 def get_step_config(step_name, force_reload = false) config = load_config(force_reload) return nil unless config step_config = config[:steps]&.dig(step_name.to_sym) || config[:steps]&.dig(step_name.to_s) || config["steps"]&.dig(step_name.to_s) || config["steps"]&.dig(step_name.to_sym) || {} merge_overrides(config, step_config) end |
#get_user_config(user_id = nil, force_reload = false) ⇒ Object
Get configuration for specific user
241 242 243 244 245 246 247 248 249 250 251 252 253 |
# File 'lib/aidp/harness/config_loader.rb', line 241 def get_user_config(user_id = nil, force_reload = false) user_id ||= ENV["USER"] || "default" config = load_config(force_reload) return nil unless config user_config = config[:users]&.dig(user_id.to_sym) || config[:users]&.dig(user_id.to_s) || config["users"]&.dig(user_id.to_s) || config["users"]&.dig(user_id.to_sym) || {} merge_overrides(config, user_config) end |
#harness_config(force_reload = false) ⇒ Object
Get harness configuration with defaults
46 47 48 49 50 51 |
# File 'lib/aidp/harness/config_loader.rb', line 46 def harness_config(force_reload = false) config = load_config(force_reload) return nil unless config config[:harness] || {} end |
#harness_config_with_overrides(overrides = {}) ⇒ Object
Get harness configuration with overrides
123 124 125 126 127 128 129 |
# File 'lib/aidp/harness/config_loader.rb', line 123 def harness_config_with_overrides(overrides = {}) base_harness_config = harness_config return nil unless base_harness_config harness_overrides = overrides[:harness] || overrides["harness"] || {} deep_merge(base_harness_config, harness_overrides) end |
#load_config(force_reload = false) ⇒ Object
Load and validate configuration with caching
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/aidp/harness/config_loader.rb', line 21 def load_config(force_reload = false) return @config_cache if @config_cache && !force_reload && !config_file_changed? # Load and validate configuration validation_result = @validator.load_and_validate if validation_result[:valid] @config_cache = @validator.validated_config @last_loaded = Time.now @last_signature = current_file_signature # Log warnings if any unless validation_result[:warnings].empty? log_warnings(validation_result[:warnings]) end @config_cache else # Handle validation errors handle_validation_errors(validation_result[:errors]) nil end end |
#mode_config(mode, force_reload = false) ⇒ Object
Get configuration for specific harness mode
176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/aidp/harness/config_loader.rb', line 176 def mode_config(mode, force_reload = false) config = load_config(force_reload) return nil unless config case mode.to_s when "analyze" analyze_mode_config(config) when "execute" execute_mode_config(config) else config end end |
#provider_config(provider_name, force_reload = false) ⇒ Object
Get provider configuration with defaults
54 55 56 57 58 59 60 |
# File 'lib/aidp/harness/config_loader.rb', line 54 def provider_config(provider_name, force_reload = false) config = load_config(force_reload) return nil unless config providers = config[:providers] || {} providers[provider_name.to_sym] || providers[provider_name.to_s] end |
#provider_config_with_overrides(provider_name, overrides = {}) ⇒ Object
Get provider configuration with overrides
132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/aidp/harness/config_loader.rb', line 132 def provider_config_with_overrides(provider_name, overrides = {}) provider_config = provider_config(provider_name) return nil unless provider_config provider_overrides = overrides[:providers]&.dig(provider_name.to_sym) || overrides[:providers]&.dig(provider_name.to_s) || overrides["providers"]&.dig(provider_name.to_s) || overrides["providers"]&.dig(provider_name.to_sym) || {} deep_merge(provider_config, provider_overrides) end |
#provider_configured?(provider_name) ⇒ Boolean
Check if provider is configured
110 111 112 |
# File 'lib/aidp/harness/config_loader.rb', line 110 def provider_configured?(provider_name) @validator.provider_configured?(provider_name) end |
#reload_config ⇒ Object
Reload configuration from file
151 152 153 154 155 |
# File 'lib/aidp/harness/config_loader.rb', line 151 def reload_config @config_cache = nil @last_loaded = nil load_config(true) end |
#time_based_config(force_reload = false) ⇒ Object
Get configuration with time-based overrides
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 |
# File 'lib/aidp/harness/config_loader.rb', line 256 def time_based_config(force_reload = false) config = load_config(force_reload) return nil unless config time_overrides = {} current_hour = Time.now.hour # Check for time-based configurations if config[:time_based] time_config = config[:time_based] # Check for hour-based overrides time_config[:hours]&.each do |hour_range, hour_config| if hour_in_range?(current_hour, hour_range) time_overrides = deep_merge(time_overrides, hour_config) end end # Check for day-based overrides if time_config[:days] current_day = Time.now.strftime("%A").downcase day_config = time_config[:days][current_day.to_sym] || time_config[:days][current_day] if day_config time_overrides = deep_merge(time_overrides, day_config) end end end merge_overrides(config, time_overrides) end |
#validate_provider(provider_name) ⇒ Object
Validate specific provider
105 106 107 |
# File 'lib/aidp/harness/config_loader.rb', line 105 def validate_provider(provider_name) @validator.validate_provider(provider_name) end |
#validation_errors ⇒ Object
Get validation errors
164 165 166 167 |
# File 'lib/aidp/harness/config_loader.rb', line 164 def validation_errors validation_result = @validator.validate_existing validation_result[:errors] || [] end |
#validation_warnings ⇒ Object
Get validation warnings
170 171 172 173 |
# File 'lib/aidp/harness/config_loader.rb', line 170 def validation_warnings validation_result = @validator.validate_existing validation_result[:warnings] || [] end |