aidp 0.27.0 → 0.28.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 +89 -0
- data/lib/aidp/cli/models_command.rb +5 -6
- data/lib/aidp/cli.rb +10 -8
- data/lib/aidp/config.rb +54 -0
- data/lib/aidp/debug_mixin.rb +23 -1
- data/lib/aidp/execute/agent_signal_parser.rb +22 -0
- data/lib/aidp/execute/repl_macros.rb +2 -2
- data/lib/aidp/execute/steps.rb +94 -1
- data/lib/aidp/execute/work_loop_runner.rb +209 -17
- data/lib/aidp/execute/workflow_selector.rb +2 -25
- data/lib/aidp/firewall/provider_requirements_collector.rb +262 -0
- data/lib/aidp/harness/ai_decision_engine.rb +35 -2
- data/lib/aidp/harness/config_manager.rb +0 -5
- data/lib/aidp/harness/config_schema.rb +8 -0
- data/lib/aidp/harness/configuration.rb +27 -19
- data/lib/aidp/harness/enhanced_runner.rb +1 -4
- data/lib/aidp/harness/error_handler.rb +1 -72
- data/lib/aidp/harness/provider_factory.rb +11 -2
- data/lib/aidp/harness/state_manager.rb +0 -7
- data/lib/aidp/harness/thinking_depth_manager.rb +47 -68
- data/lib/aidp/harness/ui/enhanced_tui.rb +8 -18
- data/lib/aidp/harness/ui/enhanced_workflow_selector.rb +0 -18
- data/lib/aidp/harness/ui/progress_display.rb +6 -2
- data/lib/aidp/harness/user_interface.rb +0 -58
- data/lib/aidp/init/runner.rb +7 -2
- data/lib/aidp/planning/analyzers/feedback_analyzer.rb +365 -0
- data/lib/aidp/planning/builders/agile_plan_builder.rb +387 -0
- data/lib/aidp/planning/builders/project_plan_builder.rb +193 -0
- data/lib/aidp/planning/generators/gantt_generator.rb +190 -0
- data/lib/aidp/planning/generators/iteration_plan_generator.rb +392 -0
- data/lib/aidp/planning/generators/legacy_research_planner.rb +473 -0
- data/lib/aidp/planning/generators/marketing_report_generator.rb +348 -0
- data/lib/aidp/planning/generators/mvp_scope_generator.rb +310 -0
- data/lib/aidp/planning/generators/user_test_plan_generator.rb +373 -0
- data/lib/aidp/planning/generators/wbs_generator.rb +259 -0
- data/lib/aidp/planning/mappers/persona_mapper.rb +163 -0
- data/lib/aidp/planning/parsers/document_parser.rb +141 -0
- data/lib/aidp/planning/parsers/feedback_data_parser.rb +252 -0
- data/lib/aidp/provider_manager.rb +8 -32
- data/lib/aidp/providers/aider.rb +264 -0
- data/lib/aidp/providers/anthropic.rb +74 -2
- data/lib/aidp/providers/base.rb +25 -1
- data/lib/aidp/providers/codex.rb +26 -3
- data/lib/aidp/providers/cursor.rb +16 -0
- data/lib/aidp/providers/gemini.rb +13 -0
- data/lib/aidp/providers/github_copilot.rb +17 -0
- data/lib/aidp/providers/kilocode.rb +11 -0
- data/lib/aidp/providers/opencode.rb +11 -0
- data/lib/aidp/setup/wizard.rb +249 -39
- data/lib/aidp/version.rb +1 -1
- data/lib/aidp/watch/build_processor.rb +211 -30
- data/lib/aidp/watch/change_request_processor.rb +128 -14
- data/lib/aidp/watch/ci_fix_processor.rb +103 -37
- data/lib/aidp/watch/ci_log_extractor.rb +258 -0
- data/lib/aidp/watch/github_state_extractor.rb +177 -0
- data/lib/aidp/watch/implementation_verifier.rb +284 -0
- data/lib/aidp/watch/plan_generator.rb +7 -43
- data/lib/aidp/watch/plan_processor.rb +7 -6
- data/lib/aidp/watch/repository_client.rb +245 -17
- data/lib/aidp/watch/review_processor.rb +98 -17
- data/lib/aidp/watch/reviewers/base_reviewer.rb +1 -1
- data/lib/aidp/watch/runner.rb +181 -29
- data/lib/aidp/watch/state_store.rb +22 -1
- data/lib/aidp/workflows/definitions.rb +147 -0
- data/lib/aidp/workstream_cleanup.rb +245 -0
- data/lib/aidp/worktree.rb +19 -0
- data/templates/aidp.yml.example +57 -0
- data/templates/implementation/generate_tdd_specs.md +213 -0
- data/templates/implementation/iterative_implementation.md +122 -0
- data/templates/planning/agile/analyze_feedback.md +183 -0
- data/templates/planning/agile/generate_iteration_plan.md +179 -0
- data/templates/planning/agile/generate_legacy_research_plan.md +171 -0
- data/templates/planning/agile/generate_marketing_report.md +162 -0
- data/templates/planning/agile/generate_mvp_scope.md +127 -0
- data/templates/planning/agile/generate_user_test_plan.md +143 -0
- data/templates/planning/agile/ingest_feedback.md +174 -0
- data/templates/planning/assemble_project_plan.md +113 -0
- data/templates/planning/assign_personas.md +108 -0
- data/templates/planning/create_tasks.md +52 -6
- data/templates/planning/generate_gantt.md +86 -0
- data/templates/planning/generate_wbs.md +85 -0
- data/templates/planning/initialize_planning_mode.md +70 -0
- data/templates/skills/README.md +2 -2
- data/templates/skills/marketing_strategist/SKILL.md +279 -0
- data/templates/skills/product_manager/SKILL.md +177 -0
- data/templates/skills/ruby_aidp_planning/SKILL.md +497 -0
- data/templates/skills/ruby_rspec_tdd/SKILL.md +514 -0
- data/templates/skills/ux_researcher/SKILL.md +222 -0
- metadata +39 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 931d08a58cf52b7acc999d7e3320181c29710c50922463f4fb5c4e0a76c02e04
|
|
4
|
+
data.tar.gz: 1971534889d0fde6daa6d8da6f345ffac4a698f827a205e445f75e7fa26d38da
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b87667e112faeb9818187eb97e281539e936ad213dcd49867781b37ff57ae9c827308cb9d4f7bdf707e48133fc3efcc79d1815d5a9b12cb3b395aad5d0e432cf
|
|
7
|
+
data.tar.gz: 5b9fa041a4e680115248fad3fad2ccd7c8ab9cc956a471051b2e2945b1d2277cfea2af7f1d3f105dd36e8e9be1f149f42fb91080496f055deb0c26e8daef1427
|
data/README.md
CHANGED
|
@@ -135,6 +135,95 @@ AIDP implements **work loops** - an iterative execution pattern where AI agents
|
|
|
135
135
|
|
|
136
136
|
See [Work Loops Guide](docs/WORK_LOOPS_GUIDE.md) for details.
|
|
137
137
|
|
|
138
|
+
### Waterfall Planning Mode
|
|
139
|
+
|
|
140
|
+
Create comprehensive project plans with work breakdown structures, Gantt charts, and automated task assignments:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# Start planning workflow
|
|
144
|
+
aidp execute
|
|
145
|
+
# Select "Waterfall Planning"
|
|
146
|
+
|
|
147
|
+
# Choose your path:
|
|
148
|
+
# - Ingest existing documentation (PRDs, design docs)
|
|
149
|
+
# - Generate from scratch through AI dialogue
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Generated Artifacts** (in `.aidp/docs/`):
|
|
153
|
+
|
|
154
|
+
- **PRD.md** - Product requirements document
|
|
155
|
+
- **TECH_DESIGN.md** - Technical architecture and design
|
|
156
|
+
- **WBS.md** - Work breakdown structure with phases and tasks
|
|
157
|
+
- **GANTT.md** - Mermaid Gantt chart with critical path analysis
|
|
158
|
+
- **persona_map.yml** - AI-powered task-to-persona assignments
|
|
159
|
+
- **PROJECT_PLAN.md** - Complete integrated project plan
|
|
160
|
+
|
|
161
|
+
**Key Features:**
|
|
162
|
+
|
|
163
|
+
- **Documentation Ingestion** - Import and enhance existing project docs
|
|
164
|
+
- **AI-Guided Planning** - Generate complete plans through dialogue
|
|
165
|
+
- **Critical Path Analysis** - Identify project bottlenecks
|
|
166
|
+
- **Zero Framework Cognition** - AI-powered persona assignment (no heuristics)
|
|
167
|
+
- **Mermaid Visualizations** - Gantt charts renderable on GitHub/GitLab
|
|
168
|
+
- **TDD Integration** - Optional test-driven development workflow
|
|
169
|
+
|
|
170
|
+
See [Waterfall Planning Mode Guide](docs/WATERFALL_PLANNING_MODE.md) for complete documentation.
|
|
171
|
+
|
|
172
|
+
### Agile Development Mode
|
|
173
|
+
|
|
174
|
+
Build products iteratively with user feedback loops, MVP scoping, and data-driven iteration planning:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# Start planning workflow
|
|
178
|
+
aidp execute
|
|
179
|
+
# Select "Agile MVP Planning", "Agile Iteration Planning", or "Legacy Product Research"
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Three Agile Workflows:**
|
|
183
|
+
|
|
184
|
+
#### 1. MVP Planning
|
|
185
|
+
|
|
186
|
+
Define minimum viable product scope, create user testing plans, and generate marketing materials:
|
|
187
|
+
|
|
188
|
+
- **Input**: Product Requirements Document (PRD)
|
|
189
|
+
- **Outputs**: MVP scope, user testing plan, marketing report
|
|
190
|
+
- **Use case**: Launching a new product with user validation
|
|
191
|
+
|
|
192
|
+
#### 2. Iteration Planning
|
|
193
|
+
|
|
194
|
+
Analyze user feedback and plan next development iteration:
|
|
195
|
+
|
|
196
|
+
- **Input**: User feedback data (CSV/JSON/markdown)
|
|
197
|
+
- **Outputs**: Feedback analysis, iteration plan with prioritized tasks
|
|
198
|
+
- **Use case**: Improving product based on real user data
|
|
199
|
+
|
|
200
|
+
#### 3. Legacy Research
|
|
201
|
+
|
|
202
|
+
Analyze existing codebase and create user research plan:
|
|
203
|
+
|
|
204
|
+
- **Input**: Codebase path and language
|
|
205
|
+
- **Outputs**: Research plan, feature audit, testing strategy
|
|
206
|
+
- **Use case**: Understanding user needs for existing product
|
|
207
|
+
|
|
208
|
+
**Generated Artifacts** (in `.aidp/docs/`):
|
|
209
|
+
|
|
210
|
+
- **MVP_SCOPE.md** - Must-have vs nice-to-have feature breakdown
|
|
211
|
+
- **USER_TEST_PLAN.md** - Comprehensive user testing strategy
|
|
212
|
+
- **MARKETING_REPORT.md** - Value propositions and messaging
|
|
213
|
+
- **USER_FEEDBACK_ANALYSIS.md** - AI-powered semantic feedback analysis
|
|
214
|
+
- **NEXT_ITERATION_PLAN.md** - Prioritized tasks for next iteration
|
|
215
|
+
- **LEGACY_USER_RESEARCH_PLAN.md** - Research strategy for existing product
|
|
216
|
+
|
|
217
|
+
**Key Features:**
|
|
218
|
+
|
|
219
|
+
- **Zero Framework Cognition** - AI-powered semantic analysis (no heuristics)
|
|
220
|
+
- **Multi-Format Support** - Ingest feedback from CSV, JSON, or markdown
|
|
221
|
+
- **Iterative Loops** - Continuous improvement based on user data
|
|
222
|
+
- **Marketing Focus** - Translate features into customer value
|
|
223
|
+
- **Three New Personas** - Product Manager, UX Researcher, Marketing Strategist
|
|
224
|
+
|
|
225
|
+
See [Agile Development Mode Guide](docs/AGILE_MODE_GUIDE.md) for complete documentation.
|
|
226
|
+
|
|
138
227
|
### Job Management
|
|
139
228
|
|
|
140
229
|
Monitor and control background jobs:
|
|
@@ -437,8 +437,8 @@ module Aidp
|
|
|
437
437
|
|
|
438
438
|
configured_providers.any? do |provider_name|
|
|
439
439
|
provider_cfg = config.provider_config(provider_name)
|
|
440
|
-
tier_config = provider_cfg.dig(:
|
|
441
|
-
provider_cfg.dig(:
|
|
440
|
+
tier_config = provider_cfg.dig(:thinking_tiers, tier.to_sym) ||
|
|
441
|
+
provider_cfg.dig(:thinking_tiers, tier)
|
|
442
442
|
|
|
443
443
|
tier_config && tier_config[:models] && !tier_config[:models].empty?
|
|
444
444
|
end
|
|
@@ -455,8 +455,7 @@ module Aidp
|
|
|
455
455
|
next unless provider_class
|
|
456
456
|
|
|
457
457
|
provider_cfg = config.provider_config(provider_name)
|
|
458
|
-
|
|
459
|
-
tiers_cfg = thinking_cfg[:tiers] || {}
|
|
458
|
+
tiers_cfg = provider_cfg[:thinking_tiers] || {}
|
|
460
459
|
|
|
461
460
|
# Validate models in each tier
|
|
462
461
|
tiers_cfg.each do |tier, tier_config|
|
|
@@ -537,8 +536,8 @@ module Aidp
|
|
|
537
536
|
end
|
|
538
537
|
|
|
539
538
|
if suggested_model
|
|
540
|
-
"Add to aidp.yml under providers.#{suggested_model[:provider]}.
|
|
541
|
-
" -
|
|
539
|
+
"Add to aidp.yml under providers.#{suggested_model[:provider]}.thinking_tiers.#{tier}.models:\n" \
|
|
540
|
+
" - #{suggested_model[:family]}"
|
|
542
541
|
else
|
|
543
542
|
"Configure a model for this tier in aidp.yml"
|
|
544
543
|
end
|
data/lib/aidp/cli.rb
CHANGED
|
@@ -85,9 +85,6 @@ module Aidp
|
|
|
85
85
|
tui = Aidp::Harness::UI::EnhancedTUI.new
|
|
86
86
|
workflow_selector = Aidp::Harness::UI::EnhancedWorkflowSelector.new(tui, project_dir: Dir.pwd)
|
|
87
87
|
|
|
88
|
-
# Start TUI display loop
|
|
89
|
-
tui.start_display_loop
|
|
90
|
-
|
|
91
88
|
begin
|
|
92
89
|
# Copilot is now the default mode - no menu selection
|
|
93
90
|
# The guided workflow selector will internally choose appropriate mode
|
|
@@ -120,7 +117,7 @@ module Aidp
|
|
|
120
117
|
display_message("\n❌ Error: #{e.message}", type: :error)
|
|
121
118
|
1
|
|
122
119
|
ensure
|
|
123
|
-
tui.
|
|
120
|
+
tui.restore_screen
|
|
124
121
|
end
|
|
125
122
|
end
|
|
126
123
|
|
|
@@ -191,6 +188,7 @@ module Aidp
|
|
|
191
188
|
opts.separator " pause-all - Pause all active workstreams"
|
|
192
189
|
opts.separator " resume-all - Resume all paused workstreams"
|
|
193
190
|
opts.separator " stop-all - Stop all active workstreams"
|
|
191
|
+
opts.separator " cleanup - Interactive cleanup of workstreams"
|
|
194
192
|
opts.separator " work Execute workflow in workstream context"
|
|
195
193
|
opts.separator " --workstream <slug> - Required: workstream to run in"
|
|
196
194
|
opts.separator " --mode <mode> - analyze or execute (default: execute)"
|
|
@@ -1303,6 +1301,12 @@ module Aidp
|
|
|
1303
1301
|
end
|
|
1304
1302
|
display_message("⏹️ Stopped #{stopped_count} workstream(s)", type: :success)
|
|
1305
1303
|
|
|
1304
|
+
when "cleanup"
|
|
1305
|
+
# Interactive cleanup of workstreams
|
|
1306
|
+
require_relative "workstream_cleanup"
|
|
1307
|
+
cleanup = Aidp::WorkstreamCleanup.new(project_dir: Dir.pwd, prompt: create_prompt)
|
|
1308
|
+
cleanup.run
|
|
1309
|
+
|
|
1306
1310
|
else
|
|
1307
1311
|
display_message("Usage: aidp ws <command>", type: :info)
|
|
1308
1312
|
display_message("", type: :info)
|
|
@@ -1317,6 +1321,7 @@ module Aidp
|
|
|
1317
1321
|
display_message(" pause <slug> Pause workstream execution", type: :info)
|
|
1318
1322
|
display_message(" resume <slug> Resume paused workstream", type: :info)
|
|
1319
1323
|
display_message(" complete <slug> Mark workstream as completed", type: :info)
|
|
1324
|
+
display_message(" cleanup Interactive cleanup of workstreams", type: :info)
|
|
1320
1325
|
display_message("", type: :info)
|
|
1321
1326
|
display_message("Options:", type: :info)
|
|
1322
1327
|
display_message(" --base-branch <branch> Branch to create from (for 'new')", type: :info)
|
|
@@ -1411,9 +1416,6 @@ module Aidp
|
|
|
1411
1416
|
tui = Aidp::Harness::UI::EnhancedTUI.new
|
|
1412
1417
|
workflow_selector = Aidp::Harness::UI::EnhancedWorkflowSelector.new(tui, project_dir: Dir.pwd)
|
|
1413
1418
|
|
|
1414
|
-
# Start TUI display loop
|
|
1415
|
-
tui.start_display_loop
|
|
1416
|
-
|
|
1417
1419
|
begin
|
|
1418
1420
|
# Get workflow configuration
|
|
1419
1421
|
workflow_config = workflow_selector.select_workflow(harness_mode: false, mode: mode)
|
|
@@ -1434,7 +1436,7 @@ module Aidp
|
|
|
1434
1436
|
rescue Interrupt
|
|
1435
1437
|
display_message("\n\n⏹️ Interrupted by user", type: :warning)
|
|
1436
1438
|
ensure
|
|
1437
|
-
tui.
|
|
1439
|
+
tui.restore_screen
|
|
1438
1440
|
end
|
|
1439
1441
|
end
|
|
1440
1442
|
end
|
data/lib/aidp/config.rb
CHANGED
|
@@ -156,6 +156,27 @@ module Aidp
|
|
|
156
156
|
search_paths: [],
|
|
157
157
|
default_provider_filter: true,
|
|
158
158
|
enable_custom_skills: true
|
|
159
|
+
},
|
|
160
|
+
waterfall: {
|
|
161
|
+
enabled: true,
|
|
162
|
+
docs_directory: ".aidp/docs",
|
|
163
|
+
generate_decisions_md: true,
|
|
164
|
+
gantt_format: "mermaid",
|
|
165
|
+
wbs_phases: [
|
|
166
|
+
"Requirements",
|
|
167
|
+
"Design",
|
|
168
|
+
"Implementation",
|
|
169
|
+
"Testing",
|
|
170
|
+
"Deployment"
|
|
171
|
+
],
|
|
172
|
+
effort_estimation: {
|
|
173
|
+
method: "llm_relative",
|
|
174
|
+
units: "story_points"
|
|
175
|
+
},
|
|
176
|
+
persona_assignment: {
|
|
177
|
+
method: "zfc_automatic",
|
|
178
|
+
allow_parallel: true
|
|
179
|
+
}
|
|
159
180
|
}
|
|
160
181
|
}.freeze
|
|
161
182
|
|
|
@@ -246,6 +267,24 @@ module Aidp
|
|
|
246
267
|
symbolize_keys(skills_section)
|
|
247
268
|
end
|
|
248
269
|
|
|
270
|
+
# Get waterfall configuration
|
|
271
|
+
def self.waterfall_config(project_dir = Dir.pwd)
|
|
272
|
+
config = load_harness_config(project_dir)
|
|
273
|
+
waterfall_section = config[:waterfall] || config["waterfall"] || {}
|
|
274
|
+
|
|
275
|
+
# Convert string keys to symbols for consistency
|
|
276
|
+
symbolize_keys(waterfall_section)
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
# Get agile configuration
|
|
280
|
+
def self.agile_config(project_dir = Dir.pwd)
|
|
281
|
+
config = load_harness_config(project_dir)
|
|
282
|
+
agile_section = config[:agile] || config["agile"] || {}
|
|
283
|
+
|
|
284
|
+
# Convert string keys to symbols for consistency
|
|
285
|
+
symbolize_keys(agile_section)
|
|
286
|
+
end
|
|
287
|
+
|
|
249
288
|
# Check if configuration file exists
|
|
250
289
|
def self.config_exists?(project_dir = Dir.pwd)
|
|
251
290
|
ConfigPaths.config_exists?(project_dir)
|
|
@@ -280,6 +319,15 @@ module Aidp
|
|
|
280
319
|
max_tokens: 50_000,
|
|
281
320
|
default_flags: []
|
|
282
321
|
}
|
|
322
|
+
},
|
|
323
|
+
agile: {
|
|
324
|
+
mvp_first: true,
|
|
325
|
+
feedback_loops: true,
|
|
326
|
+
auto_iteration: false,
|
|
327
|
+
research_enabled: true,
|
|
328
|
+
marketing_enabled: true,
|
|
329
|
+
legacy_analysis: true,
|
|
330
|
+
personas: ["product_manager", "ux_researcher", "architect", "senior_developer", "qa_engineer", "devops_engineer", "tech_writer", "marketing_strategist"]
|
|
283
331
|
}
|
|
284
332
|
}
|
|
285
333
|
|
|
@@ -337,6 +385,12 @@ module Aidp
|
|
|
337
385
|
merged[:thinking] = symbolize_keys(thinking_section)
|
|
338
386
|
end
|
|
339
387
|
|
|
388
|
+
# Deep merge waterfall config
|
|
389
|
+
if config[:waterfall] || config["waterfall"]
|
|
390
|
+
waterfall_section = config[:waterfall] || config["waterfall"]
|
|
391
|
+
merged[:waterfall] = merged[:waterfall].merge(symbolize_keys(waterfall_section))
|
|
392
|
+
end
|
|
393
|
+
|
|
340
394
|
merged
|
|
341
395
|
end
|
|
342
396
|
|
data/lib/aidp/debug_mixin.rb
CHANGED
|
@@ -78,7 +78,9 @@ module Aidp
|
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
if error && !error.empty?
|
|
81
|
-
|
|
81
|
+
# Filter out benign sandbox debug messages from Claude CLI
|
|
82
|
+
filtered_error = filter_benign_errors(error)
|
|
83
|
+
debug_logger.error(component_name, "❌ Error output: #{filtered_error}") unless filtered_error.empty?
|
|
82
84
|
end
|
|
83
85
|
|
|
84
86
|
if debug_verbose?
|
|
@@ -171,6 +173,26 @@ module Aidp
|
|
|
171
173
|
|
|
172
174
|
private
|
|
173
175
|
|
|
176
|
+
# Filter out benign error messages that don't indicate real failures
|
|
177
|
+
def filter_benign_errors(error)
|
|
178
|
+
return "" if error.nil?
|
|
179
|
+
|
|
180
|
+
# List of string patterns for benign messages to filter out
|
|
181
|
+
# Using simple string matching to avoid ReDoS vulnerabilities
|
|
182
|
+
benign_substrings = [
|
|
183
|
+
"[SandboxDebug]",
|
|
184
|
+
"Seccomp filtering not available",
|
|
185
|
+
"allowAllUnixSockets mode"
|
|
186
|
+
]
|
|
187
|
+
|
|
188
|
+
lines = error.lines
|
|
189
|
+
filtered_lines = lines.reject do |line|
|
|
190
|
+
benign_substrings.any? { |substring| line.include?(substring) }
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
filtered_lines.join
|
|
194
|
+
end
|
|
195
|
+
|
|
174
196
|
# Safely derive a component name for logging (memoized).
|
|
175
197
|
# Handles anonymous classes and modules gracefully.
|
|
176
198
|
def component_name
|
|
@@ -36,6 +36,28 @@ module Aidp
|
|
|
36
36
|
tasks
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
+
# Parse task status update signals from agent output
|
|
40
|
+
# Returns array of status update hashes with task_id, status, and optional reason
|
|
41
|
+
# Pattern: Update task: task_id_here status: done|in_progress|pending|abandoned [reason: "reason"]
|
|
42
|
+
def self.parse_task_status_updates(output)
|
|
43
|
+
return [] unless output
|
|
44
|
+
|
|
45
|
+
updates = []
|
|
46
|
+
# Pattern matches: Update task: task_123_abc status: done
|
|
47
|
+
# Or: Update task: task_123_abc status: abandoned reason: "No longer needed"
|
|
48
|
+
pattern = /Update\s+task:\s*(\S+)\s+status:\s*(done|in_progress|pending|abandoned)(?:\s+reason:\s*"([^"]+)")?/i
|
|
49
|
+
|
|
50
|
+
output.to_s.scan(pattern).each do |task_id, status, reason|
|
|
51
|
+
updates << {
|
|
52
|
+
task_id: task_id.strip,
|
|
53
|
+
status: status.downcase.to_sym,
|
|
54
|
+
reason: reason&.strip
|
|
55
|
+
}
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
updates
|
|
59
|
+
end
|
|
60
|
+
|
|
39
61
|
def self.normalize_token(raw)
|
|
40
62
|
return nil if raw.nil? || raw.empty?
|
|
41
63
|
|
|
@@ -1777,8 +1777,8 @@ module Aidp
|
|
|
1777
1777
|
lines << "Legend: → current, ↑ max allowed"
|
|
1778
1778
|
lines << ""
|
|
1779
1779
|
|
|
1780
|
-
# Show current model selection
|
|
1781
|
-
current_model = manager.select_model_for_tier
|
|
1780
|
+
# Show current model selection (using harness default provider)
|
|
1781
|
+
current_model = manager.select_model_for_tier(provider: config.default_provider)
|
|
1782
1782
|
if current_model
|
|
1783
1783
|
provider, model_name, model_data = current_model
|
|
1784
1784
|
lines << "Current Model: #{provider}/#{model_name}"
|
data/lib/aidp/execute/steps.rb
CHANGED
|
@@ -121,12 +121,20 @@ module Aidp
|
|
|
121
121
|
},
|
|
122
122
|
# New implementation step for actual development work
|
|
123
123
|
"16_IMPLEMENTATION" => {
|
|
124
|
-
"templates" => ["implementation/
|
|
124
|
+
"templates" => ["implementation/iterative_implementation.md"], # Multi-step feature implementation with task decomposition
|
|
125
125
|
"description" => "Execute Implementation Tasks",
|
|
126
126
|
"outs" => ["implementation_log.md"],
|
|
127
127
|
"gate" => false,
|
|
128
128
|
"implementation" => true # Special step that runs development tasks
|
|
129
129
|
},
|
|
130
|
+
# Test-Driven Development (TDD) - Optional step for any workflow
|
|
131
|
+
"17_TDD_SPECIFICATION" => {
|
|
132
|
+
"templates" => ["implementation/generate_tdd_specs.md"],
|
|
133
|
+
"description" => "Generate TDD test specifications (write tests first)",
|
|
134
|
+
"outs" => ["docs/tdd_specifications.md", "spec/**/*_spec.rb"],
|
|
135
|
+
"gate" => false,
|
|
136
|
+
"interactive" => false
|
|
137
|
+
},
|
|
130
138
|
# Simple task execution - for one-off commands and simple fixes
|
|
131
139
|
"99_SIMPLE_TASK" => {
|
|
132
140
|
"templates" => ["implementation/simple_task.md"],
|
|
@@ -134,6 +142,91 @@ module Aidp
|
|
|
134
142
|
"outs" => [],
|
|
135
143
|
"gate" => false,
|
|
136
144
|
"simple" => true # Special step for simple, focused tasks
|
|
145
|
+
},
|
|
146
|
+
# Generic planning and project management steps (usable in any workflow)
|
|
147
|
+
"18_WBS" => {
|
|
148
|
+
"templates" => ["planning/generate_wbs.md"],
|
|
149
|
+
"description" => "Generate Work Breakdown Structure with phases and tasks",
|
|
150
|
+
"outs" => [".aidp/docs/WBS.md"],
|
|
151
|
+
"gate" => false
|
|
152
|
+
},
|
|
153
|
+
"19_GANTT_CHART" => {
|
|
154
|
+
"templates" => ["planning/generate_gantt.md"],
|
|
155
|
+
"description" => "Generate Gantt chart with timeline and critical path",
|
|
156
|
+
"outs" => [".aidp/docs/GANTT.md"],
|
|
157
|
+
"gate" => false
|
|
158
|
+
},
|
|
159
|
+
"20_PERSONA_ASSIGNMENT" => {
|
|
160
|
+
"templates" => ["planning/assign_personas.md"],
|
|
161
|
+
"description" => "Assign tasks to personas/roles using AI (ZFC)",
|
|
162
|
+
"outs" => [".aidp/docs/persona_map.yml"],
|
|
163
|
+
"gate" => false
|
|
164
|
+
},
|
|
165
|
+
"21_PROJECT_PLAN_ASSEMBLY" => {
|
|
166
|
+
"templates" => ["planning/assemble_project_plan.md"],
|
|
167
|
+
"description" => "Assemble complete project plan from all artifacts",
|
|
168
|
+
"outs" => [".aidp/docs/PROJECT_PLAN.md"],
|
|
169
|
+
"gate" => false
|
|
170
|
+
},
|
|
171
|
+
# Planning mode initialization (supports ingestion vs generation workflows)
|
|
172
|
+
"22_PLANNING_MODE_INIT" => {
|
|
173
|
+
"templates" => ["planning/initialize_planning_mode.md"],
|
|
174
|
+
"description" => "Initialize planning mode (ingestion of existing docs vs generation from scratch)",
|
|
175
|
+
"outs" => [".aidp/docs/.planning_mode"],
|
|
176
|
+
"gate" => true,
|
|
177
|
+
"interactive" => true
|
|
178
|
+
},
|
|
179
|
+
# Agile planning steps
|
|
180
|
+
"23_MVP_SCOPE" => {
|
|
181
|
+
"skill" => "product_manager",
|
|
182
|
+
"templates" => ["planning/agile/generate_mvp_scope.md"],
|
|
183
|
+
"description" => "Define MVP scope with must-have and nice-to-have features",
|
|
184
|
+
"outs" => [".aidp/docs/MVP_SCOPE.md"],
|
|
185
|
+
"gate" => false,
|
|
186
|
+
"interactive" => true
|
|
187
|
+
},
|
|
188
|
+
"24_USER_TEST_PLAN" => {
|
|
189
|
+
"skill" => "ux_researcher",
|
|
190
|
+
"templates" => ["planning/agile/generate_user_test_plan.md"],
|
|
191
|
+
"description" => "Generate user testing plan with recruitment and survey templates",
|
|
192
|
+
"outs" => [".aidp/docs/USER_TEST_PLAN.md"],
|
|
193
|
+
"gate" => false
|
|
194
|
+
},
|
|
195
|
+
"25_MARKETING_REPORT" => {
|
|
196
|
+
"skill" => "marketing_strategist",
|
|
197
|
+
"templates" => ["planning/agile/generate_marketing_report.md"],
|
|
198
|
+
"description" => "Generate marketing report with key messages and differentiators",
|
|
199
|
+
"outs" => [".aidp/docs/MARKETING_REPORT.md"],
|
|
200
|
+
"gate" => false
|
|
201
|
+
},
|
|
202
|
+
"26_INGEST_FEEDBACK" => {
|
|
203
|
+
"skill" => "ux_researcher",
|
|
204
|
+
"templates" => ["planning/agile/ingest_feedback.md"],
|
|
205
|
+
"description" => "Ingest user feedback data (CSV, JSON, markdown)",
|
|
206
|
+
"outs" => [".aidp/docs/feedback_data.json"],
|
|
207
|
+
"gate" => false,
|
|
208
|
+
"interactive" => true
|
|
209
|
+
},
|
|
210
|
+
"27_ANALYZE_FEEDBACK" => {
|
|
211
|
+
"skill" => "ux_researcher",
|
|
212
|
+
"templates" => ["planning/agile/analyze_feedback.md"],
|
|
213
|
+
"description" => "Analyze user feedback with AI-powered insights",
|
|
214
|
+
"outs" => [".aidp/docs/USER_FEEDBACK_ANALYSIS.md"],
|
|
215
|
+
"gate" => false
|
|
216
|
+
},
|
|
217
|
+
"28_ITERATION_PLAN" => {
|
|
218
|
+
"skill" => "product_manager",
|
|
219
|
+
"templates" => ["planning/agile/generate_iteration_plan.md"],
|
|
220
|
+
"description" => "Generate next iteration plan based on feedback",
|
|
221
|
+
"outs" => [".aidp/docs/NEXT_ITERATION_PLAN.md"],
|
|
222
|
+
"gate" => false
|
|
223
|
+
},
|
|
224
|
+
"29_LEGACY_RESEARCH_PLAN" => {
|
|
225
|
+
"skill" => "ux_researcher",
|
|
226
|
+
"templates" => ["planning/agile/generate_legacy_research_plan.md"],
|
|
227
|
+
"description" => "Generate user research plan for existing codebase",
|
|
228
|
+
"outs" => [".aidp/docs/LEGACY_USER_RESEARCH_PLAN.md"],
|
|
229
|
+
"gate" => false
|
|
137
230
|
}
|
|
138
231
|
}.freeze
|
|
139
232
|
end
|