Class: Norn::ConfigLoader
- Inherits:
-
Object
- Object
- Norn::ConfigLoader
- Defined in:
- lib/norn/config_loader.rb
Constant Summary collapse
- Schema =
Define validation schema for our configuration using dry-schema
Dry::Schema.Params do optional(:llm_provider).filled(:string, included_in?: ["openai", "gemini"]) optional(:sandbox_info).maybe(:string) optional(:openai_model).maybe(:string) optional(:gemini_model).maybe(:string) optional(:temperature).maybe(:float) optional(:git_addon_enabled).maybe(:bool) optional(:git_addon_message).maybe(:string) optional(:session_cli_format).maybe(:string) optional(:workspace_root).maybe(:string) # New instruction structure optional(:instructions).hash do optional(:clear).array(:string) optional(:base).maybe(:string) optional(:prepend).array(:string) optional(:append).array(:string) end end
Class Method Summary collapse
-
.load ⇒ Object
Loads the config from XDG, Local Workspace, and Environment, in that order.
Class Method Details
.load ⇒ Object
Loads the config from XDG, Local Workspace, and Environment, in that order. Returns the validated configuration hash wrapped in a Dry::Monads::Result.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/norn/config_loader.rb', line 33 def load global_config = load_first_match(global_paths) || {} local_config = Norn::LocalConfigReader.new.read || {} config_data = {} config_data.merge!(global_config) config_data.merge!(local_config) # Merge instructions block customly global_inst = global_config[:instructions] || {} local_inst = local_config[:instructions] || {} compiled_inst = compile_instructions_block(global_inst, local_inst) config_data[:instructions] = compiled_inst # 3. Load Environment Variables if ENV["NORN_PROVIDER"] && !ENV["NORN_PROVIDER"].strip.empty? config_data[:llm_provider] = ENV["NORN_PROVIDER"].strip end # Normalize keys (e.g. map alias 'provider' to 'llm_provider') config_data = normalize_keys(config_data) # 4. Validate with dry-schema validation = Schema.call(config_data) if validation.success? # Apply validated values to dry-configurable Config validation.to_h.each do |key, value| Norn::Config.config.send("#{key}=", value) if value end else # Print validation warnings to stderr warn "Norn Config Warning: #{validation.errors.to_h.inspect}" end Success(validation.to_h) end |