tapps-agents 3.5.41__py3-none-any.whl → 3.6.0__py3-none-any.whl
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.
- tapps_agents/__init__.py +2 -2
- tapps_agents/agents/__init__.py +22 -22
- tapps_agents/agents/analyst/__init__.py +5 -5
- tapps_agents/agents/architect/__init__.py +5 -5
- tapps_agents/agents/architect/agent.py +1033 -1033
- tapps_agents/agents/architect/pattern_detector.py +75 -75
- tapps_agents/agents/cleanup/__init__.py +7 -7
- tapps_agents/agents/cleanup/agent.py +445 -445
- tapps_agents/agents/debugger/__init__.py +7 -7
- tapps_agents/agents/debugger/agent.py +310 -310
- tapps_agents/agents/debugger/error_analyzer.py +437 -437
- tapps_agents/agents/designer/__init__.py +5 -5
- tapps_agents/agents/designer/agent.py +786 -786
- tapps_agents/agents/designer/visual_designer.py +638 -638
- tapps_agents/agents/documenter/__init__.py +7 -7
- tapps_agents/agents/documenter/agent.py +531 -531
- tapps_agents/agents/documenter/doc_generator.py +472 -472
- tapps_agents/agents/documenter/doc_validator.py +393 -393
- tapps_agents/agents/documenter/framework_doc_updater.py +493 -493
- tapps_agents/agents/enhancer/__init__.py +7 -7
- tapps_agents/agents/evaluator/__init__.py +7 -7
- tapps_agents/agents/evaluator/agent.py +443 -443
- tapps_agents/agents/evaluator/priority_evaluator.py +641 -641
- tapps_agents/agents/evaluator/quality_analyzer.py +147 -147
- tapps_agents/agents/evaluator/report_generator.py +344 -344
- tapps_agents/agents/evaluator/usage_analyzer.py +192 -192
- tapps_agents/agents/evaluator/workflow_analyzer.py +189 -189
- tapps_agents/agents/implementer/__init__.py +7 -7
- tapps_agents/agents/implementer/agent.py +798 -798
- tapps_agents/agents/implementer/auto_fix.py +1119 -1119
- tapps_agents/agents/implementer/code_generator.py +73 -73
- tapps_agents/agents/improver/__init__.py +1 -1
- tapps_agents/agents/improver/agent.py +753 -753
- tapps_agents/agents/ops/__init__.py +1 -1
- tapps_agents/agents/ops/agent.py +619 -619
- tapps_agents/agents/ops/dependency_analyzer.py +600 -600
- tapps_agents/agents/orchestrator/__init__.py +5 -5
- tapps_agents/agents/orchestrator/agent.py +522 -522
- tapps_agents/agents/planner/__init__.py +7 -7
- tapps_agents/agents/planner/agent.py +1127 -1127
- tapps_agents/agents/reviewer/__init__.py +24 -24
- tapps_agents/agents/reviewer/agent.py +3513 -3513
- tapps_agents/agents/reviewer/aggregator.py +213 -213
- tapps_agents/agents/reviewer/batch_review.py +448 -448
- tapps_agents/agents/reviewer/cache.py +443 -443
- tapps_agents/agents/reviewer/context7_enhancer.py +630 -630
- tapps_agents/agents/reviewer/context_detector.py +203 -203
- tapps_agents/agents/reviewer/docker_compose_validator.py +158 -158
- tapps_agents/agents/reviewer/dockerfile_validator.py +176 -176
- tapps_agents/agents/reviewer/error_handling.py +126 -126
- tapps_agents/agents/reviewer/feedback_generator.py +490 -490
- tapps_agents/agents/reviewer/influxdb_validator.py +316 -316
- tapps_agents/agents/reviewer/issue_tracking.py +169 -169
- tapps_agents/agents/reviewer/library_detector.py +295 -295
- tapps_agents/agents/reviewer/library_patterns.py +268 -268
- tapps_agents/agents/reviewer/maintainability_scorer.py +593 -593
- tapps_agents/agents/reviewer/metric_strategies.py +276 -276
- tapps_agents/agents/reviewer/mqtt_validator.py +160 -160
- tapps_agents/agents/reviewer/output_enhancer.py +105 -105
- tapps_agents/agents/reviewer/pattern_detector.py +241 -241
- tapps_agents/agents/reviewer/performance_scorer.py +357 -357
- tapps_agents/agents/reviewer/phased_review.py +516 -516
- tapps_agents/agents/reviewer/progressive_review.py +435 -435
- tapps_agents/agents/reviewer/react_scorer.py +331 -331
- tapps_agents/agents/reviewer/score_constants.py +228 -228
- tapps_agents/agents/reviewer/score_validator.py +507 -507
- tapps_agents/agents/reviewer/scorer_registry.py +373 -373
- tapps_agents/agents/reviewer/scoring.py +1566 -1566
- tapps_agents/agents/reviewer/service_discovery.py +534 -534
- tapps_agents/agents/reviewer/tools/__init__.py +41 -41
- tapps_agents/agents/reviewer/tools/parallel_executor.py +581 -581
- tapps_agents/agents/reviewer/tools/ruff_grouping.py +250 -250
- tapps_agents/agents/reviewer/tools/scoped_mypy.py +284 -284
- tapps_agents/agents/reviewer/typescript_scorer.py +1142 -1142
- tapps_agents/agents/reviewer/validation.py +208 -208
- tapps_agents/agents/reviewer/websocket_validator.py +132 -132
- tapps_agents/agents/tester/__init__.py +7 -7
- tapps_agents/agents/tester/accessibility_auditor.py +309 -309
- tapps_agents/agents/tester/agent.py +1080 -1080
- tapps_agents/agents/tester/batch_generator.py +54 -54
- tapps_agents/agents/tester/context_learner.py +51 -51
- tapps_agents/agents/tester/coverage_analyzer.py +386 -386
- tapps_agents/agents/tester/coverage_test_generator.py +290 -290
- tapps_agents/agents/tester/debug_enhancer.py +238 -238
- tapps_agents/agents/tester/device_emulator.py +241 -241
- tapps_agents/agents/tester/integration_generator.py +62 -62
- tapps_agents/agents/tester/network_recorder.py +300 -300
- tapps_agents/agents/tester/performance_monitor.py +320 -320
- tapps_agents/agents/tester/test_fixer.py +316 -316
- tapps_agents/agents/tester/test_generator.py +632 -632
- tapps_agents/agents/tester/trace_manager.py +234 -234
- tapps_agents/agents/tester/visual_regression.py +291 -291
- tapps_agents/analysis/pattern_detector.py +36 -36
- tapps_agents/beads/hydration.py +213 -213
- tapps_agents/beads/parse.py +32 -32
- tapps_agents/beads/specs.py +206 -206
- tapps_agents/cli/__init__.py +9 -9
- tapps_agents/cli/__main__.py +8 -8
- tapps_agents/cli/base.py +478 -478
- tapps_agents/cli/command_classifier.py +72 -72
- tapps_agents/cli/commands/__init__.py +2 -2
- tapps_agents/cli/commands/analyst.py +173 -173
- tapps_agents/cli/commands/architect.py +109 -109
- tapps_agents/cli/commands/cleanup_agent.py +92 -92
- tapps_agents/cli/commands/common.py +126 -126
- tapps_agents/cli/commands/debugger.py +90 -90
- tapps_agents/cli/commands/designer.py +112 -112
- tapps_agents/cli/commands/documenter.py +136 -136
- tapps_agents/cli/commands/enhancer.py +110 -110
- tapps_agents/cli/commands/evaluator.py +255 -255
- tapps_agents/cli/commands/health.py +665 -665
- tapps_agents/cli/commands/implementer.py +301 -301
- tapps_agents/cli/commands/improver.py +91 -91
- tapps_agents/cli/commands/knowledge.py +111 -111
- tapps_agents/cli/commands/learning.py +172 -172
- tapps_agents/cli/commands/observability.py +283 -283
- tapps_agents/cli/commands/ops.py +135 -135
- tapps_agents/cli/commands/orchestrator.py +116 -116
- tapps_agents/cli/commands/planner.py +237 -237
- tapps_agents/cli/commands/reviewer.py +1872 -1872
- tapps_agents/cli/commands/status.py +285 -285
- tapps_agents/cli/commands/task.py +227 -227
- tapps_agents/cli/commands/tester.py +191 -191
- tapps_agents/cli/commands/top_level.py +3586 -3586
- tapps_agents/cli/feedback.py +936 -936
- tapps_agents/cli/formatters.py +608 -608
- tapps_agents/cli/help/__init__.py +7 -7
- tapps_agents/cli/help/static_help.py +425 -425
- tapps_agents/cli/network_detection.py +110 -110
- tapps_agents/cli/output_compactor.py +274 -274
- tapps_agents/cli/parsers/__init__.py +2 -2
- tapps_agents/cli/parsers/analyst.py +186 -186
- tapps_agents/cli/parsers/architect.py +167 -167
- tapps_agents/cli/parsers/cleanup_agent.py +228 -228
- tapps_agents/cli/parsers/debugger.py +116 -116
- tapps_agents/cli/parsers/designer.py +182 -182
- tapps_agents/cli/parsers/documenter.py +134 -134
- tapps_agents/cli/parsers/enhancer.py +113 -113
- tapps_agents/cli/parsers/evaluator.py +213 -213
- tapps_agents/cli/parsers/implementer.py +168 -168
- tapps_agents/cli/parsers/improver.py +132 -132
- tapps_agents/cli/parsers/ops.py +159 -159
- tapps_agents/cli/parsers/orchestrator.py +98 -98
- tapps_agents/cli/parsers/planner.py +145 -145
- tapps_agents/cli/parsers/reviewer.py +462 -462
- tapps_agents/cli/parsers/tester.py +124 -124
- tapps_agents/cli/progress_heartbeat.py +254 -254
- tapps_agents/cli/streaming_progress.py +336 -336
- tapps_agents/cli/utils/__init__.py +6 -6
- tapps_agents/cli/utils/agent_lifecycle.py +48 -48
- tapps_agents/cli/utils/error_formatter.py +82 -82
- tapps_agents/cli/utils/error_recovery.py +188 -188
- tapps_agents/cli/utils/output_handler.py +59 -59
- tapps_agents/cli/utils/prompt_enhancer.py +319 -319
- tapps_agents/cli/validators/__init__.py +9 -9
- tapps_agents/cli/validators/command_validator.py +81 -81
- tapps_agents/context7/__init__.py +112 -112
- tapps_agents/context7/agent_integration.py +869 -869
- tapps_agents/context7/analytics.py +382 -382
- tapps_agents/context7/analytics_dashboard.py +299 -299
- tapps_agents/context7/async_cache.py +681 -681
- tapps_agents/context7/backup_client.py +958 -958
- tapps_agents/context7/cache_locking.py +194 -194
- tapps_agents/context7/cache_metadata.py +214 -214
- tapps_agents/context7/cache_prewarm.py +488 -488
- tapps_agents/context7/cache_structure.py +168 -168
- tapps_agents/context7/cache_warming.py +604 -604
- tapps_agents/context7/circuit_breaker.py +376 -376
- tapps_agents/context7/cleanup.py +461 -461
- tapps_agents/context7/commands.py +858 -858
- tapps_agents/context7/credential_validation.py +276 -276
- tapps_agents/context7/cross_reference_resolver.py +168 -168
- tapps_agents/context7/cross_references.py +424 -424
- tapps_agents/context7/doc_manager.py +225 -225
- tapps_agents/context7/fuzzy_matcher.py +369 -369
- tapps_agents/context7/kb_cache.py +404 -404
- tapps_agents/context7/language_detector.py +219 -219
- tapps_agents/context7/library_detector.py +725 -725
- tapps_agents/context7/lookup.py +738 -738
- tapps_agents/context7/metadata.py +258 -258
- tapps_agents/context7/refresh_queue.py +300 -300
- tapps_agents/context7/security.py +373 -373
- tapps_agents/context7/staleness_policies.py +278 -278
- tapps_agents/context7/tiles_integration.py +47 -47
- tapps_agents/continuous_bug_fix/__init__.py +20 -20
- tapps_agents/continuous_bug_fix/bug_finder.py +306 -306
- tapps_agents/continuous_bug_fix/bug_fix_coordinator.py +177 -177
- tapps_agents/continuous_bug_fix/commit_manager.py +178 -178
- tapps_agents/continuous_bug_fix/continuous_bug_fixer.py +322 -322
- tapps_agents/continuous_bug_fix/proactive_bug_finder.py +285 -285
- tapps_agents/core/__init__.py +298 -298
- tapps_agents/core/adaptive_cache_config.py +432 -432
- tapps_agents/core/agent_base.py +647 -647
- tapps_agents/core/agent_cache.py +466 -466
- tapps_agents/core/agent_learning.py +1865 -1865
- tapps_agents/core/analytics_dashboard.py +563 -563
- tapps_agents/core/analytics_enhancements.py +597 -597
- tapps_agents/core/anonymization.py +274 -274
- tapps_agents/core/artifact_context_builder.py +293 -0
- tapps_agents/core/ast_parser.py +228 -228
- tapps_agents/core/async_file_ops.py +402 -402
- tapps_agents/core/best_practice_consultant.py +299 -299
- tapps_agents/core/brownfield_analyzer.py +299 -299
- tapps_agents/core/brownfield_review.py +541 -541
- tapps_agents/core/browser_controller.py +513 -513
- tapps_agents/core/capability_registry.py +418 -418
- tapps_agents/core/change_impact_analyzer.py +190 -190
- tapps_agents/core/checkpoint_manager.py +377 -377
- tapps_agents/core/code_generator.py +329 -329
- tapps_agents/core/code_validator.py +276 -276
- tapps_agents/core/command_registry.py +327 -327
- tapps_agents/core/config.py +33 -0
- tapps_agents/core/context_gathering/__init__.py +2 -2
- tapps_agents/core/context_gathering/repository_explorer.py +28 -28
- tapps_agents/core/context_intelligence/__init__.py +2 -2
- tapps_agents/core/context_intelligence/relevance_scorer.py +24 -24
- tapps_agents/core/context_intelligence/token_budget_manager.py +27 -27
- tapps_agents/core/context_manager.py +240 -240
- tapps_agents/core/cursor_feedback_monitor.py +146 -146
- tapps_agents/core/cursor_verification.py +290 -290
- tapps_agents/core/customization_loader.py +280 -280
- tapps_agents/core/customization_schema.py +260 -260
- tapps_agents/core/customization_template.py +238 -238
- tapps_agents/core/debug_logger.py +124 -124
- tapps_agents/core/design_validator.py +298 -298
- tapps_agents/core/diagram_generator.py +226 -226
- tapps_agents/core/docker_utils.py +232 -232
- tapps_agents/core/document_generator.py +617 -617
- tapps_agents/core/domain_detector.py +30 -30
- tapps_agents/core/error_envelope.py +454 -454
- tapps_agents/core/error_handler.py +270 -270
- tapps_agents/core/estimation_tracker.py +189 -189
- tapps_agents/core/eval_prompt_engine.py +116 -116
- tapps_agents/core/evaluation_base.py +119 -119
- tapps_agents/core/evaluation_models.py +320 -320
- tapps_agents/core/evaluation_orchestrator.py +225 -225
- tapps_agents/core/evaluators/__init__.py +7 -7
- tapps_agents/core/evaluators/architectural_evaluator.py +205 -205
- tapps_agents/core/evaluators/behavioral_evaluator.py +160 -160
- tapps_agents/core/evaluators/performance_profile_evaluator.py +160 -160
- tapps_agents/core/evaluators/security_posture_evaluator.py +148 -148
- tapps_agents/core/evaluators/spec_compliance_evaluator.py +181 -181
- tapps_agents/core/exceptions.py +107 -107
- tapps_agents/core/expert_config_generator.py +293 -293
- tapps_agents/core/export_schema.py +202 -202
- tapps_agents/core/external_feedback_models.py +102 -102
- tapps_agents/core/external_feedback_storage.py +213 -213
- tapps_agents/core/fallback_strategy.py +314 -314
- tapps_agents/core/feedback_analyzer.py +162 -162
- tapps_agents/core/feedback_collector.py +178 -178
- tapps_agents/core/git_operations.py +445 -445
- tapps_agents/core/hardware_profiler.py +151 -151
- tapps_agents/core/instructions.py +324 -324
- tapps_agents/core/io_guardrails.py +69 -69
- tapps_agents/core/issue_manifest.py +249 -249
- tapps_agents/core/issue_schema.py +139 -139
- tapps_agents/core/json_utils.py +128 -128
- tapps_agents/core/knowledge_graph.py +446 -446
- tapps_agents/core/language_detector.py +296 -296
- tapps_agents/core/learning_confidence.py +242 -242
- tapps_agents/core/learning_dashboard.py +246 -246
- tapps_agents/core/learning_decision.py +384 -384
- tapps_agents/core/learning_explainability.py +578 -578
- tapps_agents/core/learning_export.py +287 -287
- tapps_agents/core/learning_integration.py +228 -228
- tapps_agents/core/llm_behavior.py +232 -232
- tapps_agents/core/long_duration_support.py +786 -786
- tapps_agents/core/mcp_setup.py +106 -106
- tapps_agents/core/memory_integration.py +396 -396
- tapps_agents/core/meta_learning.py +666 -666
- tapps_agents/core/module_path_sanitizer.py +199 -199
- tapps_agents/core/multi_agent_orchestrator.py +382 -382
- tapps_agents/core/network_errors.py +125 -125
- tapps_agents/core/nfr_validator.py +336 -336
- tapps_agents/core/offline_mode.py +158 -158
- tapps_agents/core/output_contracts.py +300 -300
- tapps_agents/core/output_formatter.py +300 -300
- tapps_agents/core/path_normalizer.py +174 -174
- tapps_agents/core/path_validator.py +322 -322
- tapps_agents/core/pattern_library.py +250 -250
- tapps_agents/core/performance_benchmark.py +301 -301
- tapps_agents/core/performance_monitor.py +184 -184
- tapps_agents/core/playwright_mcp_controller.py +771 -771
- tapps_agents/core/policy_loader.py +135 -135
- tapps_agents/core/progress.py +166 -166
- tapps_agents/core/project_profile.py +354 -354
- tapps_agents/core/project_type_detector.py +454 -454
- tapps_agents/core/prompt_base.py +223 -223
- tapps_agents/core/prompt_learning/__init__.py +2 -2
- tapps_agents/core/prompt_learning/learning_loop.py +24 -24
- tapps_agents/core/prompt_learning/project_prompt_store.py +25 -25
- tapps_agents/core/prompt_learning/skills_prompt_analyzer.py +35 -35
- tapps_agents/core/prompt_optimization/__init__.py +6 -6
- tapps_agents/core/prompt_optimization/ab_tester.py +114 -114
- tapps_agents/core/prompt_optimization/correlation_analyzer.py +160 -160
- tapps_agents/core/prompt_optimization/progressive_refiner.py +129 -129
- tapps_agents/core/prompt_optimization/prompt_library.py +37 -37
- tapps_agents/core/requirements_evaluator.py +431 -431
- tapps_agents/core/resource_aware_executor.py +449 -449
- tapps_agents/core/resource_monitor.py +343 -343
- tapps_agents/core/resume_handler.py +298 -298
- tapps_agents/core/retry_handler.py +197 -197
- tapps_agents/core/review_checklists.py +479 -479
- tapps_agents/core/role_loader.py +201 -201
- tapps_agents/core/role_template_loader.py +201 -201
- tapps_agents/core/runtime_mode.py +60 -60
- tapps_agents/core/security_scanner.py +342 -342
- tapps_agents/core/skill_agent_registry.py +194 -194
- tapps_agents/core/skill_integration.py +208 -208
- tapps_agents/core/skill_loader.py +492 -492
- tapps_agents/core/skill_template.py +341 -341
- tapps_agents/core/skill_validator.py +478 -478
- tapps_agents/core/stack_analyzer.py +35 -35
- tapps_agents/core/startup.py +174 -174
- tapps_agents/core/storage_manager.py +397 -397
- tapps_agents/core/storage_models.py +166 -166
- tapps_agents/core/story_evaluator.py +410 -410
- tapps_agents/core/subprocess_utils.py +170 -170
- tapps_agents/core/task_duration.py +296 -296
- tapps_agents/core/task_memory.py +582 -582
- tapps_agents/core/task_state.py +226 -226
- tapps_agents/core/tech_stack_priorities.py +208 -208
- tapps_agents/core/temp_directory.py +194 -194
- tapps_agents/core/template_merger.py +600 -600
- tapps_agents/core/template_selector.py +280 -280
- tapps_agents/core/test_generator.py +286 -286
- tapps_agents/core/tiered_context.py +253 -253
- tapps_agents/core/token_monitor.py +345 -345
- tapps_agents/core/traceability.py +254 -254
- tapps_agents/core/trajectory_tracker.py +50 -50
- tapps_agents/core/unicode_safe.py +143 -143
- tapps_agents/core/unified_cache_config.py +170 -170
- tapps_agents/core/unified_state.py +324 -324
- tapps_agents/core/validate_cursor_setup.py +237 -237
- tapps_agents/core/validation_registry.py +136 -136
- tapps_agents/core/validators/__init__.py +4 -4
- tapps_agents/core/validators/python_validator.py +87 -87
- tapps_agents/core/verification_agent.py +90 -90
- tapps_agents/core/visual_feedback.py +644 -644
- tapps_agents/core/workflow_validator.py +197 -197
- tapps_agents/core/worktree.py +367 -367
- tapps_agents/docker/__init__.py +10 -10
- tapps_agents/docker/analyzer.py +186 -186
- tapps_agents/docker/debugger.py +229 -229
- tapps_agents/docker/error_patterns.py +216 -216
- tapps_agents/epic/__init__.py +22 -22
- tapps_agents/epic/beads_sync.py +115 -115
- tapps_agents/epic/markdown_sync.py +105 -105
- tapps_agents/epic/models.py +96 -96
- tapps_agents/experts/__init__.py +163 -163
- tapps_agents/experts/agent_integration.py +243 -243
- tapps_agents/experts/auto_generator.py +331 -331
- tapps_agents/experts/base_expert.py +536 -536
- tapps_agents/experts/builtin_registry.py +261 -261
- tapps_agents/experts/business_metrics.py +565 -565
- tapps_agents/experts/cache.py +266 -266
- tapps_agents/experts/confidence_breakdown.py +306 -306
- tapps_agents/experts/confidence_calculator.py +336 -336
- tapps_agents/experts/confidence_metrics.py +236 -236
- tapps_agents/experts/domain_config.py +311 -311
- tapps_agents/experts/domain_detector.py +550 -550
- tapps_agents/experts/domain_utils.py +84 -84
- tapps_agents/experts/expert_config.py +113 -113
- tapps_agents/experts/expert_engine.py +465 -465
- tapps_agents/experts/expert_registry.py +744 -744
- tapps_agents/experts/expert_synthesizer.py +70 -70
- tapps_agents/experts/governance.py +197 -197
- tapps_agents/experts/history_logger.py +312 -312
- tapps_agents/experts/knowledge/README.md +180 -180
- tapps_agents/experts/knowledge/accessibility/accessible-forms.md +331 -331
- tapps_agents/experts/knowledge/accessibility/aria-patterns.md +344 -344
- tapps_agents/experts/knowledge/accessibility/color-contrast.md +285 -285
- tapps_agents/experts/knowledge/accessibility/keyboard-navigation.md +332 -332
- tapps_agents/experts/knowledge/accessibility/screen-readers.md +282 -282
- tapps_agents/experts/knowledge/accessibility/semantic-html.md +355 -355
- tapps_agents/experts/knowledge/accessibility/testing-accessibility.md +369 -369
- tapps_agents/experts/knowledge/accessibility/wcag-2.1.md +296 -296
- tapps_agents/experts/knowledge/accessibility/wcag-2.2.md +211 -211
- tapps_agents/experts/knowledge/agent-learning/best-practices.md +715 -715
- tapps_agents/experts/knowledge/agent-learning/pattern-extraction.md +282 -282
- tapps_agents/experts/knowledge/agent-learning/prompt-optimization.md +320 -320
- tapps_agents/experts/knowledge/ai-frameworks/model-optimization.md +90 -90
- tapps_agents/experts/knowledge/ai-frameworks/openvino-patterns.md +260 -260
- tapps_agents/experts/knowledge/api-design-integration/api-gateway-patterns.md +309 -309
- tapps_agents/experts/knowledge/api-design-integration/api-security-patterns.md +521 -521
- tapps_agents/experts/knowledge/api-design-integration/api-versioning.md +421 -421
- tapps_agents/experts/knowledge/api-design-integration/async-protocol-patterns.md +61 -61
- tapps_agents/experts/knowledge/api-design-integration/contract-testing.md +221 -221
- tapps_agents/experts/knowledge/api-design-integration/external-api-integration.md +489 -489
- tapps_agents/experts/knowledge/api-design-integration/fastapi-patterns.md +360 -360
- tapps_agents/experts/knowledge/api-design-integration/fastapi-testing.md +262 -262
- tapps_agents/experts/knowledge/api-design-integration/graphql-patterns.md +582 -582
- tapps_agents/experts/knowledge/api-design-integration/grpc-best-practices.md +499 -499
- tapps_agents/experts/knowledge/api-design-integration/mqtt-patterns.md +455 -455
- tapps_agents/experts/knowledge/api-design-integration/rate-limiting.md +507 -507
- tapps_agents/experts/knowledge/api-design-integration/restful-api-design.md +618 -618
- tapps_agents/experts/knowledge/api-design-integration/websocket-patterns.md +480 -480
- tapps_agents/experts/knowledge/cloud-infrastructure/cloud-native-patterns.md +175 -175
- tapps_agents/experts/knowledge/cloud-infrastructure/container-health-checks.md +261 -261
- tapps_agents/experts/knowledge/cloud-infrastructure/containerization.md +222 -222
- tapps_agents/experts/knowledge/cloud-infrastructure/cost-optimization.md +122 -122
- tapps_agents/experts/knowledge/cloud-infrastructure/disaster-recovery.md +153 -153
- tapps_agents/experts/knowledge/cloud-infrastructure/dockerfile-patterns.md +285 -285
- tapps_agents/experts/knowledge/cloud-infrastructure/infrastructure-as-code.md +187 -187
- tapps_agents/experts/knowledge/cloud-infrastructure/kubernetes-patterns.md +253 -253
- tapps_agents/experts/knowledge/cloud-infrastructure/multi-cloud-strategies.md +155 -155
- tapps_agents/experts/knowledge/cloud-infrastructure/serverless-architecture.md +200 -200
- tapps_agents/experts/knowledge/code-quality-analysis/README.md +16 -16
- tapps_agents/experts/knowledge/code-quality-analysis/code-metrics.md +137 -137
- tapps_agents/experts/knowledge/code-quality-analysis/complexity-analysis.md +181 -181
- tapps_agents/experts/knowledge/code-quality-analysis/technical-debt-patterns.md +191 -191
- tapps_agents/experts/knowledge/data-privacy-compliance/anonymization.md +313 -313
- tapps_agents/experts/knowledge/data-privacy-compliance/ccpa.md +255 -255
- tapps_agents/experts/knowledge/data-privacy-compliance/consent-management.md +282 -282
- tapps_agents/experts/knowledge/data-privacy-compliance/data-minimization.md +275 -275
- tapps_agents/experts/knowledge/data-privacy-compliance/data-retention.md +297 -297
- tapps_agents/experts/knowledge/data-privacy-compliance/data-subject-rights.md +383 -383
- tapps_agents/experts/knowledge/data-privacy-compliance/encryption-privacy.md +285 -285
- tapps_agents/experts/knowledge/data-privacy-compliance/gdpr.md +344 -344
- tapps_agents/experts/knowledge/data-privacy-compliance/hipaa.md +385 -385
- tapps_agents/experts/knowledge/data-privacy-compliance/privacy-by-design.md +280 -280
- tapps_agents/experts/knowledge/database-data-management/acid-vs-cap.md +164 -164
- tapps_agents/experts/knowledge/database-data-management/backup-and-recovery.md +182 -182
- tapps_agents/experts/knowledge/database-data-management/data-modeling.md +172 -172
- tapps_agents/experts/knowledge/database-data-management/database-design.md +187 -187
- tapps_agents/experts/knowledge/database-data-management/flux-query-optimization.md +342 -342
- tapps_agents/experts/knowledge/database-data-management/influxdb-connection-patterns.md +432 -432
- tapps_agents/experts/knowledge/database-data-management/influxdb-patterns.md +442 -442
- tapps_agents/experts/knowledge/database-data-management/migration-strategies.md +216 -216
- tapps_agents/experts/knowledge/database-data-management/nosql-patterns.md +259 -259
- tapps_agents/experts/knowledge/database-data-management/scalability-patterns.md +184 -184
- tapps_agents/experts/knowledge/database-data-management/sql-optimization.md +175 -175
- tapps_agents/experts/knowledge/database-data-management/time-series-modeling.md +444 -444
- tapps_agents/experts/knowledge/development-workflow/README.md +16 -16
- tapps_agents/experts/knowledge/development-workflow/automation-best-practices.md +216 -216
- tapps_agents/experts/knowledge/development-workflow/build-strategies.md +198 -198
- tapps_agents/experts/knowledge/development-workflow/deployment-patterns.md +205 -205
- tapps_agents/experts/knowledge/development-workflow/git-workflows.md +205 -205
- tapps_agents/experts/knowledge/documentation-knowledge-management/README.md +16 -16
- tapps_agents/experts/knowledge/documentation-knowledge-management/api-documentation-patterns.md +231 -231
- tapps_agents/experts/knowledge/documentation-knowledge-management/documentation-standards.md +191 -191
- tapps_agents/experts/knowledge/documentation-knowledge-management/knowledge-management.md +171 -171
- tapps_agents/experts/knowledge/documentation-knowledge-management/technical-writing-guide.md +192 -192
- tapps_agents/experts/knowledge/observability-monitoring/alerting-patterns.md +461 -461
- tapps_agents/experts/knowledge/observability-monitoring/apm-tools.md +459 -459
- tapps_agents/experts/knowledge/observability-monitoring/distributed-tracing.md +367 -367
- tapps_agents/experts/knowledge/observability-monitoring/logging-strategies.md +478 -478
- tapps_agents/experts/knowledge/observability-monitoring/metrics-and-monitoring.md +510 -510
- tapps_agents/experts/knowledge/observability-monitoring/observability-best-practices.md +492 -492
- tapps_agents/experts/knowledge/observability-monitoring/open-telemetry.md +573 -573
- tapps_agents/experts/knowledge/observability-monitoring/slo-sli-sla.md +419 -419
- tapps_agents/experts/knowledge/performance/anti-patterns.md +284 -284
- tapps_agents/experts/knowledge/performance/api-performance.md +256 -256
- tapps_agents/experts/knowledge/performance/caching.md +327 -327
- tapps_agents/experts/knowledge/performance/database-performance.md +252 -252
- tapps_agents/experts/knowledge/performance/optimization-patterns.md +327 -327
- tapps_agents/experts/knowledge/performance/profiling.md +297 -297
- tapps_agents/experts/knowledge/performance/resource-management.md +293 -293
- tapps_agents/experts/knowledge/performance/scalability.md +306 -306
- tapps_agents/experts/knowledge/security/owasp-top10.md +209 -209
- tapps_agents/experts/knowledge/security/secure-coding-practices.md +207 -207
- tapps_agents/experts/knowledge/security/threat-modeling.md +220 -220
- tapps_agents/experts/knowledge/security/vulnerability-patterns.md +342 -342
- tapps_agents/experts/knowledge/software-architecture/docker-compose-patterns.md +314 -314
- tapps_agents/experts/knowledge/software-architecture/microservices-patterns.md +379 -379
- tapps_agents/experts/knowledge/software-architecture/service-communication.md +316 -316
- tapps_agents/experts/knowledge/testing/best-practices.md +310 -310
- tapps_agents/experts/knowledge/testing/coverage-analysis.md +293 -293
- tapps_agents/experts/knowledge/testing/mocking.md +256 -256
- tapps_agents/experts/knowledge/testing/test-automation.md +276 -276
- tapps_agents/experts/knowledge/testing/test-data.md +271 -271
- tapps_agents/experts/knowledge/testing/test-design-patterns.md +280 -280
- tapps_agents/experts/knowledge/testing/test-maintenance.md +236 -236
- tapps_agents/experts/knowledge/testing/test-strategies.md +311 -311
- tapps_agents/experts/knowledge/user-experience/information-architecture.md +325 -325
- tapps_agents/experts/knowledge/user-experience/interaction-design.md +363 -363
- tapps_agents/experts/knowledge/user-experience/prototyping.md +293 -293
- tapps_agents/experts/knowledge/user-experience/usability-heuristics.md +337 -337
- tapps_agents/experts/knowledge/user-experience/usability-testing.md +311 -311
- tapps_agents/experts/knowledge/user-experience/user-journeys.md +296 -296
- tapps_agents/experts/knowledge/user-experience/user-research.md +373 -373
- tapps_agents/experts/knowledge/user-experience/ux-principles.md +340 -340
- tapps_agents/experts/knowledge_freshness.py +321 -321
- tapps_agents/experts/knowledge_ingestion.py +438 -438
- tapps_agents/experts/knowledge_need_detector.py +93 -93
- tapps_agents/experts/knowledge_validator.py +382 -382
- tapps_agents/experts/observability.py +440 -440
- tapps_agents/experts/passive_notifier.py +238 -238
- tapps_agents/experts/proactive_orchestrator.py +32 -32
- tapps_agents/experts/rag_chunker.py +205 -205
- tapps_agents/experts/rag_embedder.py +152 -152
- tapps_agents/experts/rag_evaluation.py +299 -299
- tapps_agents/experts/rag_index.py +303 -303
- tapps_agents/experts/rag_metrics.py +293 -293
- tapps_agents/experts/rag_safety.py +263 -263
- tapps_agents/experts/report_generator.py +296 -296
- tapps_agents/experts/setup_wizard.py +441 -441
- tapps_agents/experts/simple_rag.py +431 -431
- tapps_agents/experts/vector_rag.py +354 -354
- tapps_agents/experts/weight_distributor.py +304 -304
- tapps_agents/health/__init__.py +24 -24
- tapps_agents/health/base.py +75 -75
- tapps_agents/health/checks/__init__.py +22 -22
- tapps_agents/health/checks/automation.py +127 -127
- tapps_agents/health/checks/context7_cache.py +210 -210
- tapps_agents/health/checks/environment.py +116 -116
- tapps_agents/health/checks/execution.py +170 -170
- tapps_agents/health/checks/knowledge_base.py +187 -187
- tapps_agents/health/checks/outcomes.py +324 -324
- tapps_agents/health/collector.py +280 -280
- tapps_agents/health/dashboard.py +137 -137
- tapps_agents/health/metrics.py +151 -151
- tapps_agents/health/orchestrator.py +271 -271
- tapps_agents/health/registry.py +166 -166
- tapps_agents/hooks/__init__.py +33 -33
- tapps_agents/hooks/config.py +140 -140
- tapps_agents/hooks/events.py +135 -135
- tapps_agents/hooks/executor.py +128 -128
- tapps_agents/hooks/manager.py +143 -143
- tapps_agents/integration/__init__.py +8 -8
- tapps_agents/integration/service_integrator.py +121 -121
- tapps_agents/integrations/__init__.py +10 -10
- tapps_agents/integrations/clawdbot.py +525 -525
- tapps_agents/integrations/memory_bridge.py +356 -356
- tapps_agents/mcp/__init__.py +18 -18
- tapps_agents/mcp/gateway.py +112 -112
- tapps_agents/mcp/servers/__init__.py +13 -13
- tapps_agents/mcp/servers/analysis.py +204 -204
- tapps_agents/mcp/servers/context7.py +198 -198
- tapps_agents/mcp/servers/filesystem.py +218 -218
- tapps_agents/mcp/servers/git.py +201 -201
- tapps_agents/mcp/tool_registry.py +115 -115
- tapps_agents/quality/__init__.py +54 -54
- tapps_agents/quality/coverage_analyzer.py +379 -379
- tapps_agents/quality/enforcement.py +82 -82
- tapps_agents/quality/gates/__init__.py +37 -37
- tapps_agents/quality/gates/approval_gate.py +255 -255
- tapps_agents/quality/gates/base.py +84 -84
- tapps_agents/quality/gates/exceptions.py +43 -43
- tapps_agents/quality/gates/policy_gate.py +195 -195
- tapps_agents/quality/gates/registry.py +239 -239
- tapps_agents/quality/gates/security_gate.py +156 -156
- tapps_agents/quality/quality_gates.py +369 -369
- tapps_agents/quality/secret_scanner.py +335 -335
- tapps_agents/session/__init__.py +19 -19
- tapps_agents/session/manager.py +256 -256
- tapps_agents/simple_mode/__init__.py +66 -66
- tapps_agents/simple_mode/agent_contracts.py +357 -357
- tapps_agents/simple_mode/beads_hooks.py +151 -151
- tapps_agents/simple_mode/code_snippet_handler.py +382 -382
- tapps_agents/simple_mode/documentation_manager.py +395 -395
- tapps_agents/simple_mode/documentation_reader.py +187 -187
- tapps_agents/simple_mode/file_inference.py +292 -292
- tapps_agents/simple_mode/framework_change_detector.py +268 -268
- tapps_agents/simple_mode/intent_parser.py +510 -510
- tapps_agents/simple_mode/learning_progression.py +358 -358
- tapps_agents/simple_mode/nl_handler.py +700 -700
- tapps_agents/simple_mode/onboarding.py +253 -253
- tapps_agents/simple_mode/orchestrators/__init__.py +38 -38
- tapps_agents/simple_mode/orchestrators/base.py +185 -185
- tapps_agents/simple_mode/orchestrators/breakdown_orchestrator.py +49 -49
- tapps_agents/simple_mode/orchestrators/brownfield_orchestrator.py +135 -135
- tapps_agents/simple_mode/orchestrators/build_orchestrator.py +2700 -2667
- tapps_agents/simple_mode/orchestrators/deliverable_checklist.py +349 -349
- tapps_agents/simple_mode/orchestrators/enhance_orchestrator.py +53 -53
- tapps_agents/simple_mode/orchestrators/epic_orchestrator.py +122 -122
- tapps_agents/simple_mode/orchestrators/explore_orchestrator.py +184 -184
- tapps_agents/simple_mode/orchestrators/fix_orchestrator.py +723 -723
- tapps_agents/simple_mode/orchestrators/plan_analysis_orchestrator.py +206 -206
- tapps_agents/simple_mode/orchestrators/pr_orchestrator.py +237 -237
- tapps_agents/simple_mode/orchestrators/refactor_orchestrator.py +222 -222
- tapps_agents/simple_mode/orchestrators/requirements_tracer.py +262 -262
- tapps_agents/simple_mode/orchestrators/resume_orchestrator.py +210 -210
- tapps_agents/simple_mode/orchestrators/review_orchestrator.py +161 -161
- tapps_agents/simple_mode/orchestrators/test_orchestrator.py +82 -82
- tapps_agents/simple_mode/output_aggregator.py +340 -340
- tapps_agents/simple_mode/result_formatters.py +598 -598
- tapps_agents/simple_mode/step_dependencies.py +382 -382
- tapps_agents/simple_mode/step_results.py +276 -276
- tapps_agents/simple_mode/streaming.py +388 -388
- tapps_agents/simple_mode/variations.py +129 -129
- tapps_agents/simple_mode/visual_feedback.py +238 -238
- tapps_agents/simple_mode/zero_config.py +274 -274
- tapps_agents/suggestions/__init__.py +8 -8
- tapps_agents/suggestions/inline_suggester.py +52 -52
- tapps_agents/templates/__init__.py +8 -8
- tapps_agents/templates/microservice_generator.py +274 -274
- tapps_agents/utils/env_validator.py +291 -291
- tapps_agents/workflow/__init__.py +171 -171
- tapps_agents/workflow/acceptance_verifier.py +132 -132
- tapps_agents/workflow/agent_handlers/__init__.py +41 -41
- tapps_agents/workflow/agent_handlers/analyst_handler.py +75 -75
- tapps_agents/workflow/agent_handlers/architect_handler.py +107 -107
- tapps_agents/workflow/agent_handlers/base.py +84 -84
- tapps_agents/workflow/agent_handlers/debugger_handler.py +100 -100
- tapps_agents/workflow/agent_handlers/designer_handler.py +110 -110
- tapps_agents/workflow/agent_handlers/documenter_handler.py +94 -94
- tapps_agents/workflow/agent_handlers/implementer_handler.py +235 -235
- tapps_agents/workflow/agent_handlers/ops_handler.py +62 -62
- tapps_agents/workflow/agent_handlers/orchestrator_handler.py +43 -43
- tapps_agents/workflow/agent_handlers/planner_handler.py +98 -98
- tapps_agents/workflow/agent_handlers/registry.py +119 -119
- tapps_agents/workflow/agent_handlers/reviewer_handler.py +119 -119
- tapps_agents/workflow/agent_handlers/tester_handler.py +69 -69
- tapps_agents/workflow/analytics_accessor.py +337 -337
- tapps_agents/workflow/analytics_alerts.py +416 -416
- tapps_agents/workflow/analytics_dashboard_cursor.py +281 -281
- tapps_agents/workflow/analytics_dual_write.py +103 -103
- tapps_agents/workflow/analytics_integration.py +119 -119
- tapps_agents/workflow/analytics_query_parser.py +278 -278
- tapps_agents/workflow/analytics_visualizer.py +259 -259
- tapps_agents/workflow/artifact_helper.py +204 -204
- tapps_agents/workflow/audit_logger.py +263 -263
- tapps_agents/workflow/auto_execution_config.py +340 -340
- tapps_agents/workflow/auto_progression.py +586 -586
- tapps_agents/workflow/branch_cleanup.py +349 -349
- tapps_agents/workflow/checkpoint.py +256 -256
- tapps_agents/workflow/checkpoint_manager.py +178 -178
- tapps_agents/workflow/code_artifact.py +179 -179
- tapps_agents/workflow/common_enums.py +96 -96
- tapps_agents/workflow/confirmation_handler.py +130 -130
- tapps_agents/workflow/context_analyzer.py +222 -222
- tapps_agents/workflow/context_artifact.py +230 -230
- tapps_agents/workflow/cursor_chat.py +94 -94
- tapps_agents/workflow/cursor_executor.py +2337 -2337
- tapps_agents/workflow/cursor_skill_helper.py +516 -516
- tapps_agents/workflow/dependency_resolver.py +244 -244
- tapps_agents/workflow/design_artifact.py +156 -156
- tapps_agents/workflow/detector.py +751 -751
- tapps_agents/workflow/direct_execution_fallback.py +301 -301
- tapps_agents/workflow/docs_artifact.py +168 -168
- tapps_agents/workflow/enforcer.py +389 -389
- tapps_agents/workflow/enhancement_artifact.py +142 -142
- tapps_agents/workflow/error_recovery.py +806 -806
- tapps_agents/workflow/event_bus.py +183 -183
- tapps_agents/workflow/event_log.py +612 -612
- tapps_agents/workflow/events.py +63 -63
- tapps_agents/workflow/exceptions.py +43 -43
- tapps_agents/workflow/execution_graph.py +498 -498
- tapps_agents/workflow/execution_plan.py +126 -126
- tapps_agents/workflow/file_utils.py +186 -186
- tapps_agents/workflow/gate_evaluator.py +182 -182
- tapps_agents/workflow/gate_integration.py +200 -200
- tapps_agents/workflow/graph_visualizer.py +130 -130
- tapps_agents/workflow/health_checker.py +206 -206
- tapps_agents/workflow/logging_helper.py +243 -243
- tapps_agents/workflow/manifest.py +582 -582
- tapps_agents/workflow/marker_writer.py +250 -250
- tapps_agents/workflow/message_formatter.py +188 -188
- tapps_agents/workflow/messaging.py +325 -325
- tapps_agents/workflow/metadata_models.py +91 -91
- tapps_agents/workflow/metrics_integration.py +226 -226
- tapps_agents/workflow/migration_utils.py +116 -116
- tapps_agents/workflow/models.py +148 -148
- tapps_agents/workflow/nlp_config.py +198 -198
- tapps_agents/workflow/nlp_error_handler.py +207 -207
- tapps_agents/workflow/nlp_executor.py +163 -163
- tapps_agents/workflow/nlp_parser.py +528 -528
- tapps_agents/workflow/observability_dashboard.py +451 -451
- tapps_agents/workflow/observer.py +170 -170
- tapps_agents/workflow/ops_artifact.py +257 -257
- tapps_agents/workflow/output_passing.py +214 -214
- tapps_agents/workflow/parallel_executor.py +463 -463
- tapps_agents/workflow/planning_artifact.py +179 -179
- tapps_agents/workflow/preset_loader.py +285 -285
- tapps_agents/workflow/preset_recommender.py +270 -270
- tapps_agents/workflow/progress_logger.py +145 -145
- tapps_agents/workflow/progress_manager.py +303 -303
- tapps_agents/workflow/progress_monitor.py +186 -186
- tapps_agents/workflow/progress_updates.py +423 -423
- tapps_agents/workflow/quality_artifact.py +158 -158
- tapps_agents/workflow/quality_loopback.py +101 -101
- tapps_agents/workflow/recommender.py +387 -387
- tapps_agents/workflow/remediation_loop.py +166 -166
- tapps_agents/workflow/result_aggregator.py +300 -300
- tapps_agents/workflow/review_artifact.py +185 -185
- tapps_agents/workflow/schema_validator.py +522 -522
- tapps_agents/workflow/session_handoff.py +178 -178
- tapps_agents/workflow/skill_invoker.py +648 -648
- tapps_agents/workflow/state_manager.py +756 -756
- tapps_agents/workflow/state_persistence_config.py +331 -331
- tapps_agents/workflow/status_monitor.py +449 -449
- tapps_agents/workflow/step_checkpoint.py +314 -314
- tapps_agents/workflow/step_details.py +201 -201
- tapps_agents/workflow/story_models.py +147 -147
- tapps_agents/workflow/streaming.py +416 -416
- tapps_agents/workflow/suggestion_engine.py +552 -552
- tapps_agents/workflow/testing_artifact.py +186 -186
- tapps_agents/workflow/timeline.py +158 -158
- tapps_agents/workflow/token_integration.py +209 -209
- tapps_agents/workflow/validation.py +217 -217
- tapps_agents/workflow/visual_feedback.py +391 -391
- tapps_agents/workflow/workflow_chain.py +95 -95
- tapps_agents/workflow/workflow_summary.py +219 -219
- tapps_agents/workflow/worktree_manager.py +724 -724
- {tapps_agents-3.5.41.dist-info → tapps_agents-3.6.0.dist-info}/METADATA +672 -672
- tapps_agents-3.6.0.dist-info/RECORD +758 -0
- {tapps_agents-3.5.41.dist-info → tapps_agents-3.6.0.dist-info}/licenses/LICENSE +22 -22
- tapps_agents/health/checks/outcomes.backup_20260204_064058.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064256.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064600.py +0 -324
- tapps_agents-3.5.41.dist-info/RECORD +0 -760
- {tapps_agents-3.5.41.dist-info → tapps_agents-3.6.0.dist-info}/WHEEL +0 -0
- {tapps_agents-3.5.41.dist-info → tapps_agents-3.6.0.dist-info}/entry_points.txt +0 -0
- {tapps_agents-3.5.41.dist-info → tapps_agents-3.6.0.dist-info}/top_level.txt +0 -0
|
@@ -1,235 +1,235 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Implementer Agent Handler
|
|
3
|
-
|
|
4
|
-
Handles execution of implementer agent steps for both greenfield and brownfield projects.
|
|
5
|
-
|
|
6
|
-
Epic 20: Complexity Reduction - Story 20.1
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
import shutil
|
|
10
|
-
from pathlib import Path
|
|
11
|
-
from typing import Any
|
|
12
|
-
|
|
13
|
-
from ..models import WorkflowStep, WorkflowType
|
|
14
|
-
from .base import AgentExecutionHandler
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class ImplementerHandler(AgentExecutionHandler):
|
|
18
|
-
"""Handler for implementer agent execution."""
|
|
19
|
-
|
|
20
|
-
def supports(self, agent_name: str, action: str) -> bool:
|
|
21
|
-
"""Check if this handler supports implementer agent."""
|
|
22
|
-
return (
|
|
23
|
-
agent_name == "implementer"
|
|
24
|
-
and action in {"write_code", "fix", "implement"}
|
|
25
|
-
)
|
|
26
|
-
|
|
27
|
-
async def execute(
|
|
28
|
-
self,
|
|
29
|
-
step: WorkflowStep,
|
|
30
|
-
action: str,
|
|
31
|
-
target_path: Path | None,
|
|
32
|
-
) -> list[dict[str, Any]]:
|
|
33
|
-
"""
|
|
34
|
-
Execute implementer step.
|
|
35
|
-
|
|
36
|
-
Args:
|
|
37
|
-
step: Workflow step definition
|
|
38
|
-
action: Normalized action name
|
|
39
|
-
target_path: Target file path
|
|
40
|
-
|
|
41
|
-
Returns:
|
|
42
|
-
List of created artifacts
|
|
43
|
-
"""
|
|
44
|
-
# Check if this is a greenfield project
|
|
45
|
-
workflow_type = getattr(self.workflow, "type", None) if self.workflow else None
|
|
46
|
-
is_greenfield = (
|
|
47
|
-
workflow_type == WorkflowType.GREENFIELD
|
|
48
|
-
or (isinstance(workflow_type, str) and workflow_type.lower() == "greenfield")
|
|
49
|
-
or (hasattr(workflow_type, "value") and workflow_type.value == "greenfield")
|
|
50
|
-
)
|
|
51
|
-
user_prompt = self.state.variables.get("user_prompt", "")
|
|
52
|
-
|
|
53
|
-
created_artifacts: list[dict[str, Any]] = []
|
|
54
|
-
|
|
55
|
-
# Determine project type:
|
|
56
|
-
# - Greenfield: explicitly marked as greenfield AND no target_path provided
|
|
57
|
-
# - Brownfield: target_path provided (even if file doesn't exist yet - we're enhancing existing service)
|
|
58
|
-
if is_greenfield and not target_path:
|
|
59
|
-
# Greenfield project: create new code from scratch
|
|
60
|
-
created_artifacts = await self._handle_greenfield(step, user_prompt)
|
|
61
|
-
elif target_path:
|
|
62
|
-
# Brownfield project: enhance/refactor existing code
|
|
63
|
-
# File may not exist yet if we're adding new functionality to an existing service
|
|
64
|
-
created_artifacts = await self._handle_brownfield(step, target_path, user_prompt)
|
|
65
|
-
else:
|
|
66
|
-
raise ValueError(
|
|
67
|
-
"Implementer step requires either a target file for brownfield projects "
|
|
68
|
-
"or a greenfield workflow type for new projects."
|
|
69
|
-
)
|
|
70
|
-
|
|
71
|
-
return created_artifacts
|
|
72
|
-
|
|
73
|
-
async def _handle_greenfield(
|
|
74
|
-
self,
|
|
75
|
-
step: WorkflowStep,
|
|
76
|
-
user_prompt: str,
|
|
77
|
-
) -> list[dict[str, Any]]:
|
|
78
|
-
"""Handle greenfield project implementation."""
|
|
79
|
-
requirements_path = self.project_root / "requirements.md"
|
|
80
|
-
architecture_path = self.project_root / "architecture.md"
|
|
81
|
-
|
|
82
|
-
# Build implementation specification
|
|
83
|
-
spec_parts = []
|
|
84
|
-
if user_prompt:
|
|
85
|
-
spec_parts.append(user_prompt)
|
|
86
|
-
if requirements_path.exists():
|
|
87
|
-
req_content = requirements_path.read_text(encoding='utf-8')
|
|
88
|
-
spec_parts.append(f"\n\nRequirements:\n{req_content[:3000]}")
|
|
89
|
-
if architecture_path.exists():
|
|
90
|
-
arch_content = architecture_path.read_text(encoding='utf-8')
|
|
91
|
-
spec_parts.append(f"\n\nArchitecture:\n{arch_content[:3000]}")
|
|
92
|
-
|
|
93
|
-
specification = "\n".join(spec_parts) or "Create the application based on requirements and architecture"
|
|
94
|
-
|
|
95
|
-
# Build context from stories if available
|
|
96
|
-
stories_dir = self.project_root / "stories"
|
|
97
|
-
context_parts = []
|
|
98
|
-
if stories_dir.exists():
|
|
99
|
-
story_files = list(stories_dir.glob("*.md"))
|
|
100
|
-
if story_files:
|
|
101
|
-
context_parts.append("User Stories:")
|
|
102
|
-
for story_file in story_files[:5]: # Limit to first 5 stories
|
|
103
|
-
context_parts.append(story_file.read_text(encoding='utf-8')[:500])
|
|
104
|
-
context = "\n\n".join(context_parts) if context_parts else None
|
|
105
|
-
|
|
106
|
-
# Determine output directory and main file from step.creates
|
|
107
|
-
output_dir = self.project_root / "src"
|
|
108
|
-
if step.creates:
|
|
109
|
-
for create_item in step.creates:
|
|
110
|
-
if create_item.endswith("/") or create_item.endswith("\\"):
|
|
111
|
-
output_dir = self.project_root / create_item.rstrip("/\\")
|
|
112
|
-
break
|
|
113
|
-
|
|
114
|
-
output_dir.mkdir(parents=True, exist_ok=True)
|
|
115
|
-
main_file = output_dir / "app.py"
|
|
116
|
-
|
|
117
|
-
# Use implement command for greenfield projects
|
|
118
|
-
implement_result = await self.run_agent(
|
|
119
|
-
"implementer",
|
|
120
|
-
"implement",
|
|
121
|
-
specification=specification,
|
|
122
|
-
file_path=str(main_file),
|
|
123
|
-
context=context,
|
|
124
|
-
)
|
|
125
|
-
self.state.variables["implementer_result"] = implement_result
|
|
126
|
-
self.state.variables["target_file"] = str(main_file)
|
|
127
|
-
|
|
128
|
-
return [{"name": "src/", "path": str(output_dir)}]
|
|
129
|
-
|
|
130
|
-
async def _handle_brownfield(
|
|
131
|
-
self,
|
|
132
|
-
step: WorkflowStep,
|
|
133
|
-
target_path: Path,
|
|
134
|
-
user_prompt: str = "",
|
|
135
|
-
) -> list[dict[str, Any]]:
|
|
136
|
-
"""
|
|
137
|
-
Handle brownfield project refactoring/enhancement.
|
|
138
|
-
|
|
139
|
-
Supports both existing files (refactor) and new files in existing services (implement).
|
|
140
|
-
"""
|
|
141
|
-
file_exists = target_path.exists()
|
|
142
|
-
|
|
143
|
-
# Build instruction based on whether file exists
|
|
144
|
-
if file_exists:
|
|
145
|
-
# Existing file: refactor/enhance
|
|
146
|
-
debug_report_path = self.project_root / "debug-report.md"
|
|
147
|
-
debug_context = (
|
|
148
|
-
debug_report_path.read_text(encoding="utf-8")
|
|
149
|
-
if debug_report_path.exists()
|
|
150
|
-
else ""
|
|
151
|
-
)
|
|
152
|
-
instruction = (
|
|
153
|
-
f"Enhance {target_path.name} according to the requirements. "
|
|
154
|
-
f"{user_prompt}\n\n"
|
|
155
|
-
"Maintain backward compatibility with existing functionality. "
|
|
156
|
-
"Add robust input validation and handle edge cases safely.\n\n"
|
|
157
|
-
"Context:\n"
|
|
158
|
-
f"{debug_context[:4000]}"
|
|
159
|
-
)
|
|
160
|
-
|
|
161
|
-
# Read existing file content for context
|
|
162
|
-
existing_content = target_path.read_text(encoding="utf-8")
|
|
163
|
-
instruction += f"\n\nExisting code:\n{existing_content[:5000]}"
|
|
164
|
-
|
|
165
|
-
action = "refactor"
|
|
166
|
-
agent_params = {
|
|
167
|
-
"file": str(target_path),
|
|
168
|
-
"instruction": instruction,
|
|
169
|
-
}
|
|
170
|
-
else:
|
|
171
|
-
# New file in existing service: implement with context
|
|
172
|
-
# Ensure parent directory exists
|
|
173
|
-
target_path.parent.mkdir(parents=True, exist_ok=True)
|
|
174
|
-
|
|
175
|
-
# Build specification from user prompt and workflow context
|
|
176
|
-
spec_parts = []
|
|
177
|
-
if user_prompt:
|
|
178
|
-
spec_parts.append(user_prompt)
|
|
179
|
-
|
|
180
|
-
# Add context from workflow state if available
|
|
181
|
-
enhanced_prompt = self.state.variables.get("enhanced_prompt", "")
|
|
182
|
-
if enhanced_prompt:
|
|
183
|
-
spec_parts.append(f"\n\nEnhanced Requirements:\n{enhanced_prompt[:3000]}")
|
|
184
|
-
|
|
185
|
-
architecture = self.state.variables.get("architecture", "")
|
|
186
|
-
if architecture:
|
|
187
|
-
spec_parts.append(f"\n\nArchitecture:\n{architecture[:3000]}")
|
|
188
|
-
|
|
189
|
-
specification = "\n".join(spec_parts) or f"Implement {target_path.name} according to requirements"
|
|
190
|
-
|
|
191
|
-
action = "implement"
|
|
192
|
-
agent_params = {
|
|
193
|
-
"specification": specification,
|
|
194
|
-
"file_path": str(target_path),
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
# Execute appropriate agent action
|
|
198
|
-
result = await self.run_agent(
|
|
199
|
-
"implementer",
|
|
200
|
-
action,
|
|
201
|
-
**agent_params,
|
|
202
|
-
)
|
|
203
|
-
self.state.variables["implementer_result"] = result
|
|
204
|
-
self.state.variables["target_file"] = str(target_path)
|
|
205
|
-
|
|
206
|
-
created_artifacts: list[dict[str, Any]] = []
|
|
207
|
-
|
|
208
|
-
# Add the target file as an artifact (for both new and existing files)
|
|
209
|
-
# This ensures workflow steps can track what was created/modified
|
|
210
|
-
if target_path.exists():
|
|
211
|
-
created_artifacts.append(
|
|
212
|
-
{"name": str(target_path.relative_to(self.project_root)), "path": str(target_path)}
|
|
213
|
-
)
|
|
214
|
-
|
|
215
|
-
# Also add "src/" artifact for workflow compatibility
|
|
216
|
-
# Many workflow presets expect "src/" as a generic source code artifact
|
|
217
|
-
# We use the parent directory of the target file as "src/"
|
|
218
|
-
src_dir = target_path.parent
|
|
219
|
-
created_artifacts.append(
|
|
220
|
-
{"name": "src/", "path": str(src_dir)}
|
|
221
|
-
)
|
|
222
|
-
|
|
223
|
-
# Create fixed-code/ artifact if requested by preset (only for existing files)
|
|
224
|
-
if file_exists and "fixed-code/" in (step.creates or []):
|
|
225
|
-
fixed_dir = self.project_root / "fixed-code"
|
|
226
|
-
fixed_dir.mkdir(parents=True, exist_ok=True)
|
|
227
|
-
fixed_copy = fixed_dir / target_path.name
|
|
228
|
-
shutil.copy2(target_path, fixed_copy)
|
|
229
|
-
self.state.variables["fixed_file"] = str(fixed_copy)
|
|
230
|
-
created_artifacts.append(
|
|
231
|
-
{"name": "fixed-code/", "path": str(fixed_dir)}
|
|
232
|
-
)
|
|
233
|
-
|
|
234
|
-
return created_artifacts
|
|
235
|
-
|
|
1
|
+
"""
|
|
2
|
+
Implementer Agent Handler
|
|
3
|
+
|
|
4
|
+
Handles execution of implementer agent steps for both greenfield and brownfield projects.
|
|
5
|
+
|
|
6
|
+
Epic 20: Complexity Reduction - Story 20.1
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import shutil
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
from ..models import WorkflowStep, WorkflowType
|
|
14
|
+
from .base import AgentExecutionHandler
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ImplementerHandler(AgentExecutionHandler):
|
|
18
|
+
"""Handler for implementer agent execution."""
|
|
19
|
+
|
|
20
|
+
def supports(self, agent_name: str, action: str) -> bool:
|
|
21
|
+
"""Check if this handler supports implementer agent."""
|
|
22
|
+
return (
|
|
23
|
+
agent_name == "implementer"
|
|
24
|
+
and action in {"write_code", "fix", "implement"}
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
async def execute(
|
|
28
|
+
self,
|
|
29
|
+
step: WorkflowStep,
|
|
30
|
+
action: str,
|
|
31
|
+
target_path: Path | None,
|
|
32
|
+
) -> list[dict[str, Any]]:
|
|
33
|
+
"""
|
|
34
|
+
Execute implementer step.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
step: Workflow step definition
|
|
38
|
+
action: Normalized action name
|
|
39
|
+
target_path: Target file path
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
List of created artifacts
|
|
43
|
+
"""
|
|
44
|
+
# Check if this is a greenfield project
|
|
45
|
+
workflow_type = getattr(self.workflow, "type", None) if self.workflow else None
|
|
46
|
+
is_greenfield = (
|
|
47
|
+
workflow_type == WorkflowType.GREENFIELD
|
|
48
|
+
or (isinstance(workflow_type, str) and workflow_type.lower() == "greenfield")
|
|
49
|
+
or (hasattr(workflow_type, "value") and workflow_type.value == "greenfield")
|
|
50
|
+
)
|
|
51
|
+
user_prompt = self.state.variables.get("user_prompt", "")
|
|
52
|
+
|
|
53
|
+
created_artifacts: list[dict[str, Any]] = []
|
|
54
|
+
|
|
55
|
+
# Determine project type:
|
|
56
|
+
# - Greenfield: explicitly marked as greenfield AND no target_path provided
|
|
57
|
+
# - Brownfield: target_path provided (even if file doesn't exist yet - we're enhancing existing service)
|
|
58
|
+
if is_greenfield and not target_path:
|
|
59
|
+
# Greenfield project: create new code from scratch
|
|
60
|
+
created_artifacts = await self._handle_greenfield(step, user_prompt)
|
|
61
|
+
elif target_path:
|
|
62
|
+
# Brownfield project: enhance/refactor existing code
|
|
63
|
+
# File may not exist yet if we're adding new functionality to an existing service
|
|
64
|
+
created_artifacts = await self._handle_brownfield(step, target_path, user_prompt)
|
|
65
|
+
else:
|
|
66
|
+
raise ValueError(
|
|
67
|
+
"Implementer step requires either a target file for brownfield projects "
|
|
68
|
+
"or a greenfield workflow type for new projects."
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
return created_artifacts
|
|
72
|
+
|
|
73
|
+
async def _handle_greenfield(
|
|
74
|
+
self,
|
|
75
|
+
step: WorkflowStep,
|
|
76
|
+
user_prompt: str,
|
|
77
|
+
) -> list[dict[str, Any]]:
|
|
78
|
+
"""Handle greenfield project implementation."""
|
|
79
|
+
requirements_path = self.project_root / "requirements.md"
|
|
80
|
+
architecture_path = self.project_root / "architecture.md"
|
|
81
|
+
|
|
82
|
+
# Build implementation specification
|
|
83
|
+
spec_parts = []
|
|
84
|
+
if user_prompt:
|
|
85
|
+
spec_parts.append(user_prompt)
|
|
86
|
+
if requirements_path.exists():
|
|
87
|
+
req_content = requirements_path.read_text(encoding='utf-8')
|
|
88
|
+
spec_parts.append(f"\n\nRequirements:\n{req_content[:3000]}")
|
|
89
|
+
if architecture_path.exists():
|
|
90
|
+
arch_content = architecture_path.read_text(encoding='utf-8')
|
|
91
|
+
spec_parts.append(f"\n\nArchitecture:\n{arch_content[:3000]}")
|
|
92
|
+
|
|
93
|
+
specification = "\n".join(spec_parts) or "Create the application based on requirements and architecture"
|
|
94
|
+
|
|
95
|
+
# Build context from stories if available
|
|
96
|
+
stories_dir = self.project_root / "stories"
|
|
97
|
+
context_parts = []
|
|
98
|
+
if stories_dir.exists():
|
|
99
|
+
story_files = list(stories_dir.glob("*.md"))
|
|
100
|
+
if story_files:
|
|
101
|
+
context_parts.append("User Stories:")
|
|
102
|
+
for story_file in story_files[:5]: # Limit to first 5 stories
|
|
103
|
+
context_parts.append(story_file.read_text(encoding='utf-8')[:500])
|
|
104
|
+
context = "\n\n".join(context_parts) if context_parts else None
|
|
105
|
+
|
|
106
|
+
# Determine output directory and main file from step.creates
|
|
107
|
+
output_dir = self.project_root / "src"
|
|
108
|
+
if step.creates:
|
|
109
|
+
for create_item in step.creates:
|
|
110
|
+
if create_item.endswith("/") or create_item.endswith("\\"):
|
|
111
|
+
output_dir = self.project_root / create_item.rstrip("/\\")
|
|
112
|
+
break
|
|
113
|
+
|
|
114
|
+
output_dir.mkdir(parents=True, exist_ok=True)
|
|
115
|
+
main_file = output_dir / "app.py"
|
|
116
|
+
|
|
117
|
+
# Use implement command for greenfield projects
|
|
118
|
+
implement_result = await self.run_agent(
|
|
119
|
+
"implementer",
|
|
120
|
+
"implement",
|
|
121
|
+
specification=specification,
|
|
122
|
+
file_path=str(main_file),
|
|
123
|
+
context=context,
|
|
124
|
+
)
|
|
125
|
+
self.state.variables["implementer_result"] = implement_result
|
|
126
|
+
self.state.variables["target_file"] = str(main_file)
|
|
127
|
+
|
|
128
|
+
return [{"name": "src/", "path": str(output_dir)}]
|
|
129
|
+
|
|
130
|
+
async def _handle_brownfield(
|
|
131
|
+
self,
|
|
132
|
+
step: WorkflowStep,
|
|
133
|
+
target_path: Path,
|
|
134
|
+
user_prompt: str = "",
|
|
135
|
+
) -> list[dict[str, Any]]:
|
|
136
|
+
"""
|
|
137
|
+
Handle brownfield project refactoring/enhancement.
|
|
138
|
+
|
|
139
|
+
Supports both existing files (refactor) and new files in existing services (implement).
|
|
140
|
+
"""
|
|
141
|
+
file_exists = target_path.exists()
|
|
142
|
+
|
|
143
|
+
# Build instruction based on whether file exists
|
|
144
|
+
if file_exists:
|
|
145
|
+
# Existing file: refactor/enhance
|
|
146
|
+
debug_report_path = self.project_root / "debug-report.md"
|
|
147
|
+
debug_context = (
|
|
148
|
+
debug_report_path.read_text(encoding="utf-8")
|
|
149
|
+
if debug_report_path.exists()
|
|
150
|
+
else ""
|
|
151
|
+
)
|
|
152
|
+
instruction = (
|
|
153
|
+
f"Enhance {target_path.name} according to the requirements. "
|
|
154
|
+
f"{user_prompt}\n\n"
|
|
155
|
+
"Maintain backward compatibility with existing functionality. "
|
|
156
|
+
"Add robust input validation and handle edge cases safely.\n\n"
|
|
157
|
+
"Context:\n"
|
|
158
|
+
f"{debug_context[:4000]}"
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
# Read existing file content for context
|
|
162
|
+
existing_content = target_path.read_text(encoding="utf-8")
|
|
163
|
+
instruction += f"\n\nExisting code:\n{existing_content[:5000]}"
|
|
164
|
+
|
|
165
|
+
action = "refactor"
|
|
166
|
+
agent_params = {
|
|
167
|
+
"file": str(target_path),
|
|
168
|
+
"instruction": instruction,
|
|
169
|
+
}
|
|
170
|
+
else:
|
|
171
|
+
# New file in existing service: implement with context
|
|
172
|
+
# Ensure parent directory exists
|
|
173
|
+
target_path.parent.mkdir(parents=True, exist_ok=True)
|
|
174
|
+
|
|
175
|
+
# Build specification from user prompt and workflow context
|
|
176
|
+
spec_parts = []
|
|
177
|
+
if user_prompt:
|
|
178
|
+
spec_parts.append(user_prompt)
|
|
179
|
+
|
|
180
|
+
# Add context from workflow state if available
|
|
181
|
+
enhanced_prompt = self.state.variables.get("enhanced_prompt", "")
|
|
182
|
+
if enhanced_prompt:
|
|
183
|
+
spec_parts.append(f"\n\nEnhanced Requirements:\n{enhanced_prompt[:3000]}")
|
|
184
|
+
|
|
185
|
+
architecture = self.state.variables.get("architecture", "")
|
|
186
|
+
if architecture:
|
|
187
|
+
spec_parts.append(f"\n\nArchitecture:\n{architecture[:3000]}")
|
|
188
|
+
|
|
189
|
+
specification = "\n".join(spec_parts) or f"Implement {target_path.name} according to requirements"
|
|
190
|
+
|
|
191
|
+
action = "implement"
|
|
192
|
+
agent_params = {
|
|
193
|
+
"specification": specification,
|
|
194
|
+
"file_path": str(target_path),
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
# Execute appropriate agent action
|
|
198
|
+
result = await self.run_agent(
|
|
199
|
+
"implementer",
|
|
200
|
+
action,
|
|
201
|
+
**agent_params,
|
|
202
|
+
)
|
|
203
|
+
self.state.variables["implementer_result"] = result
|
|
204
|
+
self.state.variables["target_file"] = str(target_path)
|
|
205
|
+
|
|
206
|
+
created_artifacts: list[dict[str, Any]] = []
|
|
207
|
+
|
|
208
|
+
# Add the target file as an artifact (for both new and existing files)
|
|
209
|
+
# This ensures workflow steps can track what was created/modified
|
|
210
|
+
if target_path.exists():
|
|
211
|
+
created_artifacts.append(
|
|
212
|
+
{"name": str(target_path.relative_to(self.project_root)), "path": str(target_path)}
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
# Also add "src/" artifact for workflow compatibility
|
|
216
|
+
# Many workflow presets expect "src/" as a generic source code artifact
|
|
217
|
+
# We use the parent directory of the target file as "src/"
|
|
218
|
+
src_dir = target_path.parent
|
|
219
|
+
created_artifacts.append(
|
|
220
|
+
{"name": "src/", "path": str(src_dir)}
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
# Create fixed-code/ artifact if requested by preset (only for existing files)
|
|
224
|
+
if file_exists and "fixed-code/" in (step.creates or []):
|
|
225
|
+
fixed_dir = self.project_root / "fixed-code"
|
|
226
|
+
fixed_dir.mkdir(parents=True, exist_ok=True)
|
|
227
|
+
fixed_copy = fixed_dir / target_path.name
|
|
228
|
+
shutil.copy2(target_path, fixed_copy)
|
|
229
|
+
self.state.variables["fixed_file"] = str(fixed_copy)
|
|
230
|
+
created_artifacts.append(
|
|
231
|
+
{"name": "fixed-code/", "path": str(fixed_dir)}
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
return created_artifacts
|
|
235
|
+
|
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Ops Agent Handler
|
|
3
|
-
|
|
4
|
-
Handles execution of ops agent steps for security scanning.
|
|
5
|
-
|
|
6
|
-
Epic 20: Complexity Reduction - Story 20.1
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
from pathlib import Path
|
|
10
|
-
from typing import Any
|
|
11
|
-
|
|
12
|
-
from ..models import WorkflowStep
|
|
13
|
-
from .base import AgentExecutionHandler
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class OpsHandler(AgentExecutionHandler):
|
|
17
|
-
"""Handler for ops agent execution."""
|
|
18
|
-
|
|
19
|
-
def supports(self, agent_name: str, action: str) -> bool:
|
|
20
|
-
"""Check if this handler supports ops agent."""
|
|
21
|
-
return agent_name == "ops" and action in {
|
|
22
|
-
"security_scan",
|
|
23
|
-
"security-scan",
|
|
24
|
-
"audit",
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
async def execute(
|
|
28
|
-
self,
|
|
29
|
-
step: WorkflowStep,
|
|
30
|
-
action: str,
|
|
31
|
-
target_path: Path | None,
|
|
32
|
-
) -> list[dict[str, Any]]:
|
|
33
|
-
"""
|
|
34
|
-
Execute ops step.
|
|
35
|
-
|
|
36
|
-
Args:
|
|
37
|
-
step: Workflow step definition
|
|
38
|
-
action: Normalized action name
|
|
39
|
-
target_path: Target file path (not used for ops)
|
|
40
|
-
|
|
41
|
-
Returns:
|
|
42
|
-
List of created artifacts
|
|
43
|
-
"""
|
|
44
|
-
# Run ops agent security scan
|
|
45
|
-
ops_result = await self.run_agent(
|
|
46
|
-
"ops",
|
|
47
|
-
"security-scan",
|
|
48
|
-
project_root=str(self.project_root),
|
|
49
|
-
)
|
|
50
|
-
self.state.variables["ops_result"] = ops_result
|
|
51
|
-
|
|
52
|
-
# Create security-report.md artifact if requested
|
|
53
|
-
created_artifacts: list[dict[str, Any]] = []
|
|
54
|
-
if "security-report.md" in (step.creates or []):
|
|
55
|
-
security_path = self.project_root / "security-report.md"
|
|
56
|
-
if security_path.exists():
|
|
57
|
-
created_artifacts.append(
|
|
58
|
-
{"name": "security-report.md", "path": str(security_path)}
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
return created_artifacts
|
|
62
|
-
|
|
1
|
+
"""
|
|
2
|
+
Ops Agent Handler
|
|
3
|
+
|
|
4
|
+
Handles execution of ops agent steps for security scanning.
|
|
5
|
+
|
|
6
|
+
Epic 20: Complexity Reduction - Story 20.1
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from ..models import WorkflowStep
|
|
13
|
+
from .base import AgentExecutionHandler
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class OpsHandler(AgentExecutionHandler):
|
|
17
|
+
"""Handler for ops agent execution."""
|
|
18
|
+
|
|
19
|
+
def supports(self, agent_name: str, action: str) -> bool:
|
|
20
|
+
"""Check if this handler supports ops agent."""
|
|
21
|
+
return agent_name == "ops" and action in {
|
|
22
|
+
"security_scan",
|
|
23
|
+
"security-scan",
|
|
24
|
+
"audit",
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async def execute(
|
|
28
|
+
self,
|
|
29
|
+
step: WorkflowStep,
|
|
30
|
+
action: str,
|
|
31
|
+
target_path: Path | None,
|
|
32
|
+
) -> list[dict[str, Any]]:
|
|
33
|
+
"""
|
|
34
|
+
Execute ops step.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
step: Workflow step definition
|
|
38
|
+
action: Normalized action name
|
|
39
|
+
target_path: Target file path (not used for ops)
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
List of created artifacts
|
|
43
|
+
"""
|
|
44
|
+
# Run ops agent security scan
|
|
45
|
+
ops_result = await self.run_agent(
|
|
46
|
+
"ops",
|
|
47
|
+
"security-scan",
|
|
48
|
+
project_root=str(self.project_root),
|
|
49
|
+
)
|
|
50
|
+
self.state.variables["ops_result"] = ops_result
|
|
51
|
+
|
|
52
|
+
# Create security-report.md artifact if requested
|
|
53
|
+
created_artifacts: list[dict[str, Any]] = []
|
|
54
|
+
if "security-report.md" in (step.creates or []):
|
|
55
|
+
security_path = self.project_root / "security-report.md"
|
|
56
|
+
if security_path.exists():
|
|
57
|
+
created_artifacts.append(
|
|
58
|
+
{"name": "security-report.md", "path": str(security_path)}
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
return created_artifacts
|
|
62
|
+
|