aidp 0.1.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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +59 -4
  3. data/bin/aidp +2 -2
  4. data/lib/aidp/analyze/agent_personas.rb +1 -1
  5. data/lib/aidp/analyze/data_retention_manager.rb +2 -2
  6. data/lib/aidp/analyze/database.rb +99 -82
  7. data/lib/aidp/analyze/error_handler.rb +12 -76
  8. data/lib/aidp/analyze/focus_guidance.rb +2 -2
  9. data/lib/aidp/analyze/large_analysis_progress.rb +2 -2
  10. data/lib/aidp/analyze/metrics_storage.rb +336 -0
  11. data/lib/aidp/analyze/prioritizer.rb +4 -4
  12. data/lib/aidp/analyze/repository_chunker.rb +15 -13
  13. data/lib/aidp/analyze/ruby_maat_integration.rb +6 -102
  14. data/lib/aidp/analyze/runner.rb +107 -191
  15. data/lib/aidp/analyze/steps.rb +29 -30
  16. data/lib/aidp/analyze/storage.rb +234 -172
  17. data/lib/aidp/cli/jobs_command.rb +489 -0
  18. data/lib/aidp/cli/terminal_io.rb +52 -0
  19. data/lib/aidp/cli.rb +227 -0
  20. data/lib/aidp/config.rb +33 -0
  21. data/lib/aidp/core_ext/class_attribute.rb +36 -0
  22. data/lib/aidp/database/pg_adapter.rb +148 -0
  23. data/lib/aidp/database_config.rb +69 -0
  24. data/lib/aidp/database_connection.rb +72 -0
  25. data/lib/aidp/database_migration.rb +158 -0
  26. data/lib/aidp/execute/runner.rb +65 -92
  27. data/lib/aidp/execute/steps.rb +81 -82
  28. data/lib/aidp/job_manager.rb +41 -0
  29. data/lib/aidp/jobs/base_job.rb +47 -0
  30. data/lib/aidp/jobs/provider_execution_job.rb +96 -0
  31. data/lib/aidp/project_detector.rb +117 -0
  32. data/lib/aidp/provider_manager.rb +25 -0
  33. data/lib/aidp/providers/agent_supervisor.rb +348 -0
  34. data/lib/aidp/providers/anthropic.rb +187 -0
  35. data/lib/aidp/providers/base.rb +162 -0
  36. data/lib/aidp/providers/cursor.rb +304 -0
  37. data/lib/aidp/providers/gemini.rb +187 -0
  38. data/lib/aidp/providers/macos_ui.rb +24 -0
  39. data/lib/aidp/providers/supervised_base.rb +317 -0
  40. data/lib/aidp/providers/supervised_cursor.rb +22 -0
  41. data/lib/aidp/sync.rb +13 -0
  42. data/lib/aidp/util.rb +39 -0
  43. data/lib/aidp/{shared/version.rb → version.rb} +1 -3
  44. data/lib/aidp/workspace.rb +19 -0
  45. data/lib/aidp.rb +36 -45
  46. data/templates/ANALYZE/01_REPOSITORY_ANALYSIS.md +4 -4
  47. metadata +89 -45
  48. data/lib/aidp/shared/cli.rb +0 -117
  49. data/lib/aidp/shared/config.rb +0 -35
  50. data/lib/aidp/shared/project_detector.rb +0 -119
  51. data/lib/aidp/shared/providers/anthropic.rb +0 -26
  52. data/lib/aidp/shared/providers/base.rb +0 -17
  53. data/lib/aidp/shared/providers/cursor.rb +0 -102
  54. data/lib/aidp/shared/providers/gemini.rb +0 -26
  55. data/lib/aidp/shared/providers/macos_ui.rb +0 -26
  56. data/lib/aidp/shared/sync.rb +0 -15
  57. data/lib/aidp/shared/util.rb +0 -41
  58. data/lib/aidp/shared/workspace.rb +0 -21
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
- require "aidp/shared/version"
5
- require "aidp/shared/config"
6
- require "aidp/shared/workspace"
7
- require "aidp/shared/util"
8
- require "aidp/shared/cli"
9
- require "aidp/shared/project_detector"
10
- require "aidp/shared/sync"
11
- require "aidp/shared/providers/base"
12
- require "aidp/shared/providers/cursor"
13
- require "aidp/shared/providers/anthropic"
14
- require "aidp/shared/providers/gemini"
15
- require "aidp/shared/providers/macos_ui"
7
+ require "aidp/version"
8
+ require "aidp/config"
9
+ require "aidp/workspace"
10
+ require "aidp/util"
11
+ require "aidp/cli"
12
+ require "aidp/cli/jobs_command"
13
+ require "aidp/project_detector"
14
+ require "aidp/sync"
16
15
 
