Module: AIA::ConfigModules::Validator
- Defined in:
- lib/aia/config/validator.rb
Class Method Summary collapse
- .configure_prompt_manager(config) ⇒ Object
- .handle_completion_script(config) ⇒ Object
- .handle_executable_prompt(config) ⇒ Object
- .handle_fuzzy_search_prompt_id(config) ⇒ Object
- .normalize_boolean_flag(config, flag) ⇒ Object
- .normalize_boolean_flags(config) ⇒ Object
- .prepare_pipeline(config) ⇒ Object
- .process_prompt_id_from_args(config, remaining_args) ⇒ Object
- .process_role_configuration(config) ⇒ Object
- .process_stdin_content ⇒ Object
- .tailor_the_config(config) ⇒ Object
- .validate_and_set_context_files(config, remaining_args) ⇒ Object
- .validate_final_prompt_requirements(config) ⇒ Object
- .validate_pipeline_prompts(config) ⇒ Object
- .validate_required_prompt_id(config) ⇒ Object
Class Method Details
.configure_prompt_manager(config) ⇒ Object
151 152 153 154 155 |
# File 'lib/aia/config/validator.rb', line 151 def configure_prompt_manager(config) return unless config.parameter_regex PromptManager::Prompt.parameter_regex = Regexp.new(config.parameter_regex) end |
.handle_completion_script(config) ⇒ Object
133 134 135 136 137 138 |
# File 'lib/aia/config/validator.rb', line 133 def handle_completion_script(config) return unless config.completion FileLoader.generate_completion_script(config.completion) exit end |
.handle_executable_prompt(config) ⇒ Object
71 72 73 74 75 |
# File 'lib/aia/config/validator.rb', line 71 def handle_executable_prompt(config) return unless config.executable_prompt && config.context_files && !config.context_files.empty? config.executable_prompt_file = config.context_files.pop end |
.handle_fuzzy_search_prompt_id(config) ⇒ Object
104 105 106 107 108 109 110 111 |
# File 'lib/aia/config/validator.rb', line 104 def handle_fuzzy_search_prompt_id(config) return unless config.fuzzy && config.prompt_id.empty? # When fuzzy search is enabled but no prompt ID is provided, # set a special value to trigger fuzzy search without an initial query # SMELL: This feels like a cludge config.prompt_id = '__FUZZY_SEARCH__' end |
.normalize_boolean_flag(config, flag) ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/aia/config/validator.rb', line 119 def normalize_boolean_flag(config, flag) return if [TrueClass, FalseClass].include?(config[flag].class) config[flag] = case config[flag] when nil, '', 'false', false false when 'true', true true else # For any other non-empty string value, treat as true true end end |
.normalize_boolean_flags(config) ⇒ Object
113 114 115 116 117 |
# File 'lib/aia/config/validator.rb', line 113 def normalize_boolean_flags(config) normalize_boolean_flag(config, :chat) normalize_boolean_flag(config, :fuzzy) normalize_boolean_flag(config, :consensus) end |
.prepare_pipeline(config) ⇒ Object
157 158 159 160 161 |
# File 'lib/aia/config/validator.rb', line 157 def prepare_pipeline(config) return if config.prompt_id.nil? || config.prompt_id.empty? || config.prompt_id == config.pipeline.first config.pipeline.prepend config.prompt_id end |
.process_prompt_id_from_args(config, remaining_args) ⇒ Object
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/aia/config/validator.rb', line 47 def process_prompt_id_from_args(config, remaining_args) return if remaining_args.empty? maybe_id = remaining_args.first maybe_id_plus = File.join(config.prompts_dir, maybe_id + config.prompt_extname) if AIA.bad_file?(maybe_id) && AIA.good_file?(maybe_id_plus) config.prompt_id = remaining_args.shift end end |
.process_role_configuration(config) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/aia/config/validator.rb', line 84 def process_role_configuration(config) return if config.role.empty? unless config.roles_prefix.empty? unless config.role.start_with?(config.roles_prefix) config.role.prepend "#{config.roles_prefix}/" end end config.roles_dir ||= File.join(config.prompts_dir, config.roles_prefix) if config.prompt_id.nil? || config.prompt_id.empty? if !config.role.nil? && !config.role.empty? config.prompt_id = config.role config.pipeline.prepend config.prompt_id config.role = '' end end end |
.process_stdin_content ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/aia/config/validator.rb', line 32 def process_stdin_content stdin_content = '' if !STDIN.tty? && !STDIN.closed? begin stdin_content << "\n" + STDIN.read STDIN.reopen('/dev/tty') # Reopen STDIN for interactive use rescue => _ # If we can't reopen, continue without error end end stdin_content end |
.tailor_the_config(config) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/aia/config/validator.rb', line 9 def tailor_the_config(config) remaining_args = config.remaining_args.dup config.remaining_args = nil stdin_content = process_stdin_content config.stdin_content = stdin_content if stdin_content && !stdin_content.strip.empty? process_prompt_id_from_args(config, remaining_args) validate_and_set_context_files(config, remaining_args) handle_executable_prompt(config) validate_required_prompt_id(config) process_role_configuration(config) handle_fuzzy_search_prompt_id(config) normalize_boolean_flags(config) handle_completion_script(config) validate_final_prompt_requirements(config) configure_prompt_manager(config) prepare_pipeline(config) validate_pipeline_prompts(config) config end |
.validate_and_set_context_files(config, remaining_args) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/aia/config/validator.rb', line 58 def validate_and_set_context_files(config, remaining_args) return if remaining_args.empty? bad_files = remaining_args.reject { |filename| AIA.good_file?(filename) } if bad_files.any? STDERR.puts "Error: The following files do not exist: #{bad_files.join(', ')}" exit 1 end config.context_files ||= [] config.context_files += remaining_args end |
.validate_final_prompt_requirements(config) ⇒ Object
140 141 142 143 144 145 146 147 148 149 |
# File 'lib/aia/config/validator.rb', line 140 def validate_final_prompt_requirements(config) # Only require a prompt_id if we're not in chat mode, not using fuzzy search, and no context files if !config.chat && !config.fuzzy && (config.prompt_id.nil? || config.prompt_id.empty?) && (!config.context_files || config.context_files.empty?) STDERR.puts "Error: A prompt ID is required unless using --chat, --fuzzy, or providing context files. Use -h or --help for help." exit 1 end # If we're in chat mode with context files but no prompt_id, that's valid # This is handled implicitly - no action needed end |
.validate_pipeline_prompts(config) ⇒ Object
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/aia/config/validator.rb', line 163 def validate_pipeline_prompts(config) return if config.pipeline.empty? and_exit = false config.pipeline.each do |prompt_id| # Skip empty prompt IDs (can happen in chat-only mode) next if prompt_id.nil? || prompt_id.empty? prompt_file_path = File.join(config.prompts_dir, "#{prompt_id}.txt") unless File.exist?(prompt_file_path) STDERR.puts "Error: Prompt ID '#{prompt_id}' does not exist at #{prompt_file_path}" and_exit = true end end exit(1) if and_exit end |
.validate_required_prompt_id(config) ⇒ Object
77 78 79 80 81 82 |
# File 'lib/aia/config/validator.rb', line 77 def validate_required_prompt_id(config) return unless config.prompt_id.nil? && !config.chat && !config.fuzzy STDERR.puts "Error: A prompt ID is required unless using --chat, --fuzzy, or providing context files. Use -h or --help for help." exit 1 end |