Class: RubyTodo::AIAssistantCommand

Overview

Main AI Assistant command class

Constant Summary

Constants included from OpenAIIntegration

OpenAIIntegration::SYSTEM_PROMPT

Constants included from OpenAIDocumentation

OpenAIDocumentation::CLI_DOCUMENTATION

Class Method Summary collapse

Instance Method Summary collapse

Methods included from TaskMovementHelpers

#handle_move_task_by_title

Methods included from ExportFileHelpers

#default_export_filename, #export_data_to_file, #export_to_csv, #export_to_json, #extract_custom_filename, #extract_export_parameters, #format_tags_for_csv

Methods included from ExportCoreHelpers

#collect_tasks_by_status, #handle_export_recent_done_tasks, #handle_export_tasks_by_status, #task_to_hash

Methods included from ExportPatternHelpers

#determine_export_status, #export_all_done_tasks_regex, #export_archived_tasks_regex, #export_done_tasks_regex, #export_in_progress_tasks_regex, #export_tasks_regex, #export_tasks_to_csv_regex, #export_tasks_to_file_regex, #export_tasks_to_json_regex, #export_tasks_with_status_regex, #export_todo_tasks_regex, #handle_export_task_patterns, #normalize_status, #save_tasks_to_file_regex

Methods included from StatusFilteringHelpers

#handle_filtered_tasks, #handle_status_filtered_tasks, #handle_status_filtering, #normalize_status, #status_prefix_tasks_regex, #tasks_by_status_regex, #tasks_with_status_regex

Methods included from AIAssistantHelpers

#format_table_with_wrapping, #load_api_key_from_config, #save_config, #truncate_text, #wrap_text

Methods included from RubyTodo::AIAssistant::ParamExtractor

#extract_description_param, #extract_due_date_param, #extract_tags_param

Methods included from RubyTodo::AIAssistant::TaskResponseProcessor

#create_task_from_details, #extract_task_details_with_regex, #normalize_priority, #parse_task_details_response

Methods included from RubyTodo::AIAssistant::TaskOpenAIQuery

#query_openai_for_task_details

Methods included from RubyTodo::AIAssistant::TaskCreator

#build_task_query, #default_notebook_name, #extract_task_description, #generate_task_details

Methods included from OpenAIApiInteraction

#query_openai

Methods included from OpenAIResponseHandling

#extract_command_explanation, #handle_openai_error, #handle_openai_response, #parse_openai_response_content

Methods included from OpenAIAdvancedPromptBuilder

#build_enriched_context, #build_task_creation_prompt, #extract_task_info_from_prompt

Methods included from OpenAIPromptBuilderCore

#format_task_for_prompt

Class Method Details



895
896
897
# File 'lib/ruby_todo/commands/ai_assistant.rb', line 895

def self.banner(command, _namespace = nil, _subcommand: false)
  "#{basename} #{command.name}"
end

.exit_on_failure?Boolean



899
900
901
# File 'lib/ruby_todo/commands/ai_assistant.rb', line 899

def self.exit_on_failure?
  true
end

Instance Method Details

#ask(*prompt_args, **options) ⇒ Object



871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
# File 'lib/ruby_todo/commands/ai_assistant.rb', line 871

def ask(*prompt_args, **options)
  prompt = prompt_args.join(" ")
  validate_prompt(prompt)
  @options = options || {}
  say "\n=== Starting AI Assistant with prompt: '#{prompt}' ===" if @options[:verbose]

  # Add direct output that will definitely be caught by the StringIO in tests
  puts "Processing your request: #{prompt}"

  # Use a normal method call without rescue to allow errors to bubble up
  process_ai_query(prompt)

  # Ensure there's always output before returning
  puts "Request completed."
end

#configureObject



888
889
890
891
892
893
# File 'lib/ruby_todo/commands/ai_assistant.rb', line 888

def configure
  prompt = TTY::Prompt.new
  api_key = prompt.mask("Enter your OpenAI API key:")
  save_config("openai", api_key)
  say "Configuration saved successfully!".green
end