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.
- checksums.yaml +4 -4
- data/README.md +59 -4
- data/bin/aidp +2 -2
- data/lib/aidp/analyze/agent_personas.rb +1 -1
- data/lib/aidp/analyze/data_retention_manager.rb +2 -2
- 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/large_analysis_progress.rb +2 -2
- data/lib/aidp/analyze/metrics_storage.rb +336 -0
- data/lib/aidp/analyze/prioritizer.rb +4 -4
- data/lib/aidp/analyze/repository_chunker.rb +15 -13
- 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 +234 -172
- data/lib/aidp/cli/jobs_command.rb +489 -0
- data/lib/aidp/cli/terminal_io.rb +52 -0
- data/lib/aidp/cli.rb +227 -0
- data/lib/aidp/config.rb +33 -0
- 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/project_detector.rb +117 -0
- data/lib/aidp/provider_manager.rb +25 -0
- data/lib/aidp/providers/agent_supervisor.rb +348 -0
- data/lib/aidp/providers/anthropic.rb +187 -0
- data/lib/aidp/providers/base.rb +162 -0
- data/lib/aidp/providers/cursor.rb +304 -0
- data/lib/aidp/providers/gemini.rb +187 -0
- data/lib/aidp/providers/macos_ui.rb +24 -0
- data/lib/aidp/providers/supervised_base.rb +317 -0
- data/lib/aidp/providers/supervised_cursor.rb +22 -0
- data/lib/aidp/sync.rb +13 -0
- data/lib/aidp/util.rb +39 -0
- data/lib/aidp/{shared/version.rb → version.rb} +1 -3
- data/lib/aidp/workspace.rb +19 -0
- data/lib/aidp.rb +36 -45
- data/templates/ANALYZE/01_REPOSITORY_ANALYSIS.md +4 -4
- metadata +89 -45
- data/lib/aidp/shared/cli.rb +0 -117
- data/lib/aidp/shared/config.rb +0 -35
- data/lib/aidp/shared/project_detector.rb +0 -119
- data/lib/aidp/shared/providers/anthropic.rb +0 -26
- data/lib/aidp/shared/providers/base.rb +0 -17
- data/lib/aidp/shared/providers/cursor.rb +0 -102
- data/lib/aidp/shared/providers/gemini.rb +0 -26
- data/lib/aidp/shared/providers/macos_ui.rb +0 -26
- data/lib/aidp/shared/sync.rb +0 -15
- data/lib/aidp/shared/util.rb +0 -41
- 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/
|
5
|
-
require "aidp/
|
6
|
-
require "aidp/
|
7
|
-
require "aidp/
|
8
|
-
require "aidp/
|
9
|
-
require "aidp/
|
10
|
-
require "aidp/
|
11
|
-
require "aidp/
|
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
|
-
#
|
18
|
-
require "aidp/
|
19
|
-
require "aidp/execute/runner"
|
20
|
-
require "aidp/execute/progress"
|
16
|
+
# Database
|
17
|
+
require "aidp/database_connection"
|
21
18
|
|
22
|
-
#
|
23
|
-
require "aidp/
|
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
|
-
|
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,19 +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.
|
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: '
|
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-
|
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.
|
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.
|
137
|
+
version: '0.7'
|
110
138
|
- !ruby/object:Gem::Dependency
|
111
|
-
name: tty-
|
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.
|
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.
|
151
|
+
version: '0.7'
|
124
152
|
- !ruby/object:Gem::Dependency
|
125
|
-
name: tty-
|
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.
|
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.
|
165
|
+
version: '0.18'
|
138
166
|
- !ruby/object:Gem::Dependency
|
139
|
-
name: tty-
|
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.
|
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.
|
179
|
+
version: '0.23'
|
152
180
|
- !ruby/object:Gem::Dependency
|
153
|
-
name:
|
181
|
+
name: tty-screen
|
154
182
|
requirement: !ruby/object:Gem::Requirement
|
155
183
|
requirements:
|
156
184
|
- - "~>"
|
157
185
|
- !ruby/object:Gem::Version
|
158
|
-
version: '
|
159
|
-
type: :
|
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: '
|
193
|
+
version: '0.8'
|
166
194
|
- !ruby/object:Gem::Dependency
|
167
|
-
name:
|
195
|
+
name: tty-spinner
|
168
196
|
requirement: !ruby/object:Gem::Requirement
|
169
197
|
requirements:
|
170
198
|
- - "~>"
|
171
199
|
- !ruby/object:Gem::Version
|
172
|
-
version: '
|
173
|
-
type: :
|
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: '
|
207
|
+
version: '0.9'
|
180
208
|
- !ruby/object:Gem::Dependency
|
181
|
-
name:
|
209
|
+
name: tty-table
|
182
210
|
requirement: !ruby/object:Gem::Requirement
|
183
211
|
requirements:
|
184
212
|
- - "~>"
|
185
213
|
- !ruby/object:Gem::Version
|
186
|
-
version: '
|
187
|
-
type: :
|
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: '
|
194
|
-
description:
|
195
|
-
|
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/
|
238
|
-
- lib/aidp/
|
239
|
-
- lib/aidp/
|
240
|
-
- lib/aidp/
|
241
|
-
- lib/aidp/
|
242
|
-
- lib/aidp/
|
243
|
-
- lib/aidp/
|
244
|
-
- lib/aidp/
|
245
|
-
- lib/aidp/
|
246
|
-
- lib/aidp/
|
247
|
-
- lib/aidp/
|
248
|
-
- lib/aidp/
|
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/
|
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:
|
344
|
+
summary: A CLI for AI-driven software development, from analysis to execution.
|
301
345
|
test_files: []
|
data/lib/aidp/shared/cli.rb
DELETED
@@ -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
|
data/lib/aidp/shared/config.rb
DELETED
@@ -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
|