tapps-agents 3.6.0__py3-none-any.whl → 3.6.1__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/service_discovery.py +534 -534
- 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/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/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/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/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.backup_20260204_064058.py +324 -0
- tapps_agents/health/checks/outcomes.backup_20260204_064256.py +324 -0
- tapps_agents/health/checks/outcomes.backup_20260204_064600.py +324 -0
- 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/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/resources/__init__.py +5 -0
- tapps_agents/resources/claude/__init__.py +1 -0
- tapps_agents/resources/claude/commands/README.md +156 -0
- tapps_agents/resources/claude/commands/__init__.py +1 -0
- tapps_agents/resources/claude/commands/build-fix.md +22 -0
- tapps_agents/resources/claude/commands/build.md +77 -0
- tapps_agents/resources/claude/commands/debug.md +53 -0
- tapps_agents/resources/claude/commands/design.md +68 -0
- tapps_agents/resources/claude/commands/docs.md +53 -0
- tapps_agents/resources/claude/commands/e2e.md +22 -0
- tapps_agents/resources/claude/commands/fix.md +54 -0
- tapps_agents/resources/claude/commands/implement.md +53 -0
- tapps_agents/resources/claude/commands/improve.md +53 -0
- tapps_agents/resources/claude/commands/library-docs.md +64 -0
- tapps_agents/resources/claude/commands/lint.md +52 -0
- tapps_agents/resources/claude/commands/plan.md +65 -0
- tapps_agents/resources/claude/commands/refactor-clean.md +21 -0
- tapps_agents/resources/claude/commands/refactor.md +55 -0
- tapps_agents/resources/claude/commands/review.md +67 -0
- tapps_agents/resources/claude/commands/score.md +60 -0
- tapps_agents/resources/claude/commands/security-review.md +22 -0
- tapps_agents/resources/claude/commands/security-scan.md +54 -0
- tapps_agents/resources/claude/commands/tdd.md +24 -0
- tapps_agents/resources/claude/commands/test-coverage.md +21 -0
- tapps_agents/resources/claude/commands/test.md +54 -0
- tapps_agents/resources/claude/commands/update-codemaps.md +20 -0
- tapps_agents/resources/claude/commands/update-docs.md +21 -0
- tapps_agents/resources/claude/skills/__init__.py +1 -0
- tapps_agents/resources/claude/skills/analyst/SKILL.md +272 -0
- tapps_agents/resources/claude/skills/analyst/__init__.py +1 -0
- tapps_agents/resources/claude/skills/architect/SKILL.md +282 -0
- tapps_agents/resources/claude/skills/architect/__init__.py +1 -0
- tapps_agents/resources/claude/skills/backend-patterns/SKILL.md +30 -0
- tapps_agents/resources/claude/skills/backend-patterns/__init__.py +1 -0
- tapps_agents/resources/claude/skills/coding-standards/SKILL.md +29 -0
- tapps_agents/resources/claude/skills/coding-standards/__init__.py +1 -0
- tapps_agents/resources/claude/skills/debugger/SKILL.md +203 -0
- tapps_agents/resources/claude/skills/debugger/__init__.py +1 -0
- tapps_agents/resources/claude/skills/designer/SKILL.md +243 -0
- tapps_agents/resources/claude/skills/designer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/documenter/SKILL.md +252 -0
- tapps_agents/resources/claude/skills/documenter/__init__.py +1 -0
- tapps_agents/resources/claude/skills/enhancer/SKILL.md +307 -0
- tapps_agents/resources/claude/skills/enhancer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/evaluator/SKILL.md +204 -0
- tapps_agents/resources/claude/skills/evaluator/__init__.py +1 -0
- tapps_agents/resources/claude/skills/frontend-patterns/SKILL.md +29 -0
- tapps_agents/resources/claude/skills/frontend-patterns/__init__.py +1 -0
- tapps_agents/resources/claude/skills/implementer/SKILL.md +188 -0
- tapps_agents/resources/claude/skills/implementer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/improver/SKILL.md +218 -0
- tapps_agents/resources/claude/skills/improver/__init__.py +1 -0
- tapps_agents/resources/claude/skills/ops/SKILL.md +281 -0
- tapps_agents/resources/claude/skills/ops/__init__.py +1 -0
- tapps_agents/resources/claude/skills/orchestrator/SKILL.md +390 -0
- tapps_agents/resources/claude/skills/orchestrator/__init__.py +1 -0
- tapps_agents/resources/claude/skills/planner/SKILL.md +254 -0
- tapps_agents/resources/claude/skills/planner/__init__.py +1 -0
- tapps_agents/resources/claude/skills/reviewer/SKILL.md +434 -0
- tapps_agents/resources/claude/skills/reviewer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/security-review/SKILL.md +31 -0
- tapps_agents/resources/claude/skills/security-review/__init__.py +1 -0
- tapps_agents/resources/claude/skills/simple-mode/SKILL.md +695 -0
- tapps_agents/resources/claude/skills/simple-mode/__init__.py +1 -0
- tapps_agents/resources/claude/skills/tester/SKILL.md +219 -0
- tapps_agents/resources/claude/skills/tester/__init__.py +1 -0
- tapps_agents/resources/cursor/.cursorignore +35 -0
- tapps_agents/resources/cursor/__init__.py +1 -0
- tapps_agents/resources/cursor/commands/__init__.py +1 -0
- tapps_agents/resources/cursor/commands/build-fix.md +11 -0
- tapps_agents/resources/cursor/commands/build.md +11 -0
- tapps_agents/resources/cursor/commands/e2e.md +11 -0
- tapps_agents/resources/cursor/commands/fix.md +11 -0
- tapps_agents/resources/cursor/commands/refactor-clean.md +11 -0
- tapps_agents/resources/cursor/commands/review.md +11 -0
- tapps_agents/resources/cursor/commands/security-review.md +11 -0
- tapps_agents/resources/cursor/commands/tdd.md +11 -0
- tapps_agents/resources/cursor/commands/test-coverage.md +11 -0
- tapps_agents/resources/cursor/commands/test.md +11 -0
- tapps_agents/resources/cursor/commands/update-codemaps.md +10 -0
- tapps_agents/resources/cursor/commands/update-docs.md +11 -0
- tapps_agents/resources/cursor/rules/__init__.py +1 -0
- tapps_agents/resources/cursor/rules/agent-capabilities.mdc +687 -0
- tapps_agents/resources/cursor/rules/coding-style.mdc +31 -0
- tapps_agents/resources/cursor/rules/command-reference.mdc +2081 -0
- tapps_agents/resources/cursor/rules/cursor-mode-usage.mdc +125 -0
- tapps_agents/resources/cursor/rules/git-workflow.mdc +29 -0
- tapps_agents/resources/cursor/rules/performance.mdc +29 -0
- tapps_agents/resources/cursor/rules/project-context.mdc +163 -0
- tapps_agents/resources/cursor/rules/project-profiling.mdc +197 -0
- tapps_agents/resources/cursor/rules/quick-reference.mdc +630 -0
- tapps_agents/resources/cursor/rules/security.mdc +32 -0
- tapps_agents/resources/cursor/rules/simple-mode.mdc +500 -0
- tapps_agents/resources/cursor/rules/testing.mdc +31 -0
- tapps_agents/resources/cursor/rules/when-to-use.mdc +156 -0
- tapps_agents/resources/cursor/rules/workflow-presets.mdc +179 -0
- tapps_agents/resources/customizations/__init__.py +1 -0
- tapps_agents/resources/customizations/example-custom.yaml +83 -0
- tapps_agents/resources/hooks/__init__.py +1 -0
- tapps_agents/resources/hooks/templates/README.md +5 -0
- tapps_agents/resources/hooks/templates/__init__.py +1 -0
- tapps_agents/resources/hooks/templates/add-project-context.yaml +8 -0
- tapps_agents/resources/hooks/templates/auto-format-js.yaml +10 -0
- tapps_agents/resources/hooks/templates/auto-format-python.yaml +10 -0
- tapps_agents/resources/hooks/templates/git-commit-check.yaml +7 -0
- tapps_agents/resources/hooks/templates/notify-on-complete.yaml +8 -0
- tapps_agents/resources/hooks/templates/quality-gate.yaml +8 -0
- tapps_agents/resources/hooks/templates/security-scan-on-edit.yaml +10 -0
- tapps_agents/resources/hooks/templates/session-end-log.yaml +7 -0
- tapps_agents/resources/hooks/templates/show-beads-ready.yaml +8 -0
- tapps_agents/resources/hooks/templates/test-on-edit.yaml +10 -0
- tapps_agents/resources/hooks/templates/update-docs-on-complete.yaml +8 -0
- tapps_agents/resources/hooks/templates/user-prompt-log.yaml +7 -0
- tapps_agents/resources/scripts/__init__.py +1 -0
- tapps_agents/resources/scripts/set_bd_path.ps1 +51 -0
- tapps_agents/resources/workflows/__init__.py +1 -0
- tapps_agents/resources/workflows/presets/__init__.py +1 -0
- tapps_agents/resources/workflows/presets/brownfield-analysis.yaml +235 -0
- tapps_agents/resources/workflows/presets/fix.yaml +78 -0
- tapps_agents/resources/workflows/presets/full-sdlc.yaml +122 -0
- tapps_agents/resources/workflows/presets/quality.yaml +82 -0
- tapps_agents/resources/workflows/presets/rapid-dev.yaml +84 -0
- 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/breakdown_orchestrator.py +49 -49
- tapps_agents/simple_mode/orchestrators/brownfield_orchestrator.py +135 -135
- 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/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_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/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.6.0.dist-info → tapps_agents-3.6.1.dist-info}/METADATA +672 -672
- tapps_agents-3.6.1.dist-info/RECORD +883 -0
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/licenses/LICENSE +22 -22
- tapps_agents-3.6.0.dist-info/RECORD +0 -758
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/WHEEL +0 -0
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/entry_points.txt +0 -0
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/top_level.txt +0 -0
|
@@ -1,382 +1,382 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Step Dependency Management for Simple Mode Workflows.
|
|
3
|
-
|
|
4
|
-
Models workflow step dependencies as a DAG (Directed Acyclic Graph)
|
|
5
|
-
and handles failure cascades using Python 3.10+ pattern matching.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from __future__ import annotations
|
|
9
|
-
|
|
10
|
-
from dataclasses import dataclass, field
|
|
11
|
-
from enum import IntEnum
|
|
12
|
-
from typing import Any
|
|
13
|
-
|
|
14
|
-
from pydantic import BaseModel, Field
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class WorkflowStep(IntEnum):
|
|
18
|
-
"""Workflow steps with explicit ordering."""
|
|
19
|
-
|
|
20
|
-
ENHANCER = 1
|
|
21
|
-
PLANNER = 2
|
|
22
|
-
ARCHITECT = 3
|
|
23
|
-
DESIGNER = 4
|
|
24
|
-
IMPLEMENTER = 5
|
|
25
|
-
REVIEWER = 6
|
|
26
|
-
TESTER = 7
|
|
27
|
-
VERIFICATION = 8
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
class StepDefinition(BaseModel):
|
|
31
|
-
"""Definition of a workflow step with dependencies."""
|
|
32
|
-
|
|
33
|
-
step: WorkflowStep
|
|
34
|
-
agent_name: str
|
|
35
|
-
command: str
|
|
36
|
-
dependencies: list[WorkflowStep] = Field(default_factory=list)
|
|
37
|
-
can_run_parallel: bool = False # Can run in parallel with siblings
|
|
38
|
-
required_for_workflow: bool = True # Failure blocks workflow
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
# Build workflow DAG - defines the standard build workflow steps
|
|
42
|
-
WORKFLOW_STEPS: list[StepDefinition] = [
|
|
43
|
-
StepDefinition(
|
|
44
|
-
step=WorkflowStep.ENHANCER,
|
|
45
|
-
agent_name="enhancer",
|
|
46
|
-
command="enhance",
|
|
47
|
-
),
|
|
48
|
-
StepDefinition(
|
|
49
|
-
step=WorkflowStep.PLANNER,
|
|
50
|
-
agent_name="planner",
|
|
51
|
-
command="create-story",
|
|
52
|
-
dependencies=[WorkflowStep.ENHANCER],
|
|
53
|
-
),
|
|
54
|
-
StepDefinition(
|
|
55
|
-
step=WorkflowStep.ARCHITECT,
|
|
56
|
-
agent_name="architect",
|
|
57
|
-
command="design-system",
|
|
58
|
-
dependencies=[WorkflowStep.ENHANCER],
|
|
59
|
-
),
|
|
60
|
-
StepDefinition(
|
|
61
|
-
step=WorkflowStep.DESIGNER,
|
|
62
|
-
agent_name="designer",
|
|
63
|
-
command="design-api",
|
|
64
|
-
dependencies=[WorkflowStep.ARCHITECT],
|
|
65
|
-
),
|
|
66
|
-
StepDefinition(
|
|
67
|
-
step=WorkflowStep.IMPLEMENTER,
|
|
68
|
-
agent_name="implementer",
|
|
69
|
-
command="implement",
|
|
70
|
-
dependencies=[WorkflowStep.PLANNER, WorkflowStep.DESIGNER],
|
|
71
|
-
),
|
|
72
|
-
StepDefinition(
|
|
73
|
-
step=WorkflowStep.REVIEWER,
|
|
74
|
-
agent_name="reviewer",
|
|
75
|
-
command="score",
|
|
76
|
-
dependencies=[WorkflowStep.IMPLEMENTER],
|
|
77
|
-
can_run_parallel=True,
|
|
78
|
-
),
|
|
79
|
-
StepDefinition(
|
|
80
|
-
step=WorkflowStep.TESTER,
|
|
81
|
-
agent_name="tester",
|
|
82
|
-
command="generate-tests",
|
|
83
|
-
dependencies=[WorkflowStep.IMPLEMENTER],
|
|
84
|
-
can_run_parallel=True,
|
|
85
|
-
),
|
|
86
|
-
StepDefinition(
|
|
87
|
-
step=WorkflowStep.VERIFICATION,
|
|
88
|
-
agent_name="verification",
|
|
89
|
-
command="verify",
|
|
90
|
-
dependencies=[WorkflowStep.REVIEWER, WorkflowStep.TESTER],
|
|
91
|
-
),
|
|
92
|
-
]
|
|
93
|
-
|
|
94
|
-
# Index for fast lookup
|
|
95
|
-
STEP_BY_NUMBER: dict[WorkflowStep, StepDefinition] = {s.step: s for s in WORKFLOW_STEPS}
|
|
96
|
-
|
|
97
|
-
# Index by agent name
|
|
98
|
-
STEP_BY_AGENT: dict[str, StepDefinition] = {s.agent_name: s for s in WORKFLOW_STEPS}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
@dataclass
|
|
102
|
-
class StepExecutionState:
|
|
103
|
-
"""Track step execution state during workflow."""
|
|
104
|
-
|
|
105
|
-
completed: set[WorkflowStep] = field(default_factory=set)
|
|
106
|
-
failed: set[WorkflowStep] = field(default_factory=set)
|
|
107
|
-
skipped: set[WorkflowStep] = field(default_factory=set)
|
|
108
|
-
running: set[WorkflowStep] = field(default_factory=set)
|
|
109
|
-
results: dict[WorkflowStep, Any] = field(default_factory=dict)
|
|
110
|
-
|
|
111
|
-
@property
|
|
112
|
-
def all_processed(self) -> set[WorkflowStep]:
|
|
113
|
-
"""Get all steps that have been processed (completed, failed, or skipped)."""
|
|
114
|
-
return self.completed | self.failed | self.skipped
|
|
115
|
-
|
|
116
|
-
def mark_completed(self, step: WorkflowStep, result: Any = None) -> None:
|
|
117
|
-
"""Mark step as completed."""
|
|
118
|
-
self.running.discard(step)
|
|
119
|
-
self.completed.add(step)
|
|
120
|
-
if result is not None:
|
|
121
|
-
self.results[step] = result
|
|
122
|
-
|
|
123
|
-
def mark_failed(self, step: WorkflowStep, error: str | None = None) -> None:
|
|
124
|
-
"""Mark step as failed."""
|
|
125
|
-
self.running.discard(step)
|
|
126
|
-
self.failed.add(step)
|
|
127
|
-
if error:
|
|
128
|
-
self.results[step] = {"error": error}
|
|
129
|
-
|
|
130
|
-
def mark_skipped(self, step: WorkflowStep, reason: str | None = None) -> None:
|
|
131
|
-
"""Mark step as skipped."""
|
|
132
|
-
self.running.discard(step)
|
|
133
|
-
self.skipped.add(step)
|
|
134
|
-
if reason:
|
|
135
|
-
self.results[step] = {"skipped": reason}
|
|
136
|
-
|
|
137
|
-
def mark_running(self, step: WorkflowStep) -> None:
|
|
138
|
-
"""Mark step as running."""
|
|
139
|
-
self.running.add(step)
|
|
140
|
-
|
|
141
|
-
def is_complete(self) -> bool:
|
|
142
|
-
"""Check if workflow is complete (all steps processed)."""
|
|
143
|
-
all_steps = set(WorkflowStep)
|
|
144
|
-
return self.all_processed >= all_steps
|
|
145
|
-
|
|
146
|
-
def has_critical_failures(self) -> bool:
|
|
147
|
-
"""Check if there are failures in required steps."""
|
|
148
|
-
for step in self.failed:
|
|
149
|
-
step_def = STEP_BY_NUMBER.get(step)
|
|
150
|
-
if step_def and step_def.required_for_workflow:
|
|
151
|
-
return True
|
|
152
|
-
return False
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
class StepDependencyManager:
|
|
156
|
-
"""Manages step dependencies and failure cascades."""
|
|
157
|
-
|
|
158
|
-
def __init__(self, steps: list[StepDefinition] | None = None):
|
|
159
|
-
"""Initialize with step definitions.
|
|
160
|
-
|
|
161
|
-
Args:
|
|
162
|
-
steps: Optional custom step definitions (defaults to WORKFLOW_STEPS)
|
|
163
|
-
"""
|
|
164
|
-
steps = steps or WORKFLOW_STEPS
|
|
165
|
-
self.steps: dict[WorkflowStep, StepDefinition] = {s.step: s for s in steps}
|
|
166
|
-
|
|
167
|
-
def should_skip_step(
|
|
168
|
-
self,
|
|
169
|
-
step: WorkflowStep,
|
|
170
|
-
state: StepExecutionState,
|
|
171
|
-
) -> bool:
|
|
172
|
-
"""Check if step should be skipped due to failed dependencies.
|
|
173
|
-
|
|
174
|
-
Args:
|
|
175
|
-
step: Step to check
|
|
176
|
-
state: Current execution state
|
|
177
|
-
|
|
178
|
-
Returns:
|
|
179
|
-
True if step should be skipped
|
|
180
|
-
"""
|
|
181
|
-
step_def = self.steps.get(step)
|
|
182
|
-
if not step_def:
|
|
183
|
-
return True
|
|
184
|
-
|
|
185
|
-
# Check if any dependency failed
|
|
186
|
-
return bool(state.failed & set(step_def.dependencies))
|
|
187
|
-
|
|
188
|
-
def get_skip_reason(
|
|
189
|
-
self,
|
|
190
|
-
step: WorkflowStep,
|
|
191
|
-
state: StepExecutionState,
|
|
192
|
-
) -> str:
|
|
193
|
-
"""Get human-readable skip reason using pattern matching.
|
|
194
|
-
|
|
195
|
-
Args:
|
|
196
|
-
step: Step to check
|
|
197
|
-
state: Current execution state
|
|
198
|
-
|
|
199
|
-
Returns:
|
|
200
|
-
Skip reason string
|
|
201
|
-
"""
|
|
202
|
-
step_def = self.steps.get(step)
|
|
203
|
-
if not step_def:
|
|
204
|
-
return "Unknown step"
|
|
205
|
-
|
|
206
|
-
failed_deps = state.failed & set(step_def.dependencies)
|
|
207
|
-
|
|
208
|
-
# Use match/case for clear failure handling (Python 3.10+)
|
|
209
|
-
match len(failed_deps):
|
|
210
|
-
case 0:
|
|
211
|
-
return "No failed dependencies"
|
|
212
|
-
case 1:
|
|
213
|
-
dep = next(iter(failed_deps))
|
|
214
|
-
return f"Dependency step {dep.value} ({dep.name}) failed"
|
|
215
|
-
case _:
|
|
216
|
-
dep_names = ", ".join(f"{d.value} ({d.name})" for d in failed_deps)
|
|
217
|
-
return f"Multiple dependencies failed: {dep_names}"
|
|
218
|
-
|
|
219
|
-
def get_executable_steps(
|
|
220
|
-
self,
|
|
221
|
-
state: StepExecutionState,
|
|
222
|
-
) -> list[WorkflowStep]:
|
|
223
|
-
"""Get steps that can be executed now (dependencies satisfied).
|
|
224
|
-
|
|
225
|
-
Args:
|
|
226
|
-
state: Current execution state
|
|
227
|
-
|
|
228
|
-
Returns:
|
|
229
|
-
List of executable steps
|
|
230
|
-
"""
|
|
231
|
-
executable = []
|
|
232
|
-
for step, step_def in self.steps.items():
|
|
233
|
-
# Skip if already processed
|
|
234
|
-
if step in state.all_processed | state.running:
|
|
235
|
-
continue
|
|
236
|
-
# Check if all dependencies completed
|
|
237
|
-
if set(step_def.dependencies) <= state.completed:
|
|
238
|
-
executable.append(step)
|
|
239
|
-
return executable
|
|
240
|
-
|
|
241
|
-
def get_parallel_steps(
|
|
242
|
-
self,
|
|
243
|
-
state: StepExecutionState,
|
|
244
|
-
) -> list[WorkflowStep]:
|
|
245
|
-
"""Get steps that can run in parallel now.
|
|
246
|
-
|
|
247
|
-
Args:
|
|
248
|
-
state: Current execution state
|
|
249
|
-
|
|
250
|
-
Returns:
|
|
251
|
-
List of steps that can run in parallel
|
|
252
|
-
"""
|
|
253
|
-
executable = self.get_executable_steps(state)
|
|
254
|
-
return [
|
|
255
|
-
step
|
|
256
|
-
for step in executable
|
|
257
|
-
if self.steps[step].can_run_parallel
|
|
258
|
-
]
|
|
259
|
-
|
|
260
|
-
def get_dependent_steps(
|
|
261
|
-
self,
|
|
262
|
-
step: WorkflowStep,
|
|
263
|
-
) -> list[WorkflowStep]:
|
|
264
|
-
"""Get steps that depend on the given step.
|
|
265
|
-
|
|
266
|
-
Args:
|
|
267
|
-
step: Step to find dependents for
|
|
268
|
-
|
|
269
|
-
Returns:
|
|
270
|
-
List of dependent steps
|
|
271
|
-
"""
|
|
272
|
-
dependents = []
|
|
273
|
-
for s, step_def in self.steps.items():
|
|
274
|
-
if step in step_def.dependencies:
|
|
275
|
-
dependents.append(s)
|
|
276
|
-
return dependents
|
|
277
|
-
|
|
278
|
-
def get_steps_to_skip_on_failure(
|
|
279
|
-
self,
|
|
280
|
-
failed_step: WorkflowStep,
|
|
281
|
-
) -> list[WorkflowStep]:
|
|
282
|
-
"""Get all steps that should be skipped if a step fails.
|
|
283
|
-
|
|
284
|
-
Uses transitive dependency resolution.
|
|
285
|
-
|
|
286
|
-
Args:
|
|
287
|
-
failed_step: The step that failed
|
|
288
|
-
|
|
289
|
-
Returns:
|
|
290
|
-
List of steps to skip
|
|
291
|
-
"""
|
|
292
|
-
to_skip: set[WorkflowStep] = set()
|
|
293
|
-
to_check = [failed_step]
|
|
294
|
-
|
|
295
|
-
while to_check:
|
|
296
|
-
current = to_check.pop()
|
|
297
|
-
for dependent in self.get_dependent_steps(current):
|
|
298
|
-
if dependent not in to_skip:
|
|
299
|
-
to_skip.add(dependent)
|
|
300
|
-
to_check.append(dependent)
|
|
301
|
-
|
|
302
|
-
return list(to_skip)
|
|
303
|
-
|
|
304
|
-
def get_step_order(self) -> list[WorkflowStep]:
|
|
305
|
-
"""Get topologically sorted step order.
|
|
306
|
-
|
|
307
|
-
Returns:
|
|
308
|
-
List of steps in execution order
|
|
309
|
-
"""
|
|
310
|
-
# Kahn's algorithm for topological sort
|
|
311
|
-
in_degree: dict[WorkflowStep, int] = {step: 0 for step in self.steps}
|
|
312
|
-
for step_def in self.steps.values():
|
|
313
|
-
for dep in step_def.dependencies:
|
|
314
|
-
if dep in in_degree:
|
|
315
|
-
in_degree[step_def.step] += 1
|
|
316
|
-
|
|
317
|
-
queue = [step for step, deg in in_degree.items() if deg == 0]
|
|
318
|
-
result = []
|
|
319
|
-
|
|
320
|
-
while queue:
|
|
321
|
-
step = queue.pop(0)
|
|
322
|
-
result.append(step)
|
|
323
|
-
for dependent in self.get_dependent_steps(step):
|
|
324
|
-
in_degree[dependent] -= 1
|
|
325
|
-
if in_degree[dependent] == 0:
|
|
326
|
-
queue.append(dependent)
|
|
327
|
-
|
|
328
|
-
return result
|
|
329
|
-
|
|
330
|
-
def validate_dag(self) -> list[str]:
|
|
331
|
-
"""Validate that step definitions form a valid DAG.
|
|
332
|
-
|
|
333
|
-
Returns:
|
|
334
|
-
List of validation errors (empty if valid)
|
|
335
|
-
"""
|
|
336
|
-
errors = []
|
|
337
|
-
|
|
338
|
-
# Check for undefined dependencies
|
|
339
|
-
for step, step_def in self.steps.items():
|
|
340
|
-
for dep in step_def.dependencies:
|
|
341
|
-
if dep not in self.steps:
|
|
342
|
-
errors.append(
|
|
343
|
-
f"Step {step.name} depends on undefined step {dep.name}"
|
|
344
|
-
)
|
|
345
|
-
|
|
346
|
-
# Check for cycles (should match step count after toposort)
|
|
347
|
-
sorted_steps = self.get_step_order()
|
|
348
|
-
if len(sorted_steps) != len(self.steps):
|
|
349
|
-
errors.append("Circular dependency detected in workflow steps")
|
|
350
|
-
|
|
351
|
-
# Check for self-dependencies
|
|
352
|
-
for step, step_def in self.steps.items():
|
|
353
|
-
if step in step_def.dependencies:
|
|
354
|
-
errors.append(f"Step {step.name} depends on itself")
|
|
355
|
-
|
|
356
|
-
return errors
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
def get_step_for_agent(agent_name: str) -> WorkflowStep | None:
|
|
360
|
-
"""Get workflow step for an agent name.
|
|
361
|
-
|
|
362
|
-
Args:
|
|
363
|
-
agent_name: Name of the agent
|
|
364
|
-
|
|
365
|
-
Returns:
|
|
366
|
-
WorkflowStep or None if not found
|
|
367
|
-
"""
|
|
368
|
-
step_def = STEP_BY_AGENT.get(agent_name)
|
|
369
|
-
return step_def.step if step_def else None
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
def get_agent_for_step(step: WorkflowStep) -> str | None:
|
|
373
|
-
"""Get agent name for a workflow step.
|
|
374
|
-
|
|
375
|
-
Args:
|
|
376
|
-
step: Workflow step
|
|
377
|
-
|
|
378
|
-
Returns:
|
|
379
|
-
Agent name or None if not found
|
|
380
|
-
"""
|
|
381
|
-
step_def = STEP_BY_NUMBER.get(step)
|
|
382
|
-
return step_def.agent_name if step_def else None
|
|
1
|
+
"""
|
|
2
|
+
Step Dependency Management for Simple Mode Workflows.
|
|
3
|
+
|
|
4
|
+
Models workflow step dependencies as a DAG (Directed Acyclic Graph)
|
|
5
|
+
and handles failure cascades using Python 3.10+ pattern matching.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from dataclasses import dataclass, field
|
|
11
|
+
from enum import IntEnum
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
from pydantic import BaseModel, Field
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class WorkflowStep(IntEnum):
|
|
18
|
+
"""Workflow steps with explicit ordering."""
|
|
19
|
+
|
|
20
|
+
ENHANCER = 1
|
|
21
|
+
PLANNER = 2
|
|
22
|
+
ARCHITECT = 3
|
|
23
|
+
DESIGNER = 4
|
|
24
|
+
IMPLEMENTER = 5
|
|
25
|
+
REVIEWER = 6
|
|
26
|
+
TESTER = 7
|
|
27
|
+
VERIFICATION = 8
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class StepDefinition(BaseModel):
|
|
31
|
+
"""Definition of a workflow step with dependencies."""
|
|
32
|
+
|
|
33
|
+
step: WorkflowStep
|
|
34
|
+
agent_name: str
|
|
35
|
+
command: str
|
|
36
|
+
dependencies: list[WorkflowStep] = Field(default_factory=list)
|
|
37
|
+
can_run_parallel: bool = False # Can run in parallel with siblings
|
|
38
|
+
required_for_workflow: bool = True # Failure blocks workflow
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
# Build workflow DAG - defines the standard build workflow steps
|
|
42
|
+
WORKFLOW_STEPS: list[StepDefinition] = [
|
|
43
|
+
StepDefinition(
|
|
44
|
+
step=WorkflowStep.ENHANCER,
|
|
45
|
+
agent_name="enhancer",
|
|
46
|
+
command="enhance",
|
|
47
|
+
),
|
|
48
|
+
StepDefinition(
|
|
49
|
+
step=WorkflowStep.PLANNER,
|
|
50
|
+
agent_name="planner",
|
|
51
|
+
command="create-story",
|
|
52
|
+
dependencies=[WorkflowStep.ENHANCER],
|
|
53
|
+
),
|
|
54
|
+
StepDefinition(
|
|
55
|
+
step=WorkflowStep.ARCHITECT,
|
|
56
|
+
agent_name="architect",
|
|
57
|
+
command="design-system",
|
|
58
|
+
dependencies=[WorkflowStep.ENHANCER],
|
|
59
|
+
),
|
|
60
|
+
StepDefinition(
|
|
61
|
+
step=WorkflowStep.DESIGNER,
|
|
62
|
+
agent_name="designer",
|
|
63
|
+
command="design-api",
|
|
64
|
+
dependencies=[WorkflowStep.ARCHITECT],
|
|
65
|
+
),
|
|
66
|
+
StepDefinition(
|
|
67
|
+
step=WorkflowStep.IMPLEMENTER,
|
|
68
|
+
agent_name="implementer",
|
|
69
|
+
command="implement",
|
|
70
|
+
dependencies=[WorkflowStep.PLANNER, WorkflowStep.DESIGNER],
|
|
71
|
+
),
|
|
72
|
+
StepDefinition(
|
|
73
|
+
step=WorkflowStep.REVIEWER,
|
|
74
|
+
agent_name="reviewer",
|
|
75
|
+
command="score",
|
|
76
|
+
dependencies=[WorkflowStep.IMPLEMENTER],
|
|
77
|
+
can_run_parallel=True,
|
|
78
|
+
),
|
|
79
|
+
StepDefinition(
|
|
80
|
+
step=WorkflowStep.TESTER,
|
|
81
|
+
agent_name="tester",
|
|
82
|
+
command="generate-tests",
|
|
83
|
+
dependencies=[WorkflowStep.IMPLEMENTER],
|
|
84
|
+
can_run_parallel=True,
|
|
85
|
+
),
|
|
86
|
+
StepDefinition(
|
|
87
|
+
step=WorkflowStep.VERIFICATION,
|
|
88
|
+
agent_name="verification",
|
|
89
|
+
command="verify",
|
|
90
|
+
dependencies=[WorkflowStep.REVIEWER, WorkflowStep.TESTER],
|
|
91
|
+
),
|
|
92
|
+
]
|
|
93
|
+
|
|
94
|
+
# Index for fast lookup
|
|
95
|
+
STEP_BY_NUMBER: dict[WorkflowStep, StepDefinition] = {s.step: s for s in WORKFLOW_STEPS}
|
|
96
|
+
|
|
97
|
+
# Index by agent name
|
|
98
|
+
STEP_BY_AGENT: dict[str, StepDefinition] = {s.agent_name: s for s in WORKFLOW_STEPS}
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
@dataclass
|
|
102
|
+
class StepExecutionState:
|
|
103
|
+
"""Track step execution state during workflow."""
|
|
104
|
+
|
|
105
|
+
completed: set[WorkflowStep] = field(default_factory=set)
|
|
106
|
+
failed: set[WorkflowStep] = field(default_factory=set)
|
|
107
|
+
skipped: set[WorkflowStep] = field(default_factory=set)
|
|
108
|
+
running: set[WorkflowStep] = field(default_factory=set)
|
|
109
|
+
results: dict[WorkflowStep, Any] = field(default_factory=dict)
|
|
110
|
+
|
|
111
|
+
@property
|
|
112
|
+
def all_processed(self) -> set[WorkflowStep]:
|
|
113
|
+
"""Get all steps that have been processed (completed, failed, or skipped)."""
|
|
114
|
+
return self.completed | self.failed | self.skipped
|
|
115
|
+
|
|
116
|
+
def mark_completed(self, step: WorkflowStep, result: Any = None) -> None:
|
|
117
|
+
"""Mark step as completed."""
|
|
118
|
+
self.running.discard(step)
|
|
119
|
+
self.completed.add(step)
|
|
120
|
+
if result is not None:
|
|
121
|
+
self.results[step] = result
|
|
122
|
+
|
|
123
|
+
def mark_failed(self, step: WorkflowStep, error: str | None = None) -> None:
|
|
124
|
+
"""Mark step as failed."""
|
|
125
|
+
self.running.discard(step)
|
|
126
|
+
self.failed.add(step)
|
|
127
|
+
if error:
|
|
128
|
+
self.results[step] = {"error": error}
|
|
129
|
+
|
|
130
|
+
def mark_skipped(self, step: WorkflowStep, reason: str | None = None) -> None:
|
|
131
|
+
"""Mark step as skipped."""
|
|
132
|
+
self.running.discard(step)
|
|
133
|
+
self.skipped.add(step)
|
|
134
|
+
if reason:
|
|
135
|
+
self.results[step] = {"skipped": reason}
|
|
136
|
+
|
|
137
|
+
def mark_running(self, step: WorkflowStep) -> None:
|
|
138
|
+
"""Mark step as running."""
|
|
139
|
+
self.running.add(step)
|
|
140
|
+
|
|
141
|
+
def is_complete(self) -> bool:
|
|
142
|
+
"""Check if workflow is complete (all steps processed)."""
|
|
143
|
+
all_steps = set(WorkflowStep)
|
|
144
|
+
return self.all_processed >= all_steps
|
|
145
|
+
|
|
146
|
+
def has_critical_failures(self) -> bool:
|
|
147
|
+
"""Check if there are failures in required steps."""
|
|
148
|
+
for step in self.failed:
|
|
149
|
+
step_def = STEP_BY_NUMBER.get(step)
|
|
150
|
+
if step_def and step_def.required_for_workflow:
|
|
151
|
+
return True
|
|
152
|
+
return False
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
class StepDependencyManager:
|
|
156
|
+
"""Manages step dependencies and failure cascades."""
|
|
157
|
+
|
|
158
|
+
def __init__(self, steps: list[StepDefinition] | None = None):
|
|
159
|
+
"""Initialize with step definitions.
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
steps: Optional custom step definitions (defaults to WORKFLOW_STEPS)
|
|
163
|
+
"""
|
|
164
|
+
steps = steps or WORKFLOW_STEPS
|
|
165
|
+
self.steps: dict[WorkflowStep, StepDefinition] = {s.step: s for s in steps}
|
|
166
|
+
|
|
167
|
+
def should_skip_step(
|
|
168
|
+
self,
|
|
169
|
+
step: WorkflowStep,
|
|
170
|
+
state: StepExecutionState,
|
|
171
|
+
) -> bool:
|
|
172
|
+
"""Check if step should be skipped due to failed dependencies.
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
step: Step to check
|
|
176
|
+
state: Current execution state
|
|
177
|
+
|
|
178
|
+
Returns:
|
|
179
|
+
True if step should be skipped
|
|
180
|
+
"""
|
|
181
|
+
step_def = self.steps.get(step)
|
|
182
|
+
if not step_def:
|
|
183
|
+
return True
|
|
184
|
+
|
|
185
|
+
# Check if any dependency failed
|
|
186
|
+
return bool(state.failed & set(step_def.dependencies))
|
|
187
|
+
|
|
188
|
+
def get_skip_reason(
|
|
189
|
+
self,
|
|
190
|
+
step: WorkflowStep,
|
|
191
|
+
state: StepExecutionState,
|
|
192
|
+
) -> str:
|
|
193
|
+
"""Get human-readable skip reason using pattern matching.
|
|
194
|
+
|
|
195
|
+
Args:
|
|
196
|
+
step: Step to check
|
|
197
|
+
state: Current execution state
|
|
198
|
+
|
|
199
|
+
Returns:
|
|
200
|
+
Skip reason string
|
|
201
|
+
"""
|
|
202
|
+
step_def = self.steps.get(step)
|
|
203
|
+
if not step_def:
|
|
204
|
+
return "Unknown step"
|
|
205
|
+
|
|
206
|
+
failed_deps = state.failed & set(step_def.dependencies)
|
|
207
|
+
|
|
208
|
+
# Use match/case for clear failure handling (Python 3.10+)
|
|
209
|
+
match len(failed_deps):
|
|
210
|
+
case 0:
|
|
211
|
+
return "No failed dependencies"
|
|
212
|
+
case 1:
|
|
213
|
+
dep = next(iter(failed_deps))
|
|
214
|
+
return f"Dependency step {dep.value} ({dep.name}) failed"
|
|
215
|
+
case _:
|
|
216
|
+
dep_names = ", ".join(f"{d.value} ({d.name})" for d in failed_deps)
|
|
217
|
+
return f"Multiple dependencies failed: {dep_names}"
|
|
218
|
+
|
|
219
|
+
def get_executable_steps(
|
|
220
|
+
self,
|
|
221
|
+
state: StepExecutionState,
|
|
222
|
+
) -> list[WorkflowStep]:
|
|
223
|
+
"""Get steps that can be executed now (dependencies satisfied).
|
|
224
|
+
|
|
225
|
+
Args:
|
|
226
|
+
state: Current execution state
|
|
227
|
+
|
|
228
|
+
Returns:
|
|
229
|
+
List of executable steps
|
|
230
|
+
"""
|
|
231
|
+
executable = []
|
|
232
|
+
for step, step_def in self.steps.items():
|
|
233
|
+
# Skip if already processed
|
|
234
|
+
if step in state.all_processed | state.running:
|
|
235
|
+
continue
|
|
236
|
+
# Check if all dependencies completed
|
|
237
|
+
if set(step_def.dependencies) <= state.completed:
|
|
238
|
+
executable.append(step)
|
|
239
|
+
return executable
|
|
240
|
+
|
|
241
|
+
def get_parallel_steps(
|
|
242
|
+
self,
|
|
243
|
+
state: StepExecutionState,
|
|
244
|
+
) -> list[WorkflowStep]:
|
|
245
|
+
"""Get steps that can run in parallel now.
|
|
246
|
+
|
|
247
|
+
Args:
|
|
248
|
+
state: Current execution state
|
|
249
|
+
|
|
250
|
+
Returns:
|
|
251
|
+
List of steps that can run in parallel
|
|
252
|
+
"""
|
|
253
|
+
executable = self.get_executable_steps(state)
|
|
254
|
+
return [
|
|
255
|
+
step
|
|
256
|
+
for step in executable
|
|
257
|
+
if self.steps[step].can_run_parallel
|
|
258
|
+
]
|
|
259
|
+
|
|
260
|
+
def get_dependent_steps(
|
|
261
|
+
self,
|
|
262
|
+
step: WorkflowStep,
|
|
263
|
+
) -> list[WorkflowStep]:
|
|
264
|
+
"""Get steps that depend on the given step.
|
|
265
|
+
|
|
266
|
+
Args:
|
|
267
|
+
step: Step to find dependents for
|
|
268
|
+
|
|
269
|
+
Returns:
|
|
270
|
+
List of dependent steps
|
|
271
|
+
"""
|
|
272
|
+
dependents = []
|
|
273
|
+
for s, step_def in self.steps.items():
|
|
274
|
+
if step in step_def.dependencies:
|
|
275
|
+
dependents.append(s)
|
|
276
|
+
return dependents
|
|
277
|
+
|
|
278
|
+
def get_steps_to_skip_on_failure(
|
|
279
|
+
self,
|
|
280
|
+
failed_step: WorkflowStep,
|
|
281
|
+
) -> list[WorkflowStep]:
|
|
282
|
+
"""Get all steps that should be skipped if a step fails.
|
|
283
|
+
|
|
284
|
+
Uses transitive dependency resolution.
|
|
285
|
+
|
|
286
|
+
Args:
|
|
287
|
+
failed_step: The step that failed
|
|
288
|
+
|
|
289
|
+
Returns:
|
|
290
|
+
List of steps to skip
|
|
291
|
+
"""
|
|
292
|
+
to_skip: set[WorkflowStep] = set()
|
|
293
|
+
to_check = [failed_step]
|
|
294
|
+
|
|
295
|
+
while to_check:
|
|
296
|
+
current = to_check.pop()
|
|
297
|
+
for dependent in self.get_dependent_steps(current):
|
|
298
|
+
if dependent not in to_skip:
|
|
299
|
+
to_skip.add(dependent)
|
|
300
|
+
to_check.append(dependent)
|
|
301
|
+
|
|
302
|
+
return list(to_skip)
|
|
303
|
+
|
|
304
|
+
def get_step_order(self) -> list[WorkflowStep]:
|
|
305
|
+
"""Get topologically sorted step order.
|
|
306
|
+
|
|
307
|
+
Returns:
|
|
308
|
+
List of steps in execution order
|
|
309
|
+
"""
|
|
310
|
+
# Kahn's algorithm for topological sort
|
|
311
|
+
in_degree: dict[WorkflowStep, int] = {step: 0 for step in self.steps}
|
|
312
|
+
for step_def in self.steps.values():
|
|
313
|
+
for dep in step_def.dependencies:
|
|
314
|
+
if dep in in_degree:
|
|
315
|
+
in_degree[step_def.step] += 1
|
|
316
|
+
|
|
317
|
+
queue = [step for step, deg in in_degree.items() if deg == 0]
|
|
318
|
+
result = []
|
|
319
|
+
|
|
320
|
+
while queue:
|
|
321
|
+
step = queue.pop(0)
|
|
322
|
+
result.append(step)
|
|
323
|
+
for dependent in self.get_dependent_steps(step):
|
|
324
|
+
in_degree[dependent] -= 1
|
|
325
|
+
if in_degree[dependent] == 0:
|
|
326
|
+
queue.append(dependent)
|
|
327
|
+
|
|
328
|
+
return result
|
|
329
|
+
|
|
330
|
+
def validate_dag(self) -> list[str]:
|
|
331
|
+
"""Validate that step definitions form a valid DAG.
|
|
332
|
+
|
|
333
|
+
Returns:
|
|
334
|
+
List of validation errors (empty if valid)
|
|
335
|
+
"""
|
|
336
|
+
errors = []
|
|
337
|
+
|
|
338
|
+
# Check for undefined dependencies
|
|
339
|
+
for step, step_def in self.steps.items():
|
|
340
|
+
for dep in step_def.dependencies:
|
|
341
|
+
if dep not in self.steps:
|
|
342
|
+
errors.append(
|
|
343
|
+
f"Step {step.name} depends on undefined step {dep.name}"
|
|
344
|
+
)
|
|
345
|
+
|
|
346
|
+
# Check for cycles (should match step count after toposort)
|
|
347
|
+
sorted_steps = self.get_step_order()
|
|
348
|
+
if len(sorted_steps) != len(self.steps):
|
|
349
|
+
errors.append("Circular dependency detected in workflow steps")
|
|
350
|
+
|
|
351
|
+
# Check for self-dependencies
|
|
352
|
+
for step, step_def in self.steps.items():
|
|
353
|
+
if step in step_def.dependencies:
|
|
354
|
+
errors.append(f"Step {step.name} depends on itself")
|
|
355
|
+
|
|
356
|
+
return errors
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
def get_step_for_agent(agent_name: str) -> WorkflowStep | None:
|
|
360
|
+
"""Get workflow step for an agent name.
|
|
361
|
+
|
|
362
|
+
Args:
|
|
363
|
+
agent_name: Name of the agent
|
|
364
|
+
|
|
365
|
+
Returns:
|
|
366
|
+
WorkflowStep or None if not found
|
|
367
|
+
"""
|
|
368
|
+
step_def = STEP_BY_AGENT.get(agent_name)
|
|
369
|
+
return step_def.step if step_def else None
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
def get_agent_for_step(step: WorkflowStep) -> str | None:
|
|
373
|
+
"""Get agent name for a workflow step.
|
|
374
|
+
|
|
375
|
+
Args:
|
|
376
|
+
step: Workflow step
|
|
377
|
+
|
|
378
|
+
Returns:
|
|
379
|
+
Agent name or None if not found
|
|
380
|
+
"""
|
|
381
|
+
step_def = STEP_BY_NUMBER.get(step)
|
|
382
|
+
return step_def.agent_name if step_def else None
|