17
- # Execute mode modules
18
- require "aidp/execute/steps"
19
- require "aidp/execute/runner"
20
- require "aidp/execute/progress"
16
+ # Database
17
+ require "aidp/database_connection"
21
18
 
22
- # Analyze mode modules
23
- require "aidp/analyze/steps"
19
+ # Job infrastructure
20
+ require "aidp/job_manager"
21
+ require "aidp/jobs/base_job"
22
+ require "aidp/jobs/provider_execution_job"
23
+
24
+ # Providers
25
+ require "aidp/providers/base"
26
+ require "aidp/providers/cursor"
27
+ require "aidp/providers/anthropic"
28
+ require "aidp/providers/gemini"
29
+ require "aidp/providers/macos_ui"
30
+ require "aidp/provider_manager"
31
+
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
- module Aidp
52
- VERSION = Aidp::Shared::VERSION
53
- end
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 Code Maat to analyze repository activity
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. Code Maat Integration
24
+ ### 1. Ruby Maat Integration
25
25
 
26
- - Check if Docker is available for Code Maat analysis
27
- - Run Code Maat analysis for the repository
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.1.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-16 00:00:00.000000000 Z
10
+ date: 2025-08-24 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: colorize
@@ -66,19 +66,47 @@ dependencies:
66
66
  - !ruby/object:Gem::Version
67
67
  version: '1.5'
68
68
  - !ruby/object:Gem::Dependency
69
- name: sqlite3
69
+ name: pg
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '1.6'
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
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '2.4'
75
89
  type: :runtime
76
90
  prerelease: false
77
91
  version_requirements: !ruby/object:Gem::Requirement
78
92
  requirements:
79
93
  - - "~>"
80
94
  - !ruby/object:Gem::Version
81
- version: '1.6'
95
+ version: '2.4'
96
+ - !ruby/object:Gem::Dependency
97
+ name: sequel
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::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'
82
110
  - !ruby/object:Gem::Dependency
83
111
  name: thor
84
112
  requirement: !ruby/object:Gem::Requirement
@@ -94,105 +122,106 @@ dependencies:
94
122
  - !ruby/object:Gem::Version
95
123
  version: '1.3'
96
124
  - !ruby/object:Gem::Dependency
97
- name: tty-progressbar
125
+ name: tty-box
98
126
  requirement: !ruby/object:Gem::Requirement
99
127
  requirements:
100
128
  - - "~>"
101
129
  - !ruby/object:Gem::Version
102
- version: '0.18'
130
+ version: '0.7'
103
131
  type: :runtime
104
132
  prerelease: false
105
133
  version_requirements: !ruby/object:Gem::Requirement
106
134
  requirements:
107
135
  - - "~>"
108
136
  - !ruby/object:Gem::Version
109
- version: '0.18'
137
+ version: '0.7'
110
138
  - !ruby/object:Gem::Dependency
111
- name: tty-prompt
139
+ name: tty-cursor
112
140
  requirement: !ruby/object:Gem::Requirement
113
141
  requirements:
114
142
  - - "~>"
115
143
  - !ruby/object:Gem::Version
116
- version: '0.23'
144
+ version: '0.7'
117
145
  type: :runtime
118
146
  prerelease: false
