code_healer 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +70 -0
- data/GEM_SUMMARY.md +307 -0
- data/README.md +281 -0
- data/code_healer.gemspec +77 -0
- data/config/code_healer.yml.example +104 -0
- data/docs/INSTALLATION.md +439 -0
- data/examples/basic_usage.rb +160 -0
- data/exe/code_healer-setup +7 -0
- data/lib/code_healer/application_job.rb +7 -0
- data/lib/code_healer/business_context_analyzer.rb +464 -0
- data/lib/code_healer/business_context_loader.rb +273 -0
- data/lib/code_healer/business_context_manager.rb +297 -0
- data/lib/code_healer/business_logic_generator.rb +94 -0
- data/lib/code_healer/business_rule_applier.rb +54 -0
- data/lib/code_healer/claude_code_evolution_handler.rb +224 -0
- data/lib/code_healer/claude_error_monitor.rb +48 -0
- data/lib/code_healer/config_manager.rb +275 -0
- data/lib/code_healer/context_aware_prompt_builder.rb +153 -0
- data/lib/code_healer/core.rb +513 -0
- data/lib/code_healer/error_handler.rb +141 -0
- data/lib/code_healer/evolution_job.rb +99 -0
- data/lib/code_healer/global_handler.rb +130 -0
- data/lib/code_healer/healing_job.rb +167 -0
- data/lib/code_healer/mcp.rb +108 -0
- data/lib/code_healer/mcp_prompts.rb +111 -0
- data/lib/code_healer/mcp_server.rb +389 -0
- data/lib/code_healer/mcp_tools.rb +2364 -0
- data/lib/code_healer/pull_request_creator.rb +143 -0
- data/lib/code_healer/setup.rb +390 -0
- data/lib/code_healer/simple_evolution.rb +737 -0
- data/lib/code_healer/simple_global_handler.rb +122 -0
- data/lib/code_healer/simple_healer.rb +515 -0
- data/lib/code_healer/terminal_integration.rb +87 -0
- data/lib/code_healer/usage_analyzer.rb +92 -0
- data/lib/code_healer/version.rb +5 -0
- data/lib/code_healer.rb +67 -0
- metadata +411 -0
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module CodeHealer
|
5
|
+
class TerminalIntegration
|
6
|
+
class << self
|
7
|
+
def errors_dir
|
8
|
+
return nil unless defined?(Rails) && Rails.root
|
9
|
+
Rails.root.join('claude_terminal', 'errors')
|
10
|
+
end
|
11
|
+
|
12
|
+
def fixes_dir
|
13
|
+
return nil unless defined?(Rails) && Rails.root
|
14
|
+
Rails.root.join('claude_terminal', 'fixes')
|
15
|
+
end
|
16
|
+
|
17
|
+
def setup_directories
|
18
|
+
return unless errors_dir && fixes_dir
|
19
|
+
FileUtils.mkdir_p(errors_dir)
|
20
|
+
FileUtils.mkdir_p(fixes_dir)
|
21
|
+
end
|
22
|
+
|
23
|
+
def report_error(error, context = {})
|
24
|
+
return nil unless errors_dir
|
25
|
+
setup_directories
|
26
|
+
|
27
|
+
error_id = generate_error_id
|
28
|
+
error_data = {
|
29
|
+
timestamp: Time.current.strftime("%Y-%m-%d %H:%M:%S"),
|
30
|
+
error_id: error_id,
|
31
|
+
error: {
|
32
|
+
type: error.class.name,
|
33
|
+
message: error.message,
|
34
|
+
backtrace: error.backtrace&.first(10)
|
35
|
+
},
|
36
|
+
context: context,
|
37
|
+
app_state: {
|
38
|
+
rails_env: defined?(Rails) ? Rails.env : 'unknown',
|
39
|
+
request_id: Thread.current[:request_id],
|
40
|
+
user_agent: context[:user_agent],
|
41
|
+
params: context[:params]
|
42
|
+
},
|
43
|
+
codebase_context: {
|
44
|
+
controller: context[:controller_name],
|
45
|
+
action: context[:action_name],
|
46
|
+
model: context[:model_name],
|
47
|
+
method: context[:method_name]
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
# Write error for Claude Terminal to process
|
52
|
+
File.write(
|
53
|
+
errors_dir.join("#{error_id}.json"),
|
54
|
+
JSON.pretty_generate(error_data)
|
55
|
+
)
|
56
|
+
|
57
|
+
if defined?(Rails) && Rails.logger
|
58
|
+
Rails.logger.info "🤖 Error reported to Claude Terminal: #{error_id}"
|
59
|
+
end
|
60
|
+
error_id
|
61
|
+
end
|
62
|
+
|
63
|
+
def check_for_fix(error_id, timeout: 30)
|
64
|
+
return nil unless fixes_dir
|
65
|
+
fix_file = fixes_dir.join("#{error_id}_fix.json")
|
66
|
+
|
67
|
+
# Wait for Claude Terminal to provide a fix
|
68
|
+
timeout.times do
|
69
|
+
if File.exist?(fix_file)
|
70
|
+
fix_data = JSON.parse(File.read(fix_file))
|
71
|
+
File.delete(fix_file) # Clean up
|
72
|
+
return fix_data
|
73
|
+
end
|
74
|
+
sleep 1
|
75
|
+
end
|
76
|
+
|
77
|
+
nil # No fix available within timeout
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
def self.generate_error_id
|
83
|
+
"error_#{Time.current.to_i}_#{SecureRandom.hex(4)}"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module CodeHealer
|
2
|
+
class UsageAnalyzer
|
3
|
+
class << self
|
4
|
+
def analyze_usage(klass, usage_data)
|
5
|
+
new(klass, usage_data).analyze
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_reader :klass, :usage_data, :logger
|
10
|
+
|
11
|
+
def initialize(klass, usage_data)
|
12
|
+
@klass = klass
|
13
|
+
@usage_data = usage_data
|
14
|
+
@logger = Logger.new(Rails.root.join('log', 'self_evolving.log'))
|
15
|
+
end
|
16
|
+
|
17
|
+
def analyze
|
18
|
+
return false unless valid_usage_data?
|
19
|
+
|
20
|
+
begin
|
21
|
+
patterns = detect_patterns
|
22
|
+
return false if patterns.empty?
|
23
|
+
|
24
|
+
patterns.each do |pattern|
|
25
|
+
propose_method(pattern)
|
26
|
+
end
|
27
|
+
|
28
|
+
true
|
29
|
+
rescue => e
|
30
|
+
logger.error("Usage analysis failed: #{e.message}")
|
31
|
+
false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def valid_usage_data?
|
38
|
+
# Implement your validation logic here
|
39
|
+
# For example: minimum data points, required fields, etc.
|
40
|
+
usage_data.is_a?(Array) && usage_data.length >= 5
|
41
|
+
end
|
42
|
+
|
43
|
+
def detect_patterns
|
44
|
+
# This is where you'd implement your pattern detection logic
|
45
|
+
# For now, we'll return a simple example pattern
|
46
|
+
[
|
47
|
+
{
|
48
|
+
type: 'filter',
|
49
|
+
frequency: 10,
|
50
|
+
parameters: { days: 30 },
|
51
|
+
suggested_method: 'active_since'
|
52
|
+
}
|
53
|
+
]
|
54
|
+
end
|
55
|
+
|
56
|
+
def propose_method(pattern)
|
57
|
+
method_name = pattern[:suggested_method]
|
58
|
+
context = {
|
59
|
+
pattern_type: pattern[:type],
|
60
|
+
frequency: pattern[:frequency],
|
61
|
+
parameters: pattern[:parameters],
|
62
|
+
detected_at: Time.current
|
63
|
+
}
|
64
|
+
|
65
|
+
success = Core.evolve_method(klass, method_name, context)
|
66
|
+
|
67
|
+
if success
|
68
|
+
log_successful_proposal(pattern)
|
69
|
+
else
|
70
|
+
log_failed_proposal(pattern)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def log_successful_proposal(pattern)
|
75
|
+
logger.info({
|
76
|
+
timestamp: Time.current,
|
77
|
+
event: 'successful_proposal',
|
78
|
+
class: klass.name,
|
79
|
+
pattern: pattern
|
80
|
+
}.to_json)
|
81
|
+
end
|
82
|
+
|
83
|
+
def log_failed_proposal(pattern)
|
84
|
+
logger.info({
|
85
|
+
timestamp: Time.current,
|
86
|
+
event: 'failed_proposal',
|
87
|
+
class: klass.name,
|
88
|
+
pattern: pattern
|
89
|
+
}.to_json)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
data/lib/code_healer.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "code_healer/version"
|
4
|
+
|
5
|
+
# Require external gems explicitly
|
6
|
+
require 'openai'
|
7
|
+
require 'sidekiq'
|
8
|
+
require 'git'
|
9
|
+
require 'octokit'
|
10
|
+
|
11
|
+
# CodeHealer - AI-Powered Code Healing and Self-Repair System
|
12
|
+
module CodeHealer
|
13
|
+
class Error < StandardError; end
|
14
|
+
|
15
|
+
# Your code goes here...
|
16
|
+
end
|
17
|
+
|
18
|
+
# Autoload all the main classes
|
19
|
+
autoload :ConfigManager, "code_healer/config_manager"
|
20
|
+
autoload :BusinessContextManager, "code_healer/business_context_manager"
|
21
|
+
autoload :ClaudeCodeEvolutionHandler, "code_healer/claude_code_evolution_handler"
|
22
|
+
autoload :SimpleHealer, "code_healer/simple_healer"
|
23
|
+
autoload :HealingJob, "code_healer/healing_job"
|
24
|
+
autoload :PullRequestCreator, "code_healer/pull_request_creator"
|
25
|
+
autoload :McpServer, "code_healer/mcp_server"
|
26
|
+
autoload :McpTools, "code_healer/mcp_tools"
|
27
|
+
autoload :McpPrompts, "code_healer/mcp_prompts"
|
28
|
+
autoload :MCP, "code_healer/mcp"
|
29
|
+
|
30
|
+
# Rails integration
|
31
|
+
if defined?(Rails)
|
32
|
+
require "rails"
|
33
|
+
|
34
|
+
# Railtie for automatic Rails integration
|
35
|
+
class CodeHealerRailtie < Rails::Railtie
|
36
|
+
initializer "code_healer.configure" do |app|
|
37
|
+
# Load configuration
|
38
|
+
config_path = Rails.root.join("config", "code_healer.yml")
|
39
|
+
|
40
|
+
if File.exist?(config_path)
|
41
|
+
puts "🏥 CodeHealer: Loading configuration from #{config_path}"
|
42
|
+
|
43
|
+
# Load all the main classes
|
44
|
+
Dir[File.join(__dir__, "code_healer", "*.rb")].each do |file|
|
45
|
+
# Skip the setup script as it's only for the executable
|
46
|
+
next if file.include?("setup.rb")
|
47
|
+
|
48
|
+
require file
|
49
|
+
end
|
50
|
+
|
51
|
+
# Initialize Core and set up error handling
|
52
|
+
if defined?(CodeHealer::Core)
|
53
|
+
config = YAML.load_file(config_path)
|
54
|
+
CodeHealer::Core.initialize(config)
|
55
|
+
CodeHealer::Core.setup_error_handling
|
56
|
+
end
|
57
|
+
|
58
|
+
puts "🏥 CodeHealer: Initialized successfully!"
|
59
|
+
puts " Configuration loaded from: #{config_path}"
|
60
|
+
puts " Run 'code_healer-setup' to reconfigure if needed"
|
61
|
+
else
|
62
|
+
puts "🏥 CodeHealer: No configuration file found at #{config_path}"
|
63
|
+
puts " Run 'code_healer-setup' to configure CodeHealer"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
metadata
ADDED
@@ -0,0 +1,411 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: code_healer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Deepan Kumar
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2025-08-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 6.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 6.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sidekiq
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 6.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 6.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: redis
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '4.0'
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 4.0.0
|
51
|
+
type: :runtime
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - "~>"
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '4.0'
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 4.0.0
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: octokit
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '4.0'
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 4.0.0
|
71
|
+
type: :runtime
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - "~>"
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '4.0'
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 4.0.0
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: git
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - "~>"
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '1.0'
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 1.0.0
|
91
|
+
type: :runtime
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '1.0'
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: 1.0.0
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
name: openai
|
103
|
+
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - "~>"
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: 0.16.0
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.16.0
|
111
|
+
type: :runtime
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.16.0
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 0.16.0
|
121
|
+
- !ruby/object:Gem::Dependency
|
122
|
+
name: activesupport
|
123
|
+
requirement: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: 6.0.0
|
128
|
+
type: :runtime
|
129
|
+
prerelease: false
|
130
|
+
version_requirements: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: 6.0.0
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: actionpack
|
137
|
+
requirement: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 6.0.0
|
142
|
+
type: :runtime
|
143
|
+
prerelease: false
|
144
|
+
version_requirements: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: 6.0.0
|
149
|
+
- !ruby/object:Gem::Dependency
|
150
|
+
name: activemodel
|
151
|
+
requirement: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - ">="
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: 6.0.0
|
156
|
+
type: :runtime
|
157
|
+
prerelease: false
|
158
|
+
version_requirements: !ruby/object:Gem::Requirement
|
159
|
+
requirements:
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: 6.0.0
|
163
|
+
- !ruby/object:Gem::Dependency
|
164
|
+
name: bundler
|
165
|
+
requirement: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - ">="
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: 2.0.0
|
170
|
+
type: :development
|
171
|
+
prerelease: false
|
172
|
+
version_requirements: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - ">="
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: 2.0.0
|
177
|
+
- !ruby/object:Gem::Dependency
|
178
|
+
name: rake
|
179
|
+
requirement: !ruby/object:Gem::Requirement
|
180
|
+
requirements:
|
181
|
+
- - ">="
|
182
|
+
- !ruby/object:Gem::Version
|
183
|
+
version: 13.0.0
|
184
|
+
type: :development
|
185
|
+
prerelease: false
|
186
|
+
version_requirements: !ruby/object:Gem::Requirement
|
187
|
+
requirements:
|
188
|
+
- - ">="
|
189
|
+
- !ruby/object:Gem::Version
|
190
|
+
version: 13.0.0
|
191
|
+
- !ruby/object:Gem::Dependency
|
192
|
+
name: rspec
|
193
|
+
requirement: !ruby/object:Gem::Requirement
|
194
|
+
requirements:
|
195
|
+
- - ">="
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: 3.0.0
|
198
|
+
type: :development
|
199
|
+
prerelease: false
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
requirements:
|
202
|
+
- - ">="
|
203
|
+
- !ruby/object:Gem::Version
|
204
|
+
version: 3.0.0
|
205
|
+
- !ruby/object:Gem::Dependency
|
206
|
+
name: rspec-rails
|
207
|
+
requirement: !ruby/object:Gem::Requirement
|
208
|
+
requirements:
|
209
|
+
- - ">="
|
210
|
+
- !ruby/object:Gem::Version
|
211
|
+
version: 5.0.0
|
212
|
+
type: :development
|
213
|
+
prerelease: false
|
214
|
+
version_requirements: !ruby/object:Gem::Requirement
|
215
|
+
requirements:
|
216
|
+
- - ">="
|
217
|
+
- !ruby/object:Gem::Version
|
218
|
+
version: 5.0.0
|
219
|
+
- !ruby/object:Gem::Dependency
|
220
|
+
name: factory_bot_rails
|
221
|
+
requirement: !ruby/object:Gem::Requirement
|
222
|
+
requirements:
|
223
|
+
- - ">="
|
224
|
+
- !ruby/object:Gem::Version
|
225
|
+
version: 6.0.0
|
226
|
+
type: :development
|
227
|
+
prerelease: false
|
228
|
+
version_requirements: !ruby/object:Gem::Requirement
|
229
|
+
requirements:
|
230
|
+
- - ">="
|
231
|
+
- !ruby/object:Gem::Version
|
232
|
+
version: 6.0.0
|
233
|
+
- !ruby/object:Gem::Dependency
|
234
|
+
name: faker
|
235
|
+
requirement: !ruby/object:Gem::Requirement
|
236
|
+
requirements:
|
237
|
+
- - ">="
|
238
|
+
- !ruby/object:Gem::Version
|
239
|
+
version: 2.0.0
|
240
|
+
type: :development
|
241
|
+
prerelease: false
|
242
|
+
version_requirements: !ruby/object:Gem::Requirement
|
243
|
+
requirements:
|
244
|
+
- - ">="
|
245
|
+
- !ruby/object:Gem::Version
|
246
|
+
version: 2.0.0
|
247
|
+
- !ruby/object:Gem::Dependency
|
248
|
+
name: webmock
|
249
|
+
requirement: !ruby/object:Gem::Requirement
|
250
|
+
requirements:
|
251
|
+
- - ">="
|
252
|
+
- !ruby/object:Gem::Version
|
253
|
+
version: 3.0.0
|
254
|
+
type: :development
|
255
|
+
prerelease: false
|
256
|
+
version_requirements: !ruby/object:Gem::Requirement
|
257
|
+
requirements:
|
258
|
+
- - ">="
|
259
|
+
- !ruby/object:Gem::Version
|
260
|
+
version: 3.0.0
|
261
|
+
- !ruby/object:Gem::Dependency
|
262
|
+
name: vcr
|
263
|
+
requirement: !ruby/object:Gem::Requirement
|
264
|
+
requirements:
|
265
|
+
- - ">="
|
266
|
+
- !ruby/object:Gem::Version
|
267
|
+
version: 6.0.0
|
268
|
+
type: :development
|
269
|
+
prerelease: false
|
270
|
+
version_requirements: !ruby/object:Gem::Requirement
|
271
|
+
requirements:
|
272
|
+
- - ">="
|
273
|
+
- !ruby/object:Gem::Version
|
274
|
+
version: 6.0.0
|
275
|
+
- !ruby/object:Gem::Dependency
|
276
|
+
name: rubocop
|
277
|
+
requirement: !ruby/object:Gem::Requirement
|
278
|
+
requirements:
|
279
|
+
- - ">="
|
280
|
+
- !ruby/object:Gem::Version
|
281
|
+
version: 1.0.0
|
282
|
+
type: :development
|
283
|
+
prerelease: false
|
284
|
+
version_requirements: !ruby/object:Gem::Requirement
|
285
|
+
requirements:
|
286
|
+
- - ">="
|
287
|
+
- !ruby/object:Gem::Version
|
288
|
+
version: 1.0.0
|
289
|
+
- !ruby/object:Gem::Dependency
|
290
|
+
name: rubocop-rails
|
291
|
+
requirement: !ruby/object:Gem::Requirement
|
292
|
+
requirements:
|
293
|
+
- - ">="
|
294
|
+
- !ruby/object:Gem::Version
|
295
|
+
version: 2.0.0
|
296
|
+
type: :development
|
297
|
+
prerelease: false
|
298
|
+
version_requirements: !ruby/object:Gem::Requirement
|
299
|
+
requirements:
|
300
|
+
- - ">="
|
301
|
+
- !ruby/object:Gem::Version
|
302
|
+
version: 2.0.0
|
303
|
+
- !ruby/object:Gem::Dependency
|
304
|
+
name: yard
|
305
|
+
requirement: !ruby/object:Gem::Requirement
|
306
|
+
requirements:
|
307
|
+
- - ">="
|
308
|
+
- !ruby/object:Gem::Version
|
309
|
+
version: 0.9.0
|
310
|
+
type: :development
|
311
|
+
prerelease: false
|
312
|
+
version_requirements: !ruby/object:Gem::Requirement
|
313
|
+
requirements:
|
314
|
+
- - ">="
|
315
|
+
- !ruby/object:Gem::Version
|
316
|
+
version: 0.9.0
|
317
|
+
- !ruby/object:Gem::Dependency
|
318
|
+
name: redcarpet
|
319
|
+
requirement: !ruby/object:Gem::Requirement
|
320
|
+
requirements:
|
321
|
+
- - ">="
|
322
|
+
- !ruby/object:Gem::Version
|
323
|
+
version: 3.0.0
|
324
|
+
type: :development
|
325
|
+
prerelease: false
|
326
|
+
version_requirements: !ruby/object:Gem::Requirement
|
327
|
+
requirements:
|
328
|
+
- - ">="
|
329
|
+
- !ruby/object:Gem::Version
|
330
|
+
version: 3.0.0
|
331
|
+
description: "CodeHealer is a revolutionary gem that enables your Ruby applications
|
332
|
+
to \nautomatically detect, analyze, and fix errors using AI. It integrates \nwith
|
333
|
+
OpenAI API, Claude Code terminal, and provides intelligent error handling, \nbusiness
|
334
|
+
context awareness, and automated Git operations.\n\nFeatures:\n- \U0001F916 AI-powered
|
335
|
+
error analysis and code generation\n- \U0001F3AF Business context-aware fixes\n-
|
336
|
+
\U0001F504 Multiple healing strategies (API, Claude Code, Hybrid)\n- \U0001F4DD
|
337
|
+
Automated Git operations and PR creation\n- \U0001F4CB Business requirements integration
|
338
|
+
from markdown\n- ⚡ Background job processing with Sidekiq\n- \U0001F3A8 Configurable
|
339
|
+
via YAML files\n"
|
340
|
+
email:
|
341
|
+
- deepan.ppgit@gmail.com
|
342
|
+
executables:
|
343
|
+
- code_healer-setup
|
344
|
+
extensions: []
|
345
|
+
extra_rdoc_files: []
|
346
|
+
files:
|
347
|
+
- CHANGELOG.md
|
348
|
+
- GEM_SUMMARY.md
|
349
|
+
- README.md
|
350
|
+
- code_healer.gemspec
|
351
|
+
- config/code_healer.yml.example
|
352
|
+
- docs/INSTALLATION.md
|
353
|
+
- examples/basic_usage.rb
|
354
|
+
- exe/code_healer-setup
|
355
|
+
- lib/code_healer.rb
|
356
|
+
- lib/code_healer/application_job.rb
|
357
|
+
- lib/code_healer/business_context_analyzer.rb
|
358
|
+
- lib/code_healer/business_context_loader.rb
|
359
|
+
- lib/code_healer/business_context_manager.rb
|
360
|
+
- lib/code_healer/business_logic_generator.rb
|
361
|
+
- lib/code_healer/business_rule_applier.rb
|
362
|
+
- lib/code_healer/claude_code_evolution_handler.rb
|
363
|
+
- lib/code_healer/claude_error_monitor.rb
|
364
|
+
- lib/code_healer/config_manager.rb
|
365
|
+
- lib/code_healer/context_aware_prompt_builder.rb
|
366
|
+
- lib/code_healer/core.rb
|
367
|
+
- lib/code_healer/error_handler.rb
|
368
|
+
- lib/code_healer/evolution_job.rb
|
369
|
+
- lib/code_healer/global_handler.rb
|
370
|
+
- lib/code_healer/healing_job.rb
|
371
|
+
- lib/code_healer/mcp.rb
|
372
|
+
- lib/code_healer/mcp_prompts.rb
|
373
|
+
- lib/code_healer/mcp_server.rb
|
374
|
+
- lib/code_healer/mcp_tools.rb
|
375
|
+
- lib/code_healer/pull_request_creator.rb
|
376
|
+
- lib/code_healer/setup.rb
|
377
|
+
- lib/code_healer/simple_evolution.rb
|
378
|
+
- lib/code_healer/simple_global_handler.rb
|
379
|
+
- lib/code_healer/simple_healer.rb
|
380
|
+
- lib/code_healer/terminal_integration.rb
|
381
|
+
- lib/code_healer/usage_analyzer.rb
|
382
|
+
- lib/code_healer/version.rb
|
383
|
+
homepage: https://github.com/deepan-g2/code-healer
|
384
|
+
licenses:
|
385
|
+
- MIT
|
386
|
+
metadata:
|
387
|
+
homepage_uri: https://github.com/deepan-g2/code-healer
|
388
|
+
source_code_uri: https://github.com/deepan-g2/code-healer
|
389
|
+
changelog_uri: https://github.com/deepan-g2/code-healer/blob/main/CHANGELOG.md
|
390
|
+
bug_tracker_uri: https://github.com/deepan-g2/code-healer/issues
|
391
|
+
documentation_uri: https://github.com/deepan-g2/code-healer/blob/main/README.md
|
392
|
+
post_install_message:
|
393
|
+
rdoc_options: []
|
394
|
+
require_paths:
|
395
|
+
- lib
|
396
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
397
|
+
requirements:
|
398
|
+
- - ">="
|
399
|
+
- !ruby/object:Gem::Version
|
400
|
+
version: 2.7.0
|
401
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
402
|
+
requirements:
|
403
|
+
- - ">="
|
404
|
+
- !ruby/object:Gem::Version
|
405
|
+
version: '0'
|
406
|
+
requirements: []
|
407
|
+
rubygems_version: 3.4.19
|
408
|
+
signing_key:
|
409
|
+
specification_version: 4
|
410
|
+
summary: AI-powered code healing and self-repair system for Ruby applications
|
411
|
+
test_files: []
|