Class: RosettAi::Retrofit::Engine

Inherits:
Object
  • Object
show all
Defined in:
lib/rosett_ai/retrofit/engine.rb

Overview

Orchestrates reverse compilation from native AI tool configs to Rosett-AI YAML.

Discovers installed engines, parses native configs, redacts secrets, and writes rosett-ai-compatible YAML source files.

Author:

  • hugo

  • claude

Constant Summary collapse

PARSER_REGISTRY =
{
  'claude' => 'RosettAi::Retrofit::Parsers::ClaudeParser',
  'cursor' => 'RosettAi::Retrofit::Parsers::CursorParser',
  'agents_md' => 'RosettAi::Retrofit::Parsers::AgentsMdParser'
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(output_dir:, engines: nil, force: false) ⇒ Engine

Returns a new instance of Engine.

Parameters:

  • output_dir (Pathname)

    directory to write generated YAML

  • engines (Array<String>, nil) (defaults to: nil)

    specific engines or nil for auto-detect

  • force (Boolean) (defaults to: false)

    overwrite existing files



28
29
30
31
32
33
34
# File 'lib/rosett_ai/retrofit/engine.rb', line 28

def initialize(output_dir:, engines: nil, force: false)
  @output_dir = output_dir
  @requested_engines = engines
  @force = force
  @warnings = []
  @secret_detector = SecretDetector.new(warnings: @warnings)
end

Class Method Details

.available_enginesArray<String>

Returns list of available engine names.

Returns:

  • (Array<String>)

    list of available engine names



64
65
66
# File 'lib/rosett_ai/retrofit/engine.rb', line 64

def self.available_engines
  PARSER_REGISTRY.keys
end

Instance Method Details

#retrofitHash

Performs the retrofit operation.

Returns:

  • (Hash)

    result with :generated, :skipped, :errors, :warnings keys



39
40
41
42
43
44
45
46
47
48
# File 'lib/rosett_ai/retrofit/engine.rb', line 39

def retrofit
  results = { generated: [], skipped: [], errors: [], warnings: [] }
  parsers = resolve_parsers(results)

  parsers.each { |parser| retrofit_engine(parser, results) }

  write_manifest(results) unless results[:generated].empty?
  results[:warnings] = @warnings
  results
end

#simulateHash

Simulates retrofit without writing files.

Returns:

  • (Hash)

    same structure as retrofit but read-only



53
54
55
56
57
58
59
60
61
# File 'lib/rosett_ai/retrofit/engine.rb', line 53

def simulate
  results = { generated: [], skipped: [], errors: [], warnings: [] }
  parsers = resolve_parsers(results)

  parsers.each { |parser| simulate_engine(parser, results) }

  results[:warnings] = @warnings
  results
end