119
147
  version_requirements: !ruby/object:Gem::Requirement
120
148
  requirements:
121
149
  - - "~>"
122
150
  - !ruby/object:Gem::Version
123
- version: '0.23'
151
+ version: '0.7'
124
152
  - !ruby/object:Gem::Dependency
125
- name: tty-spinner
153
+ name: tty-progressbar
126
154
  requirement: !ruby/object:Gem::Requirement
127
155
  requirements:
128
156
  - - "~>"
129
157
  - !ruby/object:Gem::Version
130
- version: '0.9'
158
+ version: '0.18'
131
159
  type: :runtime
132
160
  prerelease: false
133
161
  version_requirements: !ruby/object:Gem::Requirement
134
162
  requirements:
135
163
  - - "~>"
136
164
  - !ruby/object:Gem::Version
137
- version: '0.9'
165
+ version: '0.18'
138
166
  - !ruby/object:Gem::Dependency
139
- name: tty-table
167
+ name: tty-prompt
140
168
  requirement: !ruby/object:Gem::Requirement
141
169
  requirements:
142
170
  - - "~>"
143
171
  - !ruby/object:Gem::Version
144
- version: '0.12'
172
+ version: '0.23'
145
173
  type: :runtime
146
174
  prerelease: false
147
175
  version_requirements: !ruby/object:Gem::Requirement
148
176
  requirements:
149
177
  - - "~>"
150
178
  - !ruby/object:Gem::Version
151
- version: '0.12'
179
+ version: '0.23'
152
180
  - !ruby/object:Gem::Dependency
153
- name: rake
181
+ name: tty-screen
154
182
  requirement: !ruby/object:Gem::Requirement
155
183
  requirements:
156
184
  - - "~>"
157
185
  - !ruby/object:Gem::Version
158
- version: '13.0'
159
- type: :development
186
+ version: '0.8'
187
+ type: :runtime
160
188
  prerelease: false
161
189
  version_requirements: !ruby/object:Gem::Requirement
162
190
  requirements:
163
191
  - - "~>"
164
192
  - !ruby/object:Gem::Version
165
- version: '13.0'
193
+ version: '0.8'
166
194
  - !ruby/object:Gem::Dependency
167
- name: rspec
195
+ name: tty-spinner
168
196
  requirement: !ruby/object:Gem::Requirement
169
197
  requirements:
170
198
  - - "~>"
171
199
  - !ruby/object:Gem::Version
172
- version: '3.12'
173
- type: :development
200
+ version: '0.9'
201
+ type: :runtime
174
202
  prerelease: false
175
203
  version_requirements: !ruby/object:Gem::Requirement
176
204
  requirements:
177
205
  - - "~>"
178
206
  - !ruby/object:Gem::Version
179
- version: '3.12'
207
+ version: '0.9'
180
208
  - !ruby/object:Gem::Dependency
181
- name: standard
209
+ name: tty-table
182
210
  requirement: !ruby/object:Gem::Requirement
183
211
  requirements:
184
212
  - - "~>"
185
213
  - !ruby/object:Gem::Version
186
- version: '1.0'
187
- type: :development
214
+ version: '0.12'
215
+ type: :runtime
188
216
  prerelease: false
189
217
  version_requirements: !ruby/object:Gem::Requirement
190
218
  requirements:
191
219
  - - "~>"
192
220
  - !ruby/object:Gem::Version
193
- version: '1.0'
194
- description: Portable CLI to run a markdown-based AI dev workflow without copying
195
- prompts into projects.
221
+ version: '0.12'
222
+ description: The AI-Dev-Pipeline (AIDP) CLI provides a powerful, markdown-driven workflow
223
+ for software development. It supports in-depth project analysis to understand existing
224
+ codebases and an execution mode to systematically implement new features.
196
225
  email:
197
226
  - bart@sonic.next
198
227
  executables:
@@ -217,6 +246,7 @@ files:
217
246
  - lib/aidp/analyze/language_analysis_strategies.rb
218
247
  - lib/aidp/analyze/large_analysis_progress.rb
