11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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
|
# File 'lib/irb/command/qq.rb', line 11
def execute(question)
question = question.to_s.strip
if question.empty?
puts "[girb] Usage: qq \"your question here\""
puts "[girb] qq session clear - Clear current session"
puts "[girb] qq session list - List saved sessions"
return
end
if question.start_with?("session ")
handle_session_command(question.sub(/^session\s+/, ""))
return
end
unless Girb.configuration&.provider
puts "[girb] Error: No LLM provider configured."
puts "[girb] Install a provider gem and configure it:"
puts "[girb] gem install girb-ruby_llm"
puts "[girb] export GIRB_MODEL=gemini-2.5-flash"
puts "[girb] export GEMINI_API_KEY=your-key"
return
end
Girb::IrbIntegration.start_session! if Girb::SessionPersistence.enabled?
current_binding = irb_context.workspace.binding
line_no = irb_context.line_no rescue 0
Girb::SessionHistory.record(line_no, question, is_ai_question: true)
context = Girb::ContextBuilder.new(
current_binding,
irb_context
).build
if Girb.configuration.debug
puts "[girb] Context collected:"
require "yaml"
puts context.to_yaml
end
client = Girb::AiClient.new
client.ask(question, context, binding: current_binding, line_no: line_no, irb_context: irb_context)
rescue Girb::Error => e
puts "[girb] Error: #{e.message}"
rescue StandardError => e
puts "[girb] Error: #{e.message}"
puts e.backtrace.first(5).join("\n") if Girb.configuration&.debug
end
|