Class: CommitGpt::SetupWizard

Inherits:
Object
  • Object
show all
Defined in:
lib/commitgpt/setup_wizard.rb

Overview

Interactive setup wizard for configuring AI providers

Instance Method Summary collapse

Constructor Details

#initializeSetupWizard



13
14
15
# File 'lib/commitgpt/setup_wizard.rb', line 13

def initialize
  @prompt = TTY::Prompt.new
end

Instance Method Details

#change_modelObject

Change model for the active provider



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/commitgpt/setup_wizard.rb', line 68

def change_model
  provider_config = ConfigManager.get_active_provider_config

  if provider_config.nil? || provider_config['api_key'].nil? || provider_config['api_key'].empty?
    puts "✖ No active provider configured. Please run 'aicm setup'.".red
    return
  end

  # Fetch models and let user select
  models = fetch_models_with_timeout(provider_config['base_url'], provider_config['api_key'])
  return if models.nil?

  model = select_model(models, provider_config['model'])

  # Update config
  ConfigManager.update_provider(provider_config['name'], { 'model' => model })
  reset_provider_inference_params(provider_config['name'])

  puts "\nModel selected: #{model}".green
end

#choose_formatObject

Choose commit message format



90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/commitgpt/setup_wizard.rb', line 90

def choose_format
  prompt = TTY::Prompt.new

  puts "\n→ Choose git commit message format:\n".green

  format = prompt.select('Select format:') do |menu|
    menu.choice 'Simple - Concise commit message', 'simple'
    menu.choice 'Conventional - Follow Conventional Commits specification', 'conventional'
    menu.choice 'Gitmoji - Use Gitmoji emoji standard', 'gitmoji'
  end

  ConfigManager.set_commit_format(format)
  puts "\n✔ Commit format set to: #{format}".green
end

#runObject

Main entry point for setup



18
19
20
21
22
23
24
# File 'lib/commitgpt/setup_wizard.rb', line 18

def run
  ConfigManager.ensure_config_dir
  ConfigManager.generate_default_configs unless ConfigManager.config_exists?

  provider_choice = select_provider
  configure_provider(provider_choice)
end

#switch_providerObject

Switch to a different configured provider



27
28
29
30
31
32
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
# File 'lib/commitgpt/setup_wizard.rb', line 27

def switch_provider
  configured = ConfigManager.configured_providers

  if configured.empty?
    puts "✖ No providers configured. Please run 'aicm setup' first.".red
    return
  end

  choices = configured.map do |p|
    preset = PROVIDER_PRESETS.find { |pr| pr[:value] == p['name'] }
    { name: preset ? preset[:label] : p['name'], value: p['name'] }
  end

  selected = @prompt.select('Choose your provider:', choices)

  # Get current config for this provider
  config = ConfigManager.load_config
  provider = config['providers'].find { |p| p['name'] == selected }

  # Fetch models and let user select
  models = fetch_models_with_timeout(provider['base_url'], provider['api_key'])
  return if models.nil?

  model = select_model(models, provider['model'])

  # Prompt for diff length
  diff_len = prompt_diff_len(provider['diff_len'] || 32_768)

  # Update config
  ConfigManager.update_provider(selected, { 'model' => model, 'diff_len' => diff_len })
  reset_provider_inference_params(selected)
  ConfigManager.set_active_provider(selected)

  preset = PROVIDER_PRESETS.find { |pr| pr[:value] == selected }
  provider_label = preset ? preset[:label] : selected

  puts "\nModel selected: #{model}".green
  puts "Setup complete ✅  You're now using #{provider_label}.".green
end