Class: Ace::Review::Organisms::ReviewManager

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/review/organisms/review_manager.rb

Overview

Main orchestrator for code review workflow

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(project_root: nil) ⇒ ReviewManager

Returns a new instance of ReviewManager.



20
21
22
23
24
25
26
27
# File 'lib/ace/review/organisms/review_manager.rb', line 20

def initialize(project_root: nil)
  @project_root = project_root
  @preset_manager = Ace::Review::Molecules::PresetManager.new(project_root: project_root)
  @prompt_resolver = Ace::Review::Molecules::NavPromptResolver.new
  @prompt_composer = Ace::Review::Molecules::PromptComposer.new(resolver: @prompt_resolver)
  @subject_extractor = Ace::Review::Molecules::SubjectExtractor.new
  @context_extractor = Ace::Review::Molecules::ContextExtractor.new
end

Instance Attribute Details

#context_extractorObject (readonly)

Returns the value of attribute context_extractor.



17
18
19
# File 'lib/ace/review/organisms/review_manager.rb', line 17

def context_extractor
  @context_extractor
end

#preset_managerObject (readonly)

Returns the value of attribute preset_manager.



17
18
19
# File 'lib/ace/review/organisms/review_manager.rb', line 17

def preset_manager
  @preset_manager
end

#prompt_composerObject (readonly)

Returns the value of attribute prompt_composer.



17
18
19
# File 'lib/ace/review/organisms/review_manager.rb', line 17

def prompt_composer
  @prompt_composer
end

#prompt_resolverObject (readonly)

Returns the value of attribute prompt_resolver.



17
18
19
# File 'lib/ace/review/organisms/review_manager.rb', line 17

def prompt_resolver
  @prompt_resolver
end

#subject_extractorObject (readonly)

Returns the value of attribute subject_extractor.



17
18
19
# File 'lib/ace/review/organisms/review_manager.rb', line 17

def subject_extractor
  @subject_extractor
end

Instance Method Details

#execute_review(options) ⇒ Hash

Execute a code review with the given options

Parameters:

  • options (ReviewOptions)

    review options object

Returns:

  • (Hash)

    review results



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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/ace/review/organisms/review_manager.rb', line 32

def execute_review(options)
  # Convert to ReviewOptions if needed
  options = ensure_review_options(options)

  # Step 1: Prepare configuration
  config_result = prepare_review_config(options)
  return config_result unless config_result[:success]

  # Step 2: Create session directory early (needed for ace-bundle)
  cache_dir = create_cache_directory
  session_dir = create_session_directory(options, cache_dir)

  # Step 3: Extract content
  content_result = extract_review_content(config_result[:config], options)
  return content_result unless content_result[:success]

  # Step 4: Compose prompts via ace-bundle
  prompt_result = compose_review_prompt(
    config_result[:config],
    content_result[:context],
    content_result[:subject],
    session_dir,
    options,  # Pass options to check for PR mode
    content_result[:typed_subject_config]  # Pass typed subject config directly
  )
  return prompt_result unless prompt_result[:success]

  # Step 5: Prepare review data structure
  review_data = build_review_data(
    options,
    config_result[:config],
    content_result,
    prompt_result,  # Pass the entire prompt_result to handle both formats
    cache_dir
  )

  # Step 6: Save session files
  save_session_files(session_dir, review_data)

  # Step 7: Execute or just prepare
  if options.auto_execute
    execute_with_llm(review_data, session_dir, options)
  else
    {
      success: true,
      session_dir: session_dir,
      system_prompt_file: File.join(session_dir, "system.prompt.md"),
      user_prompt_file: File.join(session_dir, "user.prompt.md"),
      message: "Review session prepared in #{session_dir}"
    }
  end
end

#list_presetsObject

List available presets



86
87
88
# File 'lib/ace/review/organisms/review_manager.rb', line 86

def list_presets
  @preset_manager.available_presets
end

#list_promptsObject

List available prompt modules



91
92
93
94
# File 'lib/ace/review/organisms/review_manager.rb', line 91

def list_prompts
  prompts = @prompt_resolver.list_available
  prompts.is_a?(Hash) ? prompts.keys : []
end