Class: ClaudeSwarm::Commands::Show

Inherits:
Object
  • Object
show all
Defined in:
lib/claude_swarm/commands/show.rb

Instance Method Summary collapse

Instance Method Details

#execute(session_id) ⇒ Object



6
7
8
9
10
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
# File 'lib/claude_swarm/commands/show.rb', line 6

def execute(session_id)
  session_path = find_session_path(session_id)
  unless session_path
    puts "Session not found: #{session_id}"
    exit(1)
  end

  # Load config to get main instance name
  config = YamlLoader.load_config_file(File.join(session_path, "config.yml"))
  main_instance_name = config.dig("swarm", "main")

  # Parse all events to build instance data
  log_file = File.join(session_path, "session.log.json")
  instances = SessionCostCalculator.parse_instance_hierarchy(log_file)

  # Calculate total cost (excluding main if not available)
  total_cost = instances.values.sum { |i| i[:cost] }
  cost_display = if instances[main_instance_name] && instances[main_instance_name][:has_cost_data]
    format("$%.4f", total_cost)
  else
    "#{format("$%.4f", total_cost)} (excluding main instance)"
  end

  # Display session info
  puts "Session: #{session_id}"
  puts "Session Path: #{session_path}"
  puts "Swarm: #{config.dig("swarm", "name")}"

  # Display runtime if available
  runtime_info = get_runtime_info(session_path)
  puts "Runtime: #{runtime_info}" if runtime_info

  puts "Total Cost: #{cost_display}"

  # Try to read root directory
  root_dir_file = File.join(session_path, "root_directory")
  puts "Root Directory: #{File.read(root_dir_file).strip}" if File.exist?(root_dir_file)

  puts
  puts "Instance Hierarchy:"
  puts "-" * 50

  # Find root instances
  roots = instances.values.select { |i| i[:called_by].empty? }
  roots.each do |instance|
    display_instance_tree(instance, instances, 0, main_instance_name)
  end

  # Add note about interactive main instance
  return if instances[main_instance_name]&.dig(:has_cost_data)

  puts
  puts "Note: Main instance (#{main_instance_name}) cost is not tracked in interactive mode."
  puts "      View costs directly in the Claude interface."
end