Module: Legion::API::Routes::Codegen

Defined in:
lib/legion/api/codegen.rb

Class Method Summary collapse

Class Method Details

.registered(app) ⇒ Object

rubocop:disable Metrics/MethodLength



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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/legion/api/codegen.rb', line 7

def self.registered(app) # rubocop:disable Metrics/MethodLength
  app.get '/api/codegen/status' do
    halt 503, json_error('codegen_unavailable', 'codegen not available', status_code: 503) unless defined?(Legion::MCP::SelfGenerate)

    json_response(Legion::MCP::SelfGenerate.status)
  end

  app.get '/api/codegen/generated' do
    unless defined?(Legion::Extensions::Codegen::Helpers::GeneratedRegistry)
      halt 503, json_error('codegen_unavailable', 'codegen not available', status_code: 503)
    end

    status_filter = params[:status]
    records = Legion::Extensions::Codegen::Helpers::GeneratedRegistry.list(status: status_filter)
    json_response(records)
  end

  app.get '/api/codegen/generated/:id' do |id|
    unless defined?(Legion::Extensions::Codegen::Helpers::GeneratedRegistry)
      halt 503, json_error('codegen_unavailable', 'codegen not available', status_code: 503)
    end

    record = Legion::Extensions::Codegen::Helpers::GeneratedRegistry.get(id: id)
    halt 404, json_error('not_found', 'record not found', status_code: 404) unless record

    json_response(record)
  end

  app.post '/api/codegen/generated/:id/approve' do |id|
    unless defined?(Legion::Extensions::Codegen::Runners::ReviewHandler)
      halt 503, json_error('codegen_unavailable', 'review handler not available', status_code: 503)
    end

    result = Legion::Extensions::Codegen::Runners::ReviewHandler.handle_verdict(
      review: { generation_id: id, verdict: :approve, confidence: 1.0 }
    )
    json_response(result)
  end

  app.post '/api/codegen/generated/:id/reject' do |id|
    unless defined?(Legion::Extensions::Codegen::Helpers::GeneratedRegistry)
      halt 503, json_error('codegen_unavailable', 'codegen not available', status_code: 503)
    end

    Legion::Extensions::Codegen::Helpers::GeneratedRegistry.update_status(id: id, status: 'rejected')
    json_response({ id: id, status: 'rejected' })
  end

  app.post '/api/codegen/generated/:id/retry' do |id|
    unless defined?(Legion::Extensions::Codegen::Helpers::GeneratedRegistry)
      halt 503, json_error('codegen_unavailable', 'codegen not available', status_code: 503)
    end

    Legion::Extensions::Codegen::Helpers::GeneratedRegistry.update_status(id: id, status: 'pending')
    json_response({ id: id, status: 'pending' })
  end

  app.get '/api/codegen/gaps' do
    data = if defined?(Legion::MCP::GapDetector)
             Legion::MCP::GapDetector.detect_gaps
           else
             []
           end
    json_response(data)
  end

  app.post '/api/codegen/cycle' do
    return json_response({ triggered: false, reason: 'self_generate not available' }) unless defined?(Legion::MCP::SelfGenerate)

    Legion::MCP::SelfGenerate.instance_variable_set(:@last_cycle_at, nil)
    result = Legion::MCP::SelfGenerate.run_cycle
    json_response(result)
  end
end