219
248
  - lib/aidp/analyze/memory_manager.rb
249
+ - lib/aidp/analyze/metrics_storage.rb
220
250
  - lib/aidp/analyze/parallel_processor.rb
221
251
  - lib/aidp/analyze/performance_optimizer.rb
222
252
  - lib/aidp/analyze/prioritizer.rb
@@ -231,21 +261,35 @@ files:
231
261
  - lib/aidp/analyze/storage.rb
232
262
  - lib/aidp/analyze/tool_configuration.rb
233
263
  - lib/aidp/analyze/tool_modernization.rb
264
+ - lib/aidp/cli.rb
265
+ - lib/aidp/cli/jobs_command.rb
266
+ - lib/aidp/cli/terminal_io.rb
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
234
273
  - lib/aidp/execute/progress.rb
235
274
  - lib/aidp/execute/runner.rb
236
275
  - lib/aidp/execute/steps.rb
237
- - lib/aidp/shared/cli.rb
238
- - lib/aidp/shared/config.rb
239
- - lib/aidp/shared/project_detector.rb
240
- - lib/aidp/shared/providers/anthropic.rb
241
- - lib/aidp/shared/providers/base.rb
242
- - lib/aidp/shared/providers/cursor.rb
243
- - lib/aidp/shared/providers/gemini.rb
244
- - lib/aidp/shared/providers/macos_ui.rb
245
- - lib/aidp/shared/sync.rb
246
- - lib/aidp/shared/util.rb
247
- - lib/aidp/shared/version.rb
248
- - lib/aidp/shared/workspace.rb
276
+ - lib/aidp/job_manager.rb
277
+ - lib/aidp/jobs/base_job.rb
278
+ - lib/aidp/jobs/provider_execution_job.rb
279
+ - lib/aidp/project_detector.rb
280
+ - lib/aidp/provider_manager.rb
281
+ - lib/aidp/providers/agent_supervisor.rb
282
+ - lib/aidp/providers/anthropic.rb
283
+ - lib/aidp/providers/base.rb
284
+ - lib/aidp/providers/cursor.rb
285
+ - lib/aidp/providers/gemini.rb
286
+ - lib/aidp/providers/macos_ui.rb
287
+ - lib/aidp/providers/supervised_base.rb
288
+ - lib/aidp/providers/supervised_cursor.rb
289
+ - lib/aidp/sync.rb
290
+ - lib/aidp/util.rb
291
+ - lib/aidp/version.rb
292
+ - lib/aidp/workspace.rb
249
293
  - templates/ANALYZE/01_REPOSITORY_ANALYSIS.md
250
294
  - templates/ANALYZE/02_ARCHITECTURE_ANALYSIS.md
251
295
  - templates/ANALYZE/03_TEST_ANALYSIS.md
@@ -277,7 +321,7 @@ files:
277
321
  - templates/EXECUTE/13_DELIVERY_ROLLOUT.md
278
322
  - templates/EXECUTE/14_DOCS_PORTAL.md
279
323
  - templates/EXECUTE/15_POST_RELEASE.md
280
- homepage: https://github.com/viamin/ai-scaffold
324
+ homepage: https://github.com/viamin/aidp
281
325
  licenses:
282
326
  - MIT
283
327
  metadata: {}
@@ -297,5 +341,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
297
341
  requirements: []
298
342
  rubygems_version: 3.6.2
299
343
  specification_version: 4
300
- summary: AI Dev Pipeline CLI that drives prompts via Cursor/Claude/Gemini
344
+ summary: A CLI for AI-driven software development, from analysis to execution.
301
345
  test_files: []
