aidp 0.3.0 → 0.5.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 +4 -4
- data/README.md +59 -4
- data/lib/aidp/analyze/agent_personas.rb +1 -1
- data/lib/aidp/analyze/database.rb +99 -82
- data/lib/aidp/analyze/error_handler.rb +12 -76
- data/lib/aidp/analyze/focus_guidance.rb +2 -2
- data/lib/aidp/analyze/metrics_storage.rb +336 -0
- data/lib/aidp/analyze/prioritizer.rb +2 -2
- data/lib/aidp/analyze/ruby_maat_integration.rb +6 -102
- data/lib/aidp/analyze/runner.rb +107 -191
- data/lib/aidp/analyze/steps.rb +29 -30
- data/lib/aidp/analyze/storage.rb +233 -171
- data/lib/aidp/cli/jobs_command.rb +489 -0
- data/lib/aidp/cli/terminal_io.rb +52 -0
- data/lib/aidp/cli.rb +104 -45
- data/lib/aidp/core_ext/class_attribute.rb +36 -0
- data/lib/aidp/database/pg_adapter.rb +148 -0
- data/lib/aidp/database_config.rb +69 -0
- data/lib/aidp/database_connection.rb +72 -0
- data/lib/aidp/database_migration.rb +158 -0
- data/lib/aidp/execute/runner.rb +65 -92
- data/lib/aidp/execute/steps.rb +81 -82
- data/lib/aidp/job_manager.rb +41 -0
- data/lib/aidp/jobs/base_job.rb +47 -0
- data/lib/aidp/jobs/provider_execution_job.rb +96 -0
- data/lib/aidp/provider_manager.rb +25 -0
- data/lib/aidp/providers/agent_supervisor.rb +348 -0
- data/lib/aidp/providers/anthropic.rb +166 -3
- data/lib/aidp/providers/base.rb +153 -6
- data/lib/aidp/providers/cursor.rb +247 -43
- data/lib/aidp/providers/gemini.rb +166 -3
- data/lib/aidp/providers/supervised_base.rb +317 -0
- data/lib/aidp/providers/supervised_cursor.rb +22 -0
- data/lib/aidp/version.rb +1 -1
- data/lib/aidp.rb +25 -34
- data/templates/ANALYZE/01_REPOSITORY_ANALYSIS.md +4 -4
- metadata +72 -35
@@ -0,0 +1,317 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "agent_supervisor"
|
4
|
+
|
5
|
+
module Aidp
|
6
|
+
module Providers
|
7
|
+
# Base class for providers that use the agent supervisor
|
8
|
+
class SupervisedBase
|
9
|
+
# Timeout constants are now configurable via environment variables for flexibility
|
10
|
+
DEFAULT_TIMEOUT = Integer(ENV.fetch("AIDP_DEFAULT_TIMEOUT", "300")) # 5 minutes for general operations
|
11
|
+
QUICK_MODE_TIMEOUT = Integer(ENV.fetch("AIDP_QUICK_MODE_TIMEOUT", "120")) # 2 minutes for testing
|
12
|
+
REPOSITORY_ANALYSIS_TIMEOUT = Integer(ENV.fetch("AIDP_REPOSITORY_ANALYSIS_TIMEOUT", "180")) # 3 minutes
|
13
|
+
ARCHITECTURE_ANALYSIS_TIMEOUT = Integer(ENV.fetch("AIDP_ARCHITECTURE_ANALYSIS_TIMEOUT", "600")) # 10 minutes
|
14
|
+
TEST_ANALYSIS_TIMEOUT = Integer(ENV.fetch("AIDP_TEST_ANALYSIS_TIMEOUT", "300")) # 5 minutes
|
15
|
+
FUNCTIONALITY_ANALYSIS_TIMEOUT = Integer(ENV.fetch("AIDP_FUNCTIONALITY_ANALYSIS_TIMEOUT", "600")) # 10 minutes
|
16
|
+
DOCUMENTATION_ANALYSIS_TIMEOUT = Integer(ENV.fetch("AIDP_DOCUMENTATION_ANALYSIS_TIMEOUT", "300")) # 5 minutes
|
17
|
+
STATIC_ANALYSIS_TIMEOUT = Integer(ENV.fetch("AIDP_STATIC_ANALYSIS_TIMEOUT", "450")) # 7.5 minutes
|
18
|
+
REFACTORING_RECOMMENDATIONS_TIMEOUT = Integer(ENV.fetch("AIDP_REFACTORING_RECOMMENDATIONS_TIMEOUT", "600")) # 10 minutes
|
19
|
+
ADAPTIVE_TIMEOUT_BUFFER = Float(ENV.fetch("AIDP_ADAPTIVE_TIMEOUT_BUFFER", "1.2")) # 20% buffer for adaptive timeouts
|
20
|
+
attr_reader :name, :last_execution_result, :metrics
|
21
|
+
|
22
|
+
def initialize
|
23
|
+
@last_execution_result = nil
|
24
|
+
@metrics = {
|
25
|
+
total_executions: 0,
|
26
|
+
successful_executions: 0,
|
27
|
+
timeout_count: 0,
|
28
|
+
failure_count: 0,
|
29
|
+
average_duration: 0.0,
|
30
|
+
total_duration: 0.0
|
31
|
+
}
|
32
|
+
@job_context = nil
|
33
|
+
end
|
34
|
+
|
35
|
+
# Abstract method - must be implemented by subclasses
|
36
|
+
def command
|
37
|
+
raise NotImplementedError, "#{self.class} must implement #command"
|
38
|
+
end
|
39
|
+
|
40
|
+
# Abstract method - must be implemented by subclasses
|
41
|
+
def provider_name
|
42
|
+
raise NotImplementedError, "#{self.class} must implement #provider_name"
|
43
|
+
end
|
44
|
+
|
45
|
+
# Set job context for background execution
|
46
|
+
def set_job_context(job_id:, execution_id:, job_manager:)
|
47
|
+
@job_context = {
|
48
|
+
job_id: job_id,
|
49
|
+
execution_id: execution_id,
|
50
|
+
job_manager: job_manager
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
# Execute with supervision and recovery
|
55
|
+
def send(prompt:, session: nil)
|
56
|
+
timeout_seconds = calculate_timeout
|
57
|
+
debug = ENV["AIDP_DEBUG"] == "1"
|
58
|
+
|
59
|
+
log_info("Executing with #{provider_name} provider (timeout: #{timeout_seconds}s)")
|
60
|
+
|
61
|
+
# Create supervisor
|
62
|
+
supervisor = AgentSupervisor.new(
|
63
|
+
command,
|
64
|
+
timeout_seconds: timeout_seconds,
|
65
|
+
debug: debug
|
66
|
+
)
|
67
|
+
|
68
|
+
begin
|
69
|
+
# Execute with supervision
|
70
|
+
result = supervisor.execute(prompt)
|
71
|
+
|
72
|
+
# Update metrics
|
73
|
+
update_metrics(supervisor, result)
|
74
|
+
|
75
|
+
# Store result for debugging
|
76
|
+
@last_execution_result = result
|
77
|
+
|
78
|
+
if result[:success]
|
79
|
+
log_info("#{provider_name} completed successfully in #{format_duration(result[:duration])}")
|
80
|
+
result[:output]
|
81
|
+
else
|
82
|
+
handle_execution_failure(result, supervisor)
|
83
|
+
end
|
84
|
+
rescue => e
|
85
|
+
log_error("#{provider_name} execution error: #{e.message}")
|
86
|
+
|
87
|
+
# Try to kill the process if it's still running
|
88
|
+
supervisor.kill! if supervisor.active?
|
89
|
+
|
90
|
+
raise
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# Get execution statistics
|
95
|
+
def stats
|
96
|
+
@metrics.dup
|
97
|
+
end
|
98
|
+
|
99
|
+
# Reset statistics
|
100
|
+
def reset_stats!
|
101
|
+
@metrics = {
|
102
|
+
total_executions: 0,
|
103
|
+
successful_executions: 0,
|
104
|
+
timeout_count: 0,
|
105
|
+
failure_count: 0,
|
106
|
+
average_duration: 0.0,
|
107
|
+
total_duration: 0.0
|
108
|
+
}
|
109
|
+
end
|
110
|
+
|
111
|
+
# Check if provider supports activity monitoring
|
112
|
+
def supports_activity_monitoring?
|
113
|
+
true # Supervised providers always support activity monitoring
|
114
|
+
end
|
115
|
+
|
116
|
+
# Get activity summary for metrics (compatibility with old interface)
|
117
|
+
def activity_summary
|
118
|
+
return {} unless @last_execution_result
|
119
|
+
|
120
|
+
{
|
121
|
+
provider: provider_name,
|
122
|
+
step_name: ENV["AIDP_CURRENT_STEP"],
|
123
|
+
start_time: @last_execution_result[:start_time],
|
124
|
+
end_time: @last_execution_result[:end_time],
|
125
|
+
duration: @last_execution_result[:duration],
|
126
|
+
final_state: @last_execution_result[:state],
|
127
|
+
stuck_detected: false, # Supervisor handles this differently
|
128
|
+
output_count: @last_execution_result[:output_count] || 0
|
129
|
+
}
|
130
|
+
end
|
131
|
+
|
132
|
+
# Compatibility methods for old activity monitoring interface
|
133
|
+
def setup_activity_monitoring(step_name, callback = nil, timeout = nil)
|
134
|
+
# No-op for supervised providers - supervisor handles this
|
135
|
+
end
|
136
|
+
|
137
|
+
def record_activity(message = nil)
|
138
|
+
# No-op for supervised providers - supervisor handles this
|
139
|
+
end
|
140
|
+
|
141
|
+
def mark_completed
|
142
|
+
# No-op for supervised providers - supervisor handles this
|
143
|
+
end
|
144
|
+
|
145
|
+
def mark_failed(message = nil)
|
146
|
+
# No-op for supervised providers - supervisor handles this
|
147
|
+
end
|
148
|
+
|
149
|
+
private
|
150
|
+
|
151
|
+
def calculate_timeout
|
152
|
+
# Priority order for timeout calculation:
|
153
|
+
# 1. Quick mode (for testing)
|
154
|
+
# 2. Environment variable override
|
155
|
+
# 3. Adaptive timeout based on step type
|
156
|
+
# 4. Default timeout
|
157
|
+
|
158
|
+
if ENV["AIDP_QUICK_MODE"]
|
159
|
+
log_info("Quick mode enabled - #{QUICK_MODE_TIMEOUT / 60} minute timeout")
|
160
|
+
return QUICK_MODE_TIMEOUT
|
161
|
+
end
|
162
|
+
|
163
|
+
provider_timeout_var = "AIDP_#{provider_name.upcase}_TIMEOUT"
|
164
|
+
if ENV[provider_timeout_var]
|
165
|
+
return ENV[provider_timeout_var].to_i
|
166
|
+
end
|
167
|
+
|
168
|
+
# Adaptive timeout based on step type
|
169
|
+
step_timeout = get_adaptive_timeout
|
170
|
+
if step_timeout
|
171
|
+
log_info("Using adaptive timeout: #{step_timeout} seconds")
|
172
|
+
return step_timeout
|
173
|
+
end
|
174
|
+
|
175
|
+
# Default timeout for interactive use
|
176
|
+
log_info("Using default timeout: #{DEFAULT_TIMEOUT / 60} minutes")
|
177
|
+
DEFAULT_TIMEOUT
|
178
|
+
end
|
179
|
+
|
180
|
+
def get_adaptive_timeout
|
181
|
+
# Try to get timeout recommendations from metrics storage
|
182
|
+
begin
|
183
|
+
require_relative "../analyze/metrics_storage"
|
184
|
+
storage = Aidp::Analyze::MetricsStorage.new(Dir.pwd)
|
185
|
+
recommendations = storage.calculate_timeout_recommendations
|
186
|
+
|
187
|
+
# Get current step name from environment or context
|
188
|
+
step_name = ENV["AIDP_CURRENT_STEP"] || "unknown"
|
189
|
+
|
190
|
+
if recommendations[step_name]
|
191
|
+
recommended = recommendations[step_name][:recommended_timeout]
|
192
|
+
# Add buffer for safety
|
193
|
+
return (recommended * ADAPTIVE_TIMEOUT_BUFFER).ceil
|
194
|
+
end
|
195
|
+
rescue => e
|
196
|
+
log_warning("Could not get adaptive timeout: #{e.message}") if ENV["AIDP_DEBUG"]
|
197
|
+
end
|
198
|
+
|
199
|
+
# Fallback timeouts based on step type patterns
|
200
|
+
step_name = ENV["AIDP_CURRENT_STEP"] || ""
|
201
|
+
|
202
|
+
case step_name
|
203
|
+
when /REPOSITORY_ANALYSIS/
|
204
|
+
REPOSITORY_ANALYSIS_TIMEOUT
|
205
|
+
when /ARCHITECTURE_ANALYSIS/
|
206
|
+
ARCHITECTURE_ANALYSIS_TIMEOUT
|
207
|
+
when /TEST_ANALYSIS/
|
208
|
+
TEST_ANALYSIS_TIMEOUT
|
209
|
+
when /FUNCTIONALITY_ANALYSIS/
|
210
|
+
FUNCTIONALITY_ANALYSIS_TIMEOUT
|
211
|
+
when /DOCUMENTATION_ANALYSIS/
|
212
|
+
DOCUMENTATION_ANALYSIS_TIMEOUT
|
213
|
+
when /STATIC_ANALYSIS/
|
214
|
+
STATIC_ANALYSIS_TIMEOUT
|
215
|
+
when /REFACTORING_RECOMMENDATIONS/
|
216
|
+
REFACTORING_RECOMMENDATIONS_TIMEOUT
|
217
|
+
else
|
218
|
+
nil # Use default
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
def update_metrics(supervisor, result)
|
223
|
+
@metrics[:total_executions] += 1
|
224
|
+
@metrics[:total_duration] += supervisor.duration
|
225
|
+
@metrics[:average_duration] = @metrics[:total_duration] / @metrics[:total_executions]
|
226
|
+
|
227
|
+
case result[:state]
|
228
|
+
when :completed
|
229
|
+
@metrics[:successful_executions] += 1
|
230
|
+
when :timeout
|
231
|
+
@metrics[:timeout_count] += 1
|
232
|
+
when :failed, :killed
|
233
|
+
@metrics[:failure_count] += 1
|
234
|
+
end
|
235
|
+
|
236
|
+
# Log metrics update if in job context
|
237
|
+
if @job_context
|
238
|
+
@job_context[:job_manager].log_message(
|
239
|
+
@job_context[:job_id],
|
240
|
+
@job_context[:execution_id],
|
241
|
+
"Updated execution metrics",
|
242
|
+
"debug",
|
243
|
+
@metrics
|
244
|
+
)
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
def handle_execution_failure(result, supervisor)
|
249
|
+
case result[:reason]
|
250
|
+
when "user_aborted"
|
251
|
+
message = "#{provider_name} was aborted by user after #{format_duration(result[:duration])}"
|
252
|
+
log_error(message)
|
253
|
+
raise Interrupt, message
|
254
|
+
when "non_zero_exit"
|
255
|
+
error_msg = result[:error_output].empty? ? "Unknown error" : result[:error_output].strip
|
256
|
+
message = "#{provider_name} failed with exit code #{result[:exit_code]}: #{error_msg}"
|
257
|
+
log_error(message)
|
258
|
+
raise message
|
259
|
+
else
|
260
|
+
message = "#{provider_name} failed: #{result[:reason] || "Unknown error"}"
|
261
|
+
log_error(message)
|
262
|
+
raise message
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
def format_duration(seconds)
|
267
|
+
minutes = (seconds / 60).to_i
|
268
|
+
secs = (seconds % 60).to_i
|
269
|
+
|
270
|
+
if minutes > 0
|
271
|
+
"#{minutes}m #{secs}s"
|
272
|
+
else
|
273
|
+
"#{secs}s"
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
def log_info(message)
|
278
|
+
if @job_context
|
279
|
+
@job_context[:job_manager].log_message(
|
280
|
+
@job_context[:job_id],
|
281
|
+
@job_context[:execution_id],
|
282
|
+
message,
|
283
|
+
"info"
|
284
|
+
)
|
285
|
+
else
|
286
|
+
puts message
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
def log_warning(message)
|
291
|
+
if @job_context
|
292
|
+
@job_context[:job_manager].log_message(
|
293
|
+
@job_context[:job_id],
|
294
|
+
@job_context[:execution_id],
|
295
|
+
message,
|
296
|
+
"warning"
|
297
|
+
)
|
298
|
+
else
|
299
|
+
puts "⚠️ #{message}"
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
def log_error(message)
|
304
|
+
if @job_context
|
305
|
+
@job_context[:job_manager].log_message(
|
306
|
+
@job_context[:job_id],
|
307
|
+
@job_context[:execution_id],
|
308
|
+
message,
|
309
|
+
"error"
|
310
|
+
)
|
311
|
+
else
|
312
|
+
puts "❌ #{message}"
|
313
|
+
end
|
314
|
+
end
|
315
|
+
end
|
316
|
+
end
|
317
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "supervised_base"
|
4
|
+
require_relative "../util"
|
5
|
+
|
6
|
+
module Aidp
|
7
|
+
module Providers
|
8
|
+
class SupervisedCursor < SupervisedBase
|
9
|
+
def self.available?
|
10
|
+
!!Aidp::Util.which("cursor-agent")
|
11
|
+
end
|
12
|
+
|
13
|
+
def provider_name
|
14
|
+
"cursor"
|
15
|
+
end
|
16
|
+
|
17
|
+
def command
|
18
|
+
["cursor-agent", "-p"]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/aidp/version.rb
CHANGED
data/lib/aidp.rb
CHANGED
@@ -1,53 +1,44 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Core extensions
|
4
|
+
require "aidp/core_ext/class_attribute"
|
5
|
+
|
3
6
|
# Shared modules
|
4
7
|
require "aidp/version"
|
5
8
|
require "aidp/config"
|
6
9
|
require "aidp/workspace"
|
7
10
|
require "aidp/util"
|
8
11
|
require "aidp/cli"
|
12
|
+
require "aidp/cli/jobs_command"
|
9
13
|
require "aidp/project_detector"
|
10
14
|
require "aidp/sync"
|
15
|
+
|
16
|
+
# Database
|
17
|
+
require "aidp/database_connection"
|
18
|
+
|
19
|
+
# Job infrastructure
|
20
|
+
require "aidp/job_manager"
|
21
|
+
require "aidp/jobs/base_job"
|
22
|
+
require "aidp/jobs/provider_execution_job"
|
23
|
+
|
24
|
+
# Providers
|
11
25
|
require "aidp/providers/base"
|
12
26
|
require "aidp/providers/cursor"
|
13
27
|
require "aidp/providers/anthropic"
|
14
28
|
require "aidp/providers/gemini"
|
15
29
|
require "aidp/providers/macos_ui"
|
30
|
+
require "aidp/provider_manager"
|
16
31
|
|
17
|
-
#
|
18
|
-
require "aidp/
|
19
|
-
require "aidp/
|
20
|
-
require "aidp/
|
21
|
-
|
22
|
-
# Analyze mode modules
|
23
|
-
require "aidp/analyze/steps"
|
32
|
+
# Analyze mode
|
33
|
+
require "aidp/analyze/error_handler"
|
34
|
+
require "aidp/analyze/parallel_processor"
|
35
|
+
require "aidp/analyze/repository_chunker"
|
36
|
+
require "aidp/analyze/ruby_maat_integration"
|
24
37
|
require "aidp/analyze/runner"
|
38
|
+
require "aidp/analyze/steps"
|
25
39
|
require "aidp/analyze/progress"
|
26
|
-
require "aidp/analyze/dependencies"
|
27
|
-
require "aidp/analyze/storage"
|
28
|
-
require "aidp/analyze/prioritizer"
|
29
|
-
require "aidp/analyze/database"
|
30
|
-
require "aidp/analyze/ruby_maat_integration"
|
31
|
-
require "aidp/analyze/feature_analyzer"
|
32
|
-
require "aidp/analyze/focus_guidance"
|
33
|
-
require "aidp/analyze/agent_personas"
|
34
|
-
require "aidp/analyze/agent_tool_executor"
|
35
|
-
require "aidp/analyze/static_analysis_detector"
|
36
|
-
require "aidp/analyze/tool_configuration"
|
37
|
-
require "aidp/analyze/tool_modernization"
|
38
|
-
require "aidp/analyze/language_analysis_strategies"
|
39
|
-
require "aidp/analyze/report_generator"
|
40
|
-
require "aidp/analyze/export_manager"
|
41
|
-
require "aidp/analyze/incremental_analyzer"
|
42
|
-
require "aidp/analyze/progress_visualizer"
|
43
|
-
require "aidp/analyze/data_retention_manager"
|
44
|
-
require "aidp/analyze/repository_chunker"
|
45
|
-
require "aidp/analyze/parallel_processor"
|
46
|
-
require "aidp/analyze/memory_manager"
|
47
|
-
require "aidp/analyze/large_analysis_progress"
|
48
|
-
require "aidp/analyze/performance_optimizer"
|
49
|
-
require "aidp/analyze/error_handler"
|
50
40
|
|
51
|
-
|
52
|
-
|
53
|
-
|
41
|
+
# Execute mode
|
42
|
+
require "aidp/execute/steps"
|
43
|
+
require "aidp/execute/runner"
|
44
|
+
require "aidp/execute/progress"
|
@@ -13,7 +13,7 @@ You are a **Repository Analyst**, an expert in version control analysis and code
|
|
13
13
|
|
14
14
|
## Analysis Objectives
|
15
15
|
|
16
|
-
1. **Repository Mining**: Use
|
16
|
+
1. **Repository Mining**: Use ruby-maat gem to analyze repository activity
|
17
17
|
2. **Churn Analysis**: Identify high-activity areas that may indicate technical debt
|
18
18
|
3. **Coupling Analysis**: Understand dependencies between modules/components
|
19
19
|
4. **Authorship Patterns**: Analyze code ownership and knowledge distribution
|
@@ -21,10 +21,10 @@ You are a **Repository Analyst**, an expert in version control analysis and code
|
|
21
21
|
|
22
22
|
## Required Analysis Steps
|
23
23
|
|
24
|
-
### 1.
|
24
|
+
### 1. Ruby Maat Integration
|
25
25
|
|
26
|
-
-
|
27
|
-
- Run
|
26
|
+
- Use the ruby-maat gem for repository analysis (no Docker required)
|
27
|
+
- Run ruby-maat analysis for the repository
|
28
28
|
- Parse and interpret the results
|
29
29
|
|
30
30
|
### 2. Repository Activity Analysis
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aidp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bart Agapinan
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-08-
|
10
|
+
date: 2025-08-24 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: colorize
|
@@ -66,25 +66,47 @@ dependencies:
|
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '1.5'
|
68
68
|
- !ruby/object:Gem::Dependency
|
69
|
-
name:
|
69
|
+
name: pg
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
|
-
- - "
|
72
|
+
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '1.
|
75
|
-
|
74
|
+
version: '1.5'
|
75
|
+
type: :runtime
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '1.5'
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: que
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
76
87
|
- !ruby/object:Gem::Version
|
77
|
-
version: '
|
88
|
+
version: '2.4'
|
78
89
|
type: :runtime
|
79
90
|
prerelease: false
|
80
91
|
version_requirements: !ruby/object:Gem::Requirement
|
81
92
|
requirements:
|
82
|
-
- - "
|
93
|
+
- - "~>"
|
83
94
|
- !ruby/object:Gem::Version
|
84
|
-
version: '
|
85
|
-
|
95
|
+
version: '2.4'
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: sequel
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
86
101
|
- !ruby/object:Gem::Version
|
87
|
-
version: '
|
102
|
+
version: '5.77'
|
103
|
+
type: :runtime
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '5.77'
|
88
110
|
- !ruby/object:Gem::Dependency
|
89
111
|
name: thor
|
90
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,103 +122,103 @@ dependencies:
|
|
100
122
|
- !ruby/object:Gem::Version
|
101
123
|
version: '1.3'
|
102
124
|
- !ruby/object:Gem::Dependency
|
103
|
-
name: tty-
|
125
|
+
name: tty-box
|
104
126
|
requirement: !ruby/object:Gem::Requirement
|
105
127
|
requirements:
|
106
128
|
- - "~>"
|
107
129
|
- !ruby/object:Gem::Version
|
108
|
-
version: '0.
|
130
|
+
version: '0.7'
|
109
131
|
type: :runtime
|
110
132
|
prerelease: false
|
111
133
|
version_requirements: !ruby/object:Gem::Requirement
|
112
134
|
requirements:
|
113
135
|
- - "~>"
|
114
136
|
- !ruby/object:Gem::Version
|
115
|
-
version: '0.
|
137
|
+
version: '0.7'
|
116
138
|
- !ruby/object:Gem::Dependency
|
117
|
-
name: tty-
|
139
|
+
name: tty-cursor
|
118
140
|
requirement: !ruby/object:Gem::Requirement
|
119
141
|
requirements:
|
120
142
|
- - "~>"
|
121
143
|
- !ruby/object:Gem::Version
|
122
|
-
version: '0.
|
144
|
+
version: '0.7'
|
123
145
|
type: :runtime
|
124
146
|
prerelease: false
|
125
147
|
version_requirements: !ruby/object:Gem::Requirement
|
126
148
|
requirements:
|
127
149
|
- - "~>"
|
128
150
|
- !ruby/object:Gem::Version
|
129
|
-
version: '0.
|
151
|
+
version: '0.7'
|
130
152
|
- !ruby/object:Gem::Dependency
|
131
|
-
name: tty-
|
153
|
+
name: tty-progressbar
|
132
154
|
requirement: !ruby/object:Gem::Requirement
|
133
155
|
requirements:
|
134
156
|
- - "~>"
|
135
157
|
- !ruby/object:Gem::Version
|
136
|
-
version: '0.
|
158
|
+
version: '0.18'
|
137
159
|
type: :runtime
|
138
160
|
prerelease: false
|
139
161
|
version_requirements: !ruby/object:Gem::Requirement
|
140
162
|
requirements:
|
141
163
|
- - "~>"
|
142
164
|
- !ruby/object:Gem::Version
|
143
|
-
version: '0.
|
165
|
+
version: '0.18'
|
144
166
|
- !ruby/object:Gem::Dependency
|
145
|
-
name: tty-
|
167
|
+
name: tty-prompt
|
146
168
|
requirement: !ruby/object:Gem::Requirement
|
147
169
|
requirements:
|
148
170
|
- - "~>"
|
149
171
|
- !ruby/object:Gem::Version
|
150
|
-
version: '0.
|
172
|
+
version: '0.23'
|
151
173
|
type: :runtime
|
152
174
|
prerelease: false
|
153
175
|
version_requirements: !ruby/object:Gem::Requirement
|
154
176
|
requirements:
|
155
177
|
- - "~>"
|
156
178
|
- !ruby/object:Gem::Version
|
157
|
-
version: '0.
|
179
|
+
version: '0.23'
|
158
180
|
- !ruby/object:Gem::Dependency
|
159
|
-
name:
|
181
|
+
name: tty-screen
|
160
182
|
requirement: !ruby/object:Gem::Requirement
|
161
183
|
requirements:
|
162
184
|
- - "~>"
|
163
185
|
- !ruby/object:Gem::Version
|
164
|
-
version: '
|
165
|
-
type: :
|
186
|
+
version: '0.8'
|
187
|
+
type: :runtime
|
166
188
|
prerelease: false
|
167
189
|
version_requirements: !ruby/object:Gem::Requirement
|
168
190
|
requirements:
|
169
191
|
- - "~>"
|
170
192
|
- !ruby/object:Gem::Version
|
171
|
-
version: '
|
193
|
+
version: '0.8'
|
172
194
|
- !ruby/object:Gem::Dependency
|
173
|
-
name:
|
195
|
+
name: tty-spinner
|
174
196
|
requirement: !ruby/object:Gem::Requirement
|
175
197
|
requirements:
|
176
198
|
- - "~>"
|
177
199
|
- !ruby/object:Gem::Version
|
178
|
-
version: '
|
179
|
-
type: :
|
200
|
+
version: '0.9'
|
201
|
+
type: :runtime
|
180
202
|
prerelease: false
|
181
203
|
version_requirements: !ruby/object:Gem::Requirement
|
182
204
|
requirements:
|
183
205
|
- - "~>"
|
184
206
|
- !ruby/object:Gem::Version
|
185
|
-
version: '
|
207
|
+
version: '0.9'
|
186
208
|
- !ruby/object:Gem::Dependency
|
187
|
-
name:
|
209
|
+
name: tty-table
|
188
210
|
requirement: !ruby/object:Gem::Requirement
|
189
211
|
requirements:
|
190
212
|
- - "~>"
|
191
213
|
- !ruby/object:Gem::Version
|
192
|
-
version: '
|
193
|
-
type: :
|
214
|
+
version: '0.12'
|
215
|
+
type: :runtime
|
194
216
|
prerelease: false
|
195
217
|
version_requirements: !ruby/object:Gem::Requirement
|
196
218
|
requirements:
|
197
219
|
- - "~>"
|
198
220
|
- !ruby/object:Gem::Version
|
199
|
-
version: '
|
221
|
+
version: '0.12'
|
200
222
|
description: The AI-Dev-Pipeline (AIDP) CLI provides a powerful, markdown-driven workflow
|
201
223
|
for software development. It supports in-depth project analysis to understand existing
|
202
224
|
codebases and an execution mode to systematically implement new features.
|
@@ -224,6 +246,7 @@ files:
|
|
224
246
|
- lib/aidp/analyze/language_analysis_strategies.rb
|
225
247
|
- lib/aidp/analyze/large_analysis_progress.rb
|
226
248
|
- lib/aidp/analyze/memory_manager.rb
|
249
|
+
- lib/aidp/analyze/metrics_storage.rb
|
227
250
|
- lib/aidp/analyze/parallel_processor.rb
|
228
251
|
- lib/aidp/analyze/performance_optimizer.rb
|
229
252
|
- lib/aidp/analyze/prioritizer.rb
|
@@ -239,16 +262,30 @@ files:
|
|
239
262
|
- lib/aidp/analyze/tool_configuration.rb
|
240
263
|
- lib/aidp/analyze/tool_modernization.rb
|
241
264
|
- lib/aidp/cli.rb
|
265
|
+
- lib/aidp/cli/jobs_command.rb
|
266
|
+
- lib/aidp/cli/terminal_io.rb
|
242
267
|
- lib/aidp/config.rb
|
268
|
+
- lib/aidp/core_ext/class_attribute.rb
|
269
|
+
- lib/aidp/database/pg_adapter.rb
|
270
|
+
- lib/aidp/database_config.rb
|
271
|
+
- lib/aidp/database_connection.rb
|
272
|
+
- lib/aidp/database_migration.rb
|
243
273
|
- lib/aidp/execute/progress.rb
|
244
274
|
- lib/aidp/execute/runner.rb
|
245
275
|
- lib/aidp/execute/steps.rb
|
276
|
+
- lib/aidp/job_manager.rb
|
277
|
+
- lib/aidp/jobs/base_job.rb
|
278
|
+
- lib/aidp/jobs/provider_execution_job.rb
|
246
279
|
- lib/aidp/project_detector.rb
|
280
|
+
- lib/aidp/provider_manager.rb
|
281
|
+
- lib/aidp/providers/agent_supervisor.rb
|
247
282
|
- lib/aidp/providers/anthropic.rb
|
248
283
|
- lib/aidp/providers/base.rb
|
249
284
|
- lib/aidp/providers/cursor.rb
|
250
285
|
- lib/aidp/providers/gemini.rb
|
251
286
|
- lib/aidp/providers/macos_ui.rb
|
287
|
+
- lib/aidp/providers/supervised_base.rb
|
288
|
+
- lib/aidp/providers/supervised_cursor.rb
|
252
289
|
- lib/aidp/sync.rb
|
253
290
|
- lib/aidp/util.rb
|
254
291
|
- lib/aidp/version.rb
|