aidp 0.9.6 → 0.11.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 +194 -25
- data/lib/aidp/analyze/error_handler.rb +4 -2
- data/lib/aidp/{analysis → analyze}/kb_inspector.rb +93 -89
- data/lib/aidp/analyze/prioritizer.rb +3 -2
- data/lib/aidp/analyze/progress.rb +2 -1
- data/lib/aidp/analyze/ruby_maat_integration.rb +7 -3
- data/lib/aidp/analyze/runner.rb +73 -11
- data/lib/aidp/{analysis → analyze}/seams.rb +1 -1
- data/lib/aidp/analyze/steps.rb +10 -8
- data/lib/aidp/{analysis → analyze}/tree_sitter_grammar_loader.rb +11 -5
- data/lib/aidp/{analysis → analyze}/tree_sitter_scan.rb +21 -15
- data/lib/aidp/cli/checkpoint_command.rb +98 -0
- data/lib/aidp/cli/first_run_wizard.rb +83 -103
- data/lib/aidp/cli/jobs_command.rb +270 -36
- data/lib/aidp/cli/terminal_io.rb +3 -3
- data/lib/aidp/cli.rb +411 -69
- data/lib/aidp/config.rb +5 -8
- data/lib/aidp/debug_logger.rb +4 -4
- data/lib/aidp/debug_mixin.rb +11 -4
- data/lib/aidp/execute/checkpoint.rb +282 -0
- data/lib/aidp/execute/checkpoint_display.rb +221 -0
- data/lib/aidp/execute/progress.rb +2 -1
- data/lib/aidp/execute/prompt_manager.rb +62 -0
- data/lib/aidp/execute/runner.rb +67 -20
- data/lib/aidp/execute/steps.rb +36 -27
- data/lib/aidp/execute/work_loop_runner.rb +308 -0
- data/lib/aidp/execute/workflow_selector.rb +50 -26
- data/lib/aidp/harness/condition_detector.rb +4 -4
- data/lib/aidp/harness/config_schema.rb +40 -0
- data/lib/aidp/harness/config_validator.rb +3 -6
- data/lib/aidp/harness/configuration.rb +35 -1
- data/lib/aidp/harness/enhanced_runner.rb +25 -4
- data/lib/aidp/harness/error_handler.rb +103 -28
- data/lib/aidp/harness/provider_factory.rb +6 -1
- data/lib/aidp/harness/provider_manager.rb +273 -19
- data/lib/aidp/harness/runner.rb +14 -6
- data/lib/aidp/harness/simple_user_interface.rb +6 -4
- data/lib/aidp/harness/status_display.rb +118 -106
- data/lib/aidp/harness/test_runner.rb +83 -0
- data/lib/aidp/harness/ui/enhanced_tui.rb +7 -5
- data/lib/aidp/harness/ui/enhanced_workflow_selector.rb +22 -4
- data/lib/aidp/harness/ui/error_handler.rb +7 -2
- data/lib/aidp/harness/ui/frame_manager.rb +61 -39
- data/lib/aidp/harness/ui/job_monitor.rb +2 -0
- data/lib/aidp/harness/ui/navigation/main_menu.rb +27 -16
- data/lib/aidp/harness/ui/navigation/menu_item.rb +1 -0
- data/lib/aidp/harness/ui/navigation/menu_state.rb +1 -0
- data/lib/aidp/harness/ui/navigation/submenu.rb +1 -0
- data/lib/aidp/harness/ui/navigation/workflow_selector.rb +2 -0
- data/lib/aidp/harness/ui/progress_display.rb +26 -7
- data/lib/aidp/harness/ui/question_collector.rb +2 -0
- data/lib/aidp/harness/ui/spinner_group.rb +2 -0
- data/lib/aidp/harness/ui/spinner_helper.rb +1 -1
- data/lib/aidp/harness/ui/status_manager.rb +4 -2
- data/lib/aidp/harness/ui/status_widget.rb +20 -9
- data/lib/aidp/harness/ui/workflow_controller.rb +27 -9
- data/lib/aidp/harness/user_interface.rb +338 -330
- data/lib/aidp/jobs/background_runner.rb +278 -0
- data/lib/aidp/message_display.rb +48 -0
- data/lib/aidp/provider_manager.rb +13 -7
- data/lib/aidp/providers/anthropic.rb +101 -18
- data/lib/aidp/providers/base.rb +51 -1
- data/lib/aidp/providers/codex.rb +248 -0
- data/lib/aidp/providers/cursor.rb +39 -48
- data/lib/aidp/providers/gemini.rb +26 -16
- data/lib/aidp/providers/github_copilot.rb +263 -0
- data/lib/aidp/providers/opencode.rb +38 -47
- data/lib/aidp/version.rb +1 -1
- data/lib/aidp/workflows/definitions.rb +357 -0
- data/lib/aidp/workflows/selector.rb +171 -0
- data/lib/aidp.rb +16 -4
- data/templates/planning/generate_llm_style_guide.md +119 -0
- metadata +43 -31
- data/lib/aidp/analyze/progress_visualizer.rb +0 -314
- /data/templates/{ANALYZE/02_ARCHITECTURE_ANALYSIS.md → analysis/analyze_architecture.md} +0 -0
- /data/templates/{ANALYZE/05_DOCUMENTATION_ANALYSIS.md → analysis/analyze_documentation.md} +0 -0
- /data/templates/{ANALYZE/04_FUNCTIONALITY_ANALYSIS.md → analysis/analyze_functionality.md} +0 -0
- /data/templates/{ANALYZE/01_REPOSITORY_ANALYSIS.md → analysis/analyze_repository.md} +0 -0
- /data/templates/{ANALYZE/06_STATIC_ANALYSIS.md → analysis/analyze_static_code.md} +0 -0
- /data/templates/{ANALYZE/03_TEST_ANALYSIS.md → analysis/analyze_tests.md} +0 -0
- /data/templates/{ANALYZE/07_REFACTORING_RECOMMENDATIONS.md → analysis/recommend_refactoring.md} +0 -0
- /data/templates/{ANALYZE/06a_tree_sitter_scan.md → analysis/scan_with_tree_sitter.md} +0 -0
- /data/templates/{EXECUTE/11_STATIC_ANALYSIS.md → implementation/configure_static_analysis.md} +0 -0
- /data/templates/{EXECUTE/14_DOCS_PORTAL.md → implementation/create_documentation_portal.md} +0 -0
- /data/templates/{EXECUTE/10_IMPLEMENTATION_AGENT.md → implementation/implement_features.md} +0 -0
- /data/templates/{EXECUTE/13_DELIVERY_ROLLOUT.md → implementation/plan_delivery.md} +0 -0
- /data/templates/{EXECUTE/15_POST_RELEASE.md → implementation/review_post_release.md} +0 -0
- /data/templates/{EXECUTE/09_SCAFFOLDING_DEVEX.md → implementation/setup_scaffolding.md} +0 -0
- /data/templates/{EXECUTE/02A_ARCH_GATE_QUESTIONS.md → planning/ask_architecture_questions.md} +0 -0
- /data/templates/{EXECUTE/00_PRD.md → planning/create_prd.md} +0 -0
- /data/templates/{EXECUTE/08_TASKS.md → planning/create_tasks.md} +0 -0
- /data/templates/{EXECUTE/04_DOMAIN_DECOMPOSITION.md → planning/decompose_domain.md} +0 -0
- /data/templates/{EXECUTE/01_NFRS.md → planning/define_nfrs.md} +0 -0
- /data/templates/{EXECUTE/05_CONTRACTS.md → planning/design_apis.md} +0 -0
- /data/templates/{EXECUTE/02_ARCHITECTURE.md → planning/design_architecture.md} +0 -0
- /data/templates/{EXECUTE/06_THREAT_MODEL.md → planning/design_data_model.md} +0 -0
- /data/templates/{EXECUTE/03_ADR_FACTORY.md → planning/generate_adrs.md} +0 -0
- /data/templates/{EXECUTE/12_OBSERVABILITY_SLOS.md → planning/plan_observability.md} +0 -0
- /data/templates/{EXECUTE/07_TEST_PLAN.md → planning/plan_testing.md} +0 -0
|
@@ -10,7 +10,9 @@ module Aidp
|
|
|
10
10
|
# Handles status display using CLI UI spinners
|
|
11
11
|
class StatusWidget < Base
|
|
12
12
|
class StatusError < StandardError; end
|
|
13
|
+
|
|
13
14
|
class InvalidStatusError < StatusError; end
|
|
15
|
+
|
|
14
16
|
class DisplayError < StatusError; end
|
|
15
17
|
|
|
16
18
|
def initialize(ui_components = {})
|
|
@@ -18,6 +20,7 @@ module Aidp
|
|
|
18
20
|
@spinner = ui_components[:spinner] || TTY::Spinner
|
|
19
21
|
@pastel = Pastel.new
|
|
20
22
|
@formatter = ui_components[:formatter] || StatusFormatter.new
|
|
23
|
+
@output = ui_components[:output]
|
|
21
24
|
@status_history = []
|
|
22
25
|
@current_spinner = nil
|
|
23
26
|
@spinner_active = false
|
|
@@ -28,7 +31,7 @@ module Aidp
|
|
|
28
31
|
|
|
29
32
|
formatted_message = @formatter.format_status_message(message)
|
|
30
33
|
@spinner.spin(formatted_message) do |spinner|
|
|
31
|
-
yield(spinner) if
|
|
34
|
+
yield(spinner) if block
|
|
32
35
|
end
|
|
33
36
|
rescue => e
|
|
34
37
|
raise DisplayError, "Failed to show status: #{e.message}"
|
|
@@ -56,7 +59,7 @@ module Aidp
|
|
|
56
59
|
validate_message(message)
|
|
57
60
|
|
|
58
61
|
formatted_message = @formatter.format_success_message(message)
|
|
59
|
-
|
|
62
|
+
display_message(formatted_message)
|
|
60
63
|
rescue => e
|
|
61
64
|
raise DisplayError, "Failed to show success status: #{e.message}"
|
|
62
65
|
end
|
|
@@ -65,7 +68,7 @@ module Aidp
|
|
|
65
68
|
validate_message(message)
|
|
66
69
|
|
|
67
70
|
formatted_message = @formatter.format_error_message(message)
|
|
68
|
-
|
|
71
|
+
display_message(formatted_message)
|
|
69
72
|
rescue => e
|
|
70
73
|
raise DisplayError, "Failed to show error status: #{e.message}"
|
|
71
74
|
end
|
|
@@ -74,7 +77,7 @@ module Aidp
|
|
|
74
77
|
validate_message(message)
|
|
75
78
|
|
|
76
79
|
formatted_message = @formatter.format_warning_message(message)
|
|
77
|
-
|
|
80
|
+
display_message(formatted_message)
|
|
78
81
|
rescue => e
|
|
79
82
|
raise DisplayError, "Failed to show warning status: #{e.message}"
|
|
80
83
|
end
|
|
@@ -181,6 +184,14 @@ module Aidp
|
|
|
181
184
|
|
|
182
185
|
private
|
|
183
186
|
|
|
187
|
+
def display_message(message)
|
|
188
|
+
if @output
|
|
189
|
+
@output.say(message)
|
|
190
|
+
else
|
|
191
|
+
puts message
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
184
195
|
def validate_message(message)
|
|
185
196
|
raise InvalidStatusError, "Message cannot be empty" if message.to_s.strip.empty?
|
|
186
197
|
end
|
|
@@ -211,22 +222,22 @@ module Aidp
|
|
|
211
222
|
end
|
|
212
223
|
|
|
213
224
|
def display_loading_status(message)
|
|
214
|
-
|
|
225
|
+
display_message("⏳ #{message}")
|
|
215
226
|
end
|
|
216
227
|
|
|
217
228
|
def display_success_status(message)
|
|
218
|
-
|
|
229
|
+
display_message("✅ #{message}")
|
|
219
230
|
end
|
|
220
231
|
|
|
221
232
|
def display_error_status(message, error_data)
|
|
222
|
-
|
|
233
|
+
display_message("❌ #{message}")
|
|
223
234
|
if error_data && error_data[:message]
|
|
224
|
-
|
|
235
|
+
display_message(" #{error_data[:message]}")
|
|
225
236
|
end
|
|
226
237
|
end
|
|
227
238
|
|
|
228
239
|
def display_warning_status(message)
|
|
229
|
-
|
|
240
|
+
display_message("⚠️ #{message}")
|
|
230
241
|
end
|
|
231
242
|
end
|
|
232
243
|
|
|
@@ -11,7 +11,9 @@ module Aidp
|
|
|
11
11
|
# Workflow control interface for pause/resume/cancel/stop
|
|
12
12
|
class WorkflowController < Base
|
|
13
13
|
class WorkflowError < StandardError; end
|
|
14
|
+
|
|
14
15
|
class InvalidStateError < WorkflowError; end
|
|
16
|
+
|
|
15
17
|
class ControlError < WorkflowError; end
|
|
16
18
|
|
|
17
19
|
WORKFLOW_STATES = {
|
|
@@ -27,6 +29,7 @@ module Aidp
|
|
|
27
29
|
@status_manager = ui_components[:status_manager] || StatusManager.new
|
|
28
30
|
@frame_manager = ui_components[:frame_manager] || FrameManager.new
|
|
29
31
|
@formatter = ui_components[:formatter] || WorkflowControllerFormatter.new
|
|
32
|
+
@output = ui_components[:output]
|
|
30
33
|
|
|
31
34
|
@current_state = :running
|
|
32
35
|
@state_history = []
|
|
@@ -187,8 +190,23 @@ module Aidp
|
|
|
187
190
|
@control_thread = nil
|
|
188
191
|
end
|
|
189
192
|
|
|
193
|
+
# Testing helper method to set state
|
|
194
|
+
def set_state_for_testing(state)
|
|
195
|
+
@control_mutex.synchronize do
|
|
196
|
+
@current_state = state
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
190
200
|
private
|
|
191
201
|
|
|
202
|
+
def display_message(message)
|
|
203
|
+
if @output
|
|
204
|
+
@output.say(message)
|
|
205
|
+
else
|
|
206
|
+
puts message
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
192
210
|
def validate_state_transition(action)
|
|
193
211
|
case action
|
|
194
212
|
when :pause
|
|
@@ -229,19 +247,19 @@ module Aidp
|
|
|
229
247
|
end
|
|
230
248
|
|
|
231
249
|
def display_status_info(status)
|
|
232
|
-
|
|
233
|
-
|
|
250
|
+
display_message("Current State: #{@formatter.format_state(status[:state])}")
|
|
251
|
+
display_message("State Name: #{status[:state_name]}")
|
|
234
252
|
|
|
235
253
|
if status[:pause_time]
|
|
236
|
-
|
|
254
|
+
display_message("Paused Since: #{status[:pause_time]}")
|
|
237
255
|
end
|
|
238
256
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
257
|
+
display_message("\nAvailable Actions:")
|
|
258
|
+
display_message(" Pause: #{status[:can_pause] ? "Yes" : "No"}")
|
|
259
|
+
display_message(" Resume: #{status[:can_resume] ? "Yes" : "No"}")
|
|
260
|
+
display_message(" Cancel: #{status[:can_cancel] ? "Yes" : "No"}")
|
|
261
|
+
display_message(" Stop: #{status[:can_stop] ? "Yes" : "No"}")
|
|
262
|
+
display_message(" Complete: #{status[:can_complete] ? "Yes" : "No"}")
|
|
245
263
|
end
|
|
246
264
|
|
|
247
265
|
def control_interface_loop
|