@@ -1,117 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "thor"
4
-
5
- module Aidp
6
- module Shared
7
- # CLI interface for both execute and analyze modes
8
- class CLI < Thor
9
- desc "execute [STEP]", "Run execute mode step(s)"
10
- option :force, type: :boolean, desc: "Force execution even if dependencies are not met"
11
- option :rerun, type: :boolean, desc: "Re-run a completed step"
12
- def execute(project_dir = Dir.pwd, step_name = nil, custom_options = {})
13
- if step_name
14
- runner = Aidp::Execute::Runner.new(project_dir)
15
- # Merge Thor options with custom options
16
- all_options = options.merge(custom_options)
17
- runner.run_step(step_name, all_options)
18
- else
19
- puts "Available execute steps:"
20
- Aidp::Execute::Steps::SPEC.keys.each { |step| puts " - #{step}" }
21
- progress = Aidp::Execute::Progress.new(project_dir)
22
- next_step = progress.next_step
23
- {status: "success", message: "Available steps listed", next_step: next_step}
24
- end
25
- end
26
-
27
- desc "analyze [STEP]", "Run analyze mode step(s)"
28
- option :force, type: :boolean, desc: "Force execution even if dependencies are not met"
29
- option :rerun, type: :boolean, desc: "Re-run a completed step"
30
- def analyze(project_dir = Dir.pwd, step_name = nil, custom_options = {})
31
- if step_name
32
- runner = Aidp::Analyze::Runner.new(project_dir)
33
- # Merge Thor options with custom options
34
- all_options = options.merge(custom_options)
35
- runner.run_step(step_name, all_options)
36
- else
37
- puts "Available analyze steps:"
38
- Aidp::Analyze::Steps::SPEC.keys.each { |step| puts " - #{step}" }
39
- progress = Aidp::Analyze::Progress.new(project_dir)
40
- next_step = progress.next_step
41
- {status: "success", message: "Available steps listed", next_step: next_step,
42
- completed_steps: progress.completed_steps}
43
- end
44
- end
45
-
46
- desc "analyze-approve STEP", "Approve a completed analyze gate step"
47
- def analyze_approve(project_dir = Dir.pwd, step_name = nil)
48
- progress = Aidp::Analyze::Progress.new(project_dir)
49
- progress.mark_step_completed(step_name)
50
- puts "✅ Approved analyze step: #{step_name}"
51
- {status: "success", step: step_name}
52
- end
53
-
54
- desc "analyze-reset", "Reset analyze mode progress"
55
- def analyze_reset(project_dir = Dir.pwd)
56
- progress = Aidp::Analyze::Progress.new(project_dir)
57
- progress.reset
58
- puts "🔄 Reset analyze mode progress"
59
- {status: "success", message: "Progress reset"}
60
- end
61
-
62
- desc "execute-approve STEP", "Approve a completed execute gate step"
63
- def execute_approve(project_dir = Dir.pwd, step_name = nil)
64
- progress = Aidp::Execute::Progress.new(project_dir)
65
- progress.mark_step_completed(step_name)
66
- puts "✅ Approved execute step: #{step_name}"
67
- {status: "success", step: step_name}
68
- end
69
-
70
- desc "execute-reset", "Reset execute mode progress"
71
- def execute_reset(project_dir = Dir.pwd)
72
- progress = Aidp::Execute::Progress.new(project_dir)
73
- progress.reset
74
- puts "🔄 Reset execute mode progress"
75
- {status: "success", message: "Progress reset"}
76
- end
77
-
78
- # Backward compatibility aliases
79
- desc "approve STEP", "Approve a completed execute gate step (alias for execute-approve)"
80
- def approve(project_dir = Dir.pwd, step_name = nil)
81
- execute_approve(project_dir, step_name)
82
- end
83
-
84
- desc "reset", "Reset execute mode progress (alias for execute-reset)"
85
- def reset(project_dir = Dir.pwd)
86
- execute_reset(project_dir)
87
- end
88
-
89
- desc "status", "Show current progress for both modes"
90
- def status
91
- puts "\n📊 AI Dev Pipeline Status"
92
- puts "=" * 50
93
-
94
- # Execute mode status
95
- execute_progress = Aidp::Execute::Progress.new(Dir.pwd)
96
- puts "\n🔧 Execute Mode:"
97
- Aidp::Execute::Steps::SPEC.keys.each do |step|
98
- status = execute_progress.step_completed?(step) ? "✅" : "⏳"
99
- puts " #{status} #{step}"
100
- end
101
-
102
- # Analyze mode status
103
- analyze_progress = Aidp::Analyze::Progress.new(Dir.pwd)
104
- puts "\n🔍 Analyze Mode:"
105
- Aidp::Analyze::Steps::SPEC.keys.each do |step|
106
- status = analyze_progress.step_completed?(step) ? "✅" : "⏳"
107
- puts " #{status} #{step}"
108
- end
109
- end
110
-
111
- desc "version", "Show version information"
112
- def version
113
- puts "Aidp version #{Aidp::Shared::VERSION}"
114
- end
115
- end
116
- end
117
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "yaml"
4
-
5
- module Aidp
6
- module Shared
7
- # Configuration management for both execute and analyze modes
8
- class Config
9
- def self.load(project_dir = Dir.pwd)
10
- config_file = File.join(project_dir, ".aidp.yml")
11
- if File.exist?(config_file)
12
- YAML.load_file(config_file) || {}
13
- else
14
- {}
15
- end
16
- end
17
-
18
- def self.templates_root
19
- File.join(Dir.pwd, "templates")
20
- end
21
-
22
- def self.analyze_templates_root
23
- File.join(Dir.pwd, "templates", "ANALYZE")
24
- end
25
-
26
- def self.execute_templates_root
27
- File.join(Dir.pwd, "templates", "EXECUTE")
28
- end
29
-
30
- def self.common_templates_root
31
- File.join(Dir.pwd, "templates", "COMMON")
32
- end
33
- end
34
- end
35
- end
@@ -1,119 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "json"
4
- require "yaml"
5
-
6
- module Aidp
7
- module Shared
8
- # Detects project type, language, framework, and other characteristics
9
- class ProjectDetector
10
- attr_reader :project_dir
11
-
12
- def initialize(project_dir = Dir.pwd)
13
- @project_dir = project_dir
14
- end
15
-
16
- def detect
17
- {
18
- language: detect_language,
19
- framework: detect_framework,
20
- build_system: detect_build_system,
21
- package_manager: detect_package_manager,
22
- static_analysis_tools: detect_static_analysis_tools,
23
- test_framework: detect_test_framework,
24
- database: detect_database,
25
- deployment: detect_deployment
26
- }
27
- end
28
-
29
- private
30
-
31
- def detect_language
32
- return "ruby" if File.exist?(File.join(@project_dir, "Gemfile"))
33
- return "javascript" if File.exist?(File.join(@project_dir, "package.json"))
34
- return "python" if File.exist?(File.join(@project_dir, "requirements.txt")) || File.exist?(File.join(@project_dir, "pyproject.toml"))
35
- return "java" if File.exist?(File.join(@project_dir, "pom.xml")) || File.exist?(File.join(@project_dir, "build.gradle"))
36
- return "go" if File.exist?(File.join(@project_dir, "go.mod"))
37
- return "rust" if File.exist?(File.join(@project_dir, "Cargo.toml"))
38
- return "csharp" if File.exist?(File.join(@project_dir, "*.csproj"))
39
- "unknown"
40
- end
41
-
42
- def detect_framework
43
- case detect_language
44
- when "ruby"
45
- return "rails" if File.exist?(File.join(@project_dir, "config", "application.rb"))
46
- return "sinatra" if File.exist?(File.join(@project_dir, "app.rb")) && File.read(File.join(@project_dir, "app.rb")).include?("Sinatra")
47
- when "javascript"
48
- return "react" if File.exist?(File.join(@project_dir, "package.json")) && File.read(File.join(@project_dir, "package.json")).include?("react")
49
- return "vue" if File.exist?(File.join(@project_dir, "package.json")) && File.read(File.join(@project_dir, "package.json")).include?("vue")
50
- return "angular" if File.exist?(File.join(@project_dir, "angular.json"))
51
- return "express" if File.exist?(File.join(@project_dir, "package.json")) && File.read(File.join(@project_dir, "package.json")).include?("express")
52
- when "python"
53
- return "django" if File.exist?(File.join(@project_dir, "manage.py"))
54
- return "flask" if File.exist?(File.join(@project_dir, "app.py")) && File.read(File.join(@project_dir, "app.py")).include?("Flask")
55
- when "java"
56
- return "spring" if File.exist?(File.join(@project_dir, "pom.xml")) && File.read(File.join(@project_dir, "pom.xml")).include?("spring-boot")
57
- end
58
- "unknown"
59
- end
60
-
61
- def detect_build_system
62
- return "maven" if File.exist?(File.join(@project_dir, "pom.xml"))
63
- return "gradle" if File.exist?(File.join(@project_dir, "build.gradle"))
64
- return "npm" if File.exist?(File.join(@project_dir, "package.json"))
65
- return "bundler" if File.exist?(File.join(@project_dir, "Gemfile"))
66
- return "pip" if File.exist?(File.join(@project_dir, "requirements.txt"))
67
- return "cargo" if File.exist?(File.join(@project_dir, "Cargo.toml"))
68
- return "go" if File.exist?(File.join(@project_dir, "go.mod"))
69
- "unknown"
70
- end
71
-
72
- def detect_package_manager
73
- detect_build_system
74
- end
75
-
76
- def detect_static_analysis_tools
77
- tools = []
78
- tools << "rubocop" if File.exist?(File.join(@project_dir, ".rubocop.yml"))
79
- tools << "eslint" if File.exist?(File.join(@project_dir, ".eslintrc"))
80
- tools << "flake8" if File.exist?(File.join(@project_dir, ".flake8"))
81
- tools << "checkstyle" if File.exist?(File.join(@project_dir, "checkstyle.xml"))
82
- tools << "clippy" if File.exist?(File.join(@project_dir, "Cargo.toml"))
83
- tools
84
- end
85
-
86
- def detect_test_framework
87
- case detect_language
88
- when "ruby"
89
- return "rspec" if File.exist?(File.join(@project_dir, "spec"))
90
- return "minitest" if File.exist?(File.join(@project_dir, "test"))
91
- when "javascript"
92
- return "jest" if File.exist?(File.join(@project_dir, "package.json")) && File.read(File.join(@project_dir, "package.json")).include?("jest")
93
- return "mocha" if File.exist?(File.join(@project_dir, "package.json")) && File.read(File.join(@project_dir, "package.json")).include?("mocha")
94
- when "python"
95
- return "pytest" if File.exist?(File.join(@project_dir, "pytest.ini"))
96
- return "unittest" if Dir.exist?(File.join(@project_dir, "tests"))
97
- when "java"
98
- return "junit" if File.exist?(File.join(@project_dir, "src", "test"))
99
- end
100
- "unknown"
101
- end
102
-
103
- def detect_database
104
- return "postgresql" if File.exist?(File.join(@project_dir, "config", "database.yml")) && File.read(File.join(@project_dir, "config", "database.yml")).include?("postgresql")
105
- return "mysql" if File.exist?(File.join(@project_dir, "config", "database.yml")) && File.read(File.join(@project_dir, "config", "database.yml")).include?("mysql")
106
- return "sqlite" if File.exist?(File.join(@project_dir, "config", "database.yml")) && File.read(File.join(@project_dir, "config", "database.yml")).include?("sqlite")
107
- "unknown"
108
- end
109
-
110
- def detect_deployment
111
- return "docker" if File.exist?(File.join(@project_dir, "Dockerfile"))
112
- return "kubernetes" if File.exist?(File.join(@project_dir, "k8s")) || File.exist?(File.join(@project_dir, "kubernetes"))
113
- return "heroku" if File.exist?(File.join(@project_dir, "Procfile"))
114
- return "aws" if File.exist?(File.join(@project_dir, "serverless.yml")) || File.exist?(File.join(@project_dir, "template.yaml"))
115
- "unknown"
116
- end
117
- end
118
- end
119
- end