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,280 +1,280 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Tech Stack Template Selection Module
|
|
3
|
-
|
|
4
|
-
Selects appropriate configuration templates based on detected technology stack.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import logging
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
from typing import Any
|
|
10
|
-
|
|
11
|
-
logger = logging.getLogger(__name__)
|
|
12
|
-
|
|
13
|
-
# Framework to template file mapping
|
|
14
|
-
# Maps detected framework names to template file names (without .yaml extension)
|
|
15
|
-
FRAMEWORK_TEMPLATE_MAP: dict[str, str] = {
|
|
16
|
-
"FastAPI": "fastapi",
|
|
17
|
-
"Django": "django",
|
|
18
|
-
"Flask": "flask",
|
|
19
|
-
"React": "react",
|
|
20
|
-
"Next.js": "nextjs",
|
|
21
|
-
"NextJS": "nextjs", # Alternative spelling
|
|
22
|
-
"Express": "express",
|
|
23
|
-
"NestJS": "nestjs",
|
|
24
|
-
"Vue.js": "vue",
|
|
25
|
-
"Vue": "vue",
|
|
26
|
-
"Angular": "angular",
|
|
27
|
-
"Starlette": "fastapi", # Starlette projects use FastAPI template
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
# Template priority order for multi-framework projects
|
|
31
|
-
# When multiple frameworks are detected, templates are selected in this order
|
|
32
|
-
TEMPLATE_PRIORITY_ORDER = [
|
|
33
|
-
"nextjs", # Fullstack framework takes priority
|
|
34
|
-
"nestjs", # Enterprise API framework
|
|
35
|
-
"fastapi", # Modern Python API
|
|
36
|
-
"django", # Full-featured web framework
|
|
37
|
-
"express", # Node.js backend
|
|
38
|
-
"flask", # Lightweight Python web
|
|
39
|
-
"react", # Frontend framework
|
|
40
|
-
"vue", # Frontend framework
|
|
41
|
-
"angular", # Frontend framework
|
|
42
|
-
]
|
|
43
|
-
|
|
44
|
-
# Default template name (used as fallback)
|
|
45
|
-
DEFAULT_TEMPLATE = "default"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
def normalize_framework_name(framework: str) -> str:
|
|
49
|
-
"""
|
|
50
|
-
Normalize framework name for template lookup.
|
|
51
|
-
|
|
52
|
-
Args:
|
|
53
|
-
framework: Framework name (e.g., "FastAPI", "fastapi", "Fast API")
|
|
54
|
-
|
|
55
|
-
Returns:
|
|
56
|
-
Normalized framework name matching FRAMEWORK_TEMPLATE_MAP keys
|
|
57
|
-
"""
|
|
58
|
-
# Remove extra spaces and normalize case
|
|
59
|
-
normalized = framework.strip()
|
|
60
|
-
|
|
61
|
-
# Try exact match first
|
|
62
|
-
if normalized in FRAMEWORK_TEMPLATE_MAP:
|
|
63
|
-
return normalized
|
|
64
|
-
|
|
65
|
-
# Try case-insensitive match
|
|
66
|
-
for key in FRAMEWORK_TEMPLATE_MAP.keys():
|
|
67
|
-
if key.lower() == normalized.lower():
|
|
68
|
-
return key
|
|
69
|
-
|
|
70
|
-
# Try partial match (e.g., "Fast API" -> "FastAPI")
|
|
71
|
-
normalized_lower = normalized.lower().replace(" ", "").replace("-", "").replace("_", "")
|
|
72
|
-
for key in FRAMEWORK_TEMPLATE_MAP.keys():
|
|
73
|
-
key_normalized = key.lower().replace(" ", "").replace("-", "").replace("_", "")
|
|
74
|
-
if key_normalized == normalized_lower or normalized_lower in key_normalized:
|
|
75
|
-
return key
|
|
76
|
-
|
|
77
|
-
return normalized
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
def get_template_for_framework(framework: str) -> str | None:
|
|
81
|
-
"""
|
|
82
|
-
Get template file name for a detected framework.
|
|
83
|
-
|
|
84
|
-
Args:
|
|
85
|
-
framework: Framework name (e.g., "FastAPI", "Next.js")
|
|
86
|
-
|
|
87
|
-
Returns:
|
|
88
|
-
Template file name (without .yaml extension) or None if not found
|
|
89
|
-
|
|
90
|
-
Examples:
|
|
91
|
-
>>> get_template_for_framework("FastAPI")
|
|
92
|
-
'fastapi'
|
|
93
|
-
>>> get_template_for_framework("Next.js")
|
|
94
|
-
'nextjs'
|
|
95
|
-
>>> get_template_for_framework("Unknown")
|
|
96
|
-
None
|
|
97
|
-
"""
|
|
98
|
-
normalized = normalize_framework_name(framework)
|
|
99
|
-
return FRAMEWORK_TEMPLATE_MAP.get(normalized)
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
def select_template_for_frameworks(
|
|
103
|
-
frameworks: list[str],
|
|
104
|
-
templates_dir: Path | None = None,
|
|
105
|
-
) -> tuple[str | None, str]:
|
|
106
|
-
"""
|
|
107
|
-
Select template for multiple detected frameworks.
|
|
108
|
-
|
|
109
|
-
When multiple frameworks are detected, selects the highest priority template
|
|
110
|
-
that exists. Priority is determined by TEMPLATE_PRIORITY_ORDER.
|
|
111
|
-
|
|
112
|
-
Args:
|
|
113
|
-
frameworks: List of detected framework names
|
|
114
|
-
templates_dir: Directory containing template files (defaults to framework templates/tech_stacks)
|
|
115
|
-
|
|
116
|
-
Returns:
|
|
117
|
-
Tuple of (template_name, reason) where:
|
|
118
|
-
- template_name: Template file name (without .yaml) or None if no match
|
|
119
|
-
- reason: Human-readable reason for selection
|
|
120
|
-
|
|
121
|
-
Examples:
|
|
122
|
-
>>> select_template_for_frameworks(["FastAPI", "React"])
|
|
123
|
-
('fastapi', 'Selected fastapi (priority 2) from detected frameworks: FastAPI, React')
|
|
124
|
-
"""
|
|
125
|
-
if not frameworks:
|
|
126
|
-
return None, "No frameworks detected"
|
|
127
|
-
|
|
128
|
-
if templates_dir is None:
|
|
129
|
-
# Default to framework's templates directory
|
|
130
|
-
current_file = Path(__file__)
|
|
131
|
-
framework_root = current_file.parent.parent.parent
|
|
132
|
-
templates_dir = framework_root / "templates" / "tech_stacks"
|
|
133
|
-
|
|
134
|
-
# Get template candidates for each framework
|
|
135
|
-
template_candidates: dict[str, list[str]] = {}
|
|
136
|
-
for framework in frameworks:
|
|
137
|
-
template = get_template_for_framework(framework)
|
|
138
|
-
if template:
|
|
139
|
-
if template not in template_candidates:
|
|
140
|
-
template_candidates[template] = []
|
|
141
|
-
template_candidates[template].append(framework)
|
|
142
|
-
|
|
143
|
-
if not template_candidates:
|
|
144
|
-
return None, f"No template mapping found for frameworks: {', '.join(frameworks)}"
|
|
145
|
-
|
|
146
|
-
# Select highest priority template that exists
|
|
147
|
-
for template_name in TEMPLATE_PRIORITY_ORDER:
|
|
148
|
-
if template_name in template_candidates:
|
|
149
|
-
template_file = templates_dir / f"{template_name}.yaml"
|
|
150
|
-
if template_file.exists():
|
|
151
|
-
frameworks_str = ", ".join(template_candidates[template_name])
|
|
152
|
-
priority = TEMPLATE_PRIORITY_ORDER.index(template_name) + 1
|
|
153
|
-
return (
|
|
154
|
-
template_name,
|
|
155
|
-
f"Selected {template_name} (priority {priority}) from detected frameworks: {frameworks_str}",
|
|
156
|
-
)
|
|
157
|
-
else:
|
|
158
|
-
logger.warning(
|
|
159
|
-
f"Template {template_name} mapped but file not found: {template_file}"
|
|
160
|
-
)
|
|
161
|
-
|
|
162
|
-
# Fallback: return first available template
|
|
163
|
-
first_template = list(template_candidates.keys())[0]
|
|
164
|
-
template_file = templates_dir / f"{first_template}.yaml"
|
|
165
|
-
if template_file.exists():
|
|
166
|
-
frameworks_str = ", ".join(template_candidates[first_template])
|
|
167
|
-
return (
|
|
168
|
-
first_template,
|
|
169
|
-
f"Selected {first_template} (fallback) from detected frameworks: {frameworks_str}",
|
|
170
|
-
)
|
|
171
|
-
|
|
172
|
-
return None, f"No template files found for candidates: {', '.join(template_candidates.keys())}"
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
def select_template(
|
|
176
|
-
tech_stack: dict[str, Any],
|
|
177
|
-
templates_dir: Path | None = None,
|
|
178
|
-
) -> tuple[str | None, str]:
|
|
179
|
-
"""
|
|
180
|
-
Select appropriate template based on detected tech stack.
|
|
181
|
-
|
|
182
|
-
This is the main entry point for template selection. It handles:
|
|
183
|
-
- Single framework detection
|
|
184
|
-
- Multiple framework detection (priority-based selection)
|
|
185
|
-
- Fallback to default template
|
|
186
|
-
|
|
187
|
-
Args:
|
|
188
|
-
tech_stack: Tech stack dictionary from detect_tech_stack()
|
|
189
|
-
templates_dir: Directory containing template files (optional)
|
|
190
|
-
|
|
191
|
-
Returns:
|
|
192
|
-
Tuple of (template_name, reason) where:
|
|
193
|
-
- template_name: Template file name (without .yaml) or None
|
|
194
|
-
- reason: Human-readable reason for selection
|
|
195
|
-
|
|
196
|
-
Examples:
|
|
197
|
-
>>> tech_stack = {"frameworks": ["FastAPI"]}
|
|
198
|
-
>>> select_template(tech_stack)
|
|
199
|
-
('fastapi', 'Selected fastapi for detected framework: FastAPI')
|
|
200
|
-
"""
|
|
201
|
-
if templates_dir is None:
|
|
202
|
-
# Default to framework's templates directory
|
|
203
|
-
current_file = Path(__file__)
|
|
204
|
-
framework_root = current_file.parent.parent.parent
|
|
205
|
-
templates_dir = framework_root / "templates" / "tech_stacks"
|
|
206
|
-
|
|
207
|
-
frameworks = tech_stack.get("frameworks", [])
|
|
208
|
-
|
|
209
|
-
if not frameworks:
|
|
210
|
-
return None, "No frameworks detected in tech stack"
|
|
211
|
-
|
|
212
|
-
# Single framework - direct mapping
|
|
213
|
-
if len(frameworks) == 1:
|
|
214
|
-
framework = frameworks[0]
|
|
215
|
-
template = get_template_for_framework(framework)
|
|
216
|
-
if template:
|
|
217
|
-
template_file = templates_dir / f"{template}.yaml"
|
|
218
|
-
if template_file.exists():
|
|
219
|
-
return (
|
|
220
|
-
template,
|
|
221
|
-
f"Selected {template} for detected framework: {framework}",
|
|
222
|
-
)
|
|
223
|
-
else:
|
|
224
|
-
logger.warning(f"Template {template} mapped but file not found: {template_file}")
|
|
225
|
-
return None, f"Template {template} not found for framework: {framework}"
|
|
226
|
-
else:
|
|
227
|
-
return None, f"No template mapping for framework: {framework}"
|
|
228
|
-
|
|
229
|
-
# Multiple frameworks - use priority-based selection
|
|
230
|
-
return select_template_for_frameworks(frameworks, templates_dir)
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
def get_template_path(template_name: str, templates_dir: Path | None = None) -> Path | None:
|
|
234
|
-
"""
|
|
235
|
-
Get full path to template file.
|
|
236
|
-
|
|
237
|
-
Args:
|
|
238
|
-
template_name: Template name (without .yaml extension)
|
|
239
|
-
templates_dir: Directory containing templates (optional)
|
|
240
|
-
|
|
241
|
-
Returns:
|
|
242
|
-
Path to template file or None if not found
|
|
243
|
-
"""
|
|
244
|
-
if templates_dir is None:
|
|
245
|
-
current_file = Path(__file__)
|
|
246
|
-
framework_root = current_file.parent.parent.parent
|
|
247
|
-
templates_dir = framework_root / "templates" / "tech_stacks"
|
|
248
|
-
|
|
249
|
-
template_file = templates_dir / f"{template_name}.yaml"
|
|
250
|
-
if template_file.exists():
|
|
251
|
-
return template_file
|
|
252
|
-
|
|
253
|
-
return None
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
def get_available_templates(templates_dir: Path | None = None) -> list[str]:
|
|
257
|
-
"""
|
|
258
|
-
Get list of available template names.
|
|
259
|
-
|
|
260
|
-
Args:
|
|
261
|
-
templates_dir: Directory containing templates (optional)
|
|
262
|
-
|
|
263
|
-
Returns:
|
|
264
|
-
List of template names (without .yaml extension)
|
|
265
|
-
"""
|
|
266
|
-
if templates_dir is None:
|
|
267
|
-
current_file = Path(__file__)
|
|
268
|
-
framework_root = current_file.parent.parent.parent
|
|
269
|
-
templates_dir = framework_root / "templates" / "tech_stacks"
|
|
270
|
-
|
|
271
|
-
if not templates_dir.exists():
|
|
272
|
-
return []
|
|
273
|
-
|
|
274
|
-
templates = []
|
|
275
|
-
for template_file in templates_dir.glob("*.yaml"):
|
|
276
|
-
if template_file.name != "README.md": # Skip README if it has .yaml extension
|
|
277
|
-
templates.append(template_file.stem)
|
|
278
|
-
|
|
279
|
-
return sorted(templates)
|
|
280
|
-
|
|
1
|
+
"""
|
|
2
|
+
Tech Stack Template Selection Module
|
|
3
|
+
|
|
4
|
+
Selects appropriate configuration templates based on detected technology stack.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
# Framework to template file mapping
|
|
14
|
+
# Maps detected framework names to template file names (without .yaml extension)
|
|
15
|
+
FRAMEWORK_TEMPLATE_MAP: dict[str, str] = {
|
|
16
|
+
"FastAPI": "fastapi",
|
|
17
|
+
"Django": "django",
|
|
18
|
+
"Flask": "flask",
|
|
19
|
+
"React": "react",
|
|
20
|
+
"Next.js": "nextjs",
|
|
21
|
+
"NextJS": "nextjs", # Alternative spelling
|
|
22
|
+
"Express": "express",
|
|
23
|
+
"NestJS": "nestjs",
|
|
24
|
+
"Vue.js": "vue",
|
|
25
|
+
"Vue": "vue",
|
|
26
|
+
"Angular": "angular",
|
|
27
|
+
"Starlette": "fastapi", # Starlette projects use FastAPI template
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
# Template priority order for multi-framework projects
|
|
31
|
+
# When multiple frameworks are detected, templates are selected in this order
|
|
32
|
+
TEMPLATE_PRIORITY_ORDER = [
|
|
33
|
+
"nextjs", # Fullstack framework takes priority
|
|
34
|
+
"nestjs", # Enterprise API framework
|
|
35
|
+
"fastapi", # Modern Python API
|
|
36
|
+
"django", # Full-featured web framework
|
|
37
|
+
"express", # Node.js backend
|
|
38
|
+
"flask", # Lightweight Python web
|
|
39
|
+
"react", # Frontend framework
|
|
40
|
+
"vue", # Frontend framework
|
|
41
|
+
"angular", # Frontend framework
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
# Default template name (used as fallback)
|
|
45
|
+
DEFAULT_TEMPLATE = "default"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def normalize_framework_name(framework: str) -> str:
|
|
49
|
+
"""
|
|
50
|
+
Normalize framework name for template lookup.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
framework: Framework name (e.g., "FastAPI", "fastapi", "Fast API")
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
Normalized framework name matching FRAMEWORK_TEMPLATE_MAP keys
|
|
57
|
+
"""
|
|
58
|
+
# Remove extra spaces and normalize case
|
|
59
|
+
normalized = framework.strip()
|
|
60
|
+
|
|
61
|
+
# Try exact match first
|
|
62
|
+
if normalized in FRAMEWORK_TEMPLATE_MAP:
|
|
63
|
+
return normalized
|
|
64
|
+
|
|
65
|
+
# Try case-insensitive match
|
|
66
|
+
for key in FRAMEWORK_TEMPLATE_MAP.keys():
|
|
67
|
+
if key.lower() == normalized.lower():
|
|
68
|
+
return key
|
|
69
|
+
|
|
70
|
+
# Try partial match (e.g., "Fast API" -> "FastAPI")
|
|
71
|
+
normalized_lower = normalized.lower().replace(" ", "").replace("-", "").replace("_", "")
|
|
72
|
+
for key in FRAMEWORK_TEMPLATE_MAP.keys():
|
|
73
|
+
key_normalized = key.lower().replace(" ", "").replace("-", "").replace("_", "")
|
|
74
|
+
if key_normalized == normalized_lower or normalized_lower in key_normalized:
|
|
75
|
+
return key
|
|
76
|
+
|
|
77
|
+
return normalized
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def get_template_for_framework(framework: str) -> str | None:
|
|
81
|
+
"""
|
|
82
|
+
Get template file name for a detected framework.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
framework: Framework name (e.g., "FastAPI", "Next.js")
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
Template file name (without .yaml extension) or None if not found
|
|
89
|
+
|
|
90
|
+
Examples:
|
|
91
|
+
>>> get_template_for_framework("FastAPI")
|
|
92
|
+
'fastapi'
|
|
93
|
+
>>> get_template_for_framework("Next.js")
|
|
94
|
+
'nextjs'
|
|
95
|
+
>>> get_template_for_framework("Unknown")
|
|
96
|
+
None
|
|
97
|
+
"""
|
|
98
|
+
normalized = normalize_framework_name(framework)
|
|
99
|
+
return FRAMEWORK_TEMPLATE_MAP.get(normalized)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def select_template_for_frameworks(
|
|
103
|
+
frameworks: list[str],
|
|
104
|
+
templates_dir: Path | None = None,
|
|
105
|
+
) -> tuple[str | None, str]:
|
|
106
|
+
"""
|
|
107
|
+
Select template for multiple detected frameworks.
|
|
108
|
+
|
|
109
|
+
When multiple frameworks are detected, selects the highest priority template
|
|
110
|
+
that exists. Priority is determined by TEMPLATE_PRIORITY_ORDER.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
frameworks: List of detected framework names
|
|
114
|
+
templates_dir: Directory containing template files (defaults to framework templates/tech_stacks)
|
|
115
|
+
|
|
116
|
+
Returns:
|
|
117
|
+
Tuple of (template_name, reason) where:
|
|
118
|
+
- template_name: Template file name (without .yaml) or None if no match
|
|
119
|
+
- reason: Human-readable reason for selection
|
|
120
|
+
|
|
121
|
+
Examples:
|
|
122
|
+
>>> select_template_for_frameworks(["FastAPI", "React"])
|
|
123
|
+
('fastapi', 'Selected fastapi (priority 2) from detected frameworks: FastAPI, React')
|
|
124
|
+
"""
|
|
125
|
+
if not frameworks:
|
|
126
|
+
return None, "No frameworks detected"
|
|
127
|
+
|
|
128
|
+
if templates_dir is None:
|
|
129
|
+
# Default to framework's templates directory
|
|
130
|
+
current_file = Path(__file__)
|
|
131
|
+
framework_root = current_file.parent.parent.parent
|
|
132
|
+
templates_dir = framework_root / "templates" / "tech_stacks"
|
|
133
|
+
|
|
134
|
+
# Get template candidates for each framework
|
|
135
|
+
template_candidates: dict[str, list[str]] = {}
|
|
136
|
+
for framework in frameworks:
|
|
137
|
+
template = get_template_for_framework(framework)
|
|
138
|
+
if template:
|
|
139
|
+
if template not in template_candidates:
|
|
140
|
+
template_candidates[template] = []
|
|
141
|
+
template_candidates[template].append(framework)
|
|
142
|
+
|
|
143
|
+
if not template_candidates:
|
|
144
|
+
return None, f"No template mapping found for frameworks: {', '.join(frameworks)}"
|
|
145
|
+
|
|
146
|
+
# Select highest priority template that exists
|
|
147
|
+
for template_name in TEMPLATE_PRIORITY_ORDER:
|
|
148
|
+
if template_name in template_candidates:
|
|
149
|
+
template_file = templates_dir / f"{template_name}.yaml"
|
|
150
|
+
if template_file.exists():
|
|
151
|
+
frameworks_str = ", ".join(template_candidates[template_name])
|
|
152
|
+
priority = TEMPLATE_PRIORITY_ORDER.index(template_name) + 1
|
|
153
|
+
return (
|
|
154
|
+
template_name,
|
|
155
|
+
f"Selected {template_name} (priority {priority}) from detected frameworks: {frameworks_str}",
|
|
156
|
+
)
|
|
157
|
+
else:
|
|
158
|
+
logger.warning(
|
|
159
|
+
f"Template {template_name} mapped but file not found: {template_file}"
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
# Fallback: return first available template
|
|
163
|
+
first_template = list(template_candidates.keys())[0]
|
|
164
|
+
template_file = templates_dir / f"{first_template}.yaml"
|
|
165
|
+
if template_file.exists():
|
|
166
|
+
frameworks_str = ", ".join(template_candidates[first_template])
|
|
167
|
+
return (
|
|
168
|
+
first_template,
|
|
169
|
+
f"Selected {first_template} (fallback) from detected frameworks: {frameworks_str}",
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
return None, f"No template files found for candidates: {', '.join(template_candidates.keys())}"
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def select_template(
|
|
176
|
+
tech_stack: dict[str, Any],
|
|
177
|
+
templates_dir: Path | None = None,
|
|
178
|
+
) -> tuple[str | None, str]:
|
|
179
|
+
"""
|
|
180
|
+
Select appropriate template based on detected tech stack.
|
|
181
|
+
|
|
182
|
+
This is the main entry point for template selection. It handles:
|
|
183
|
+
- Single framework detection
|
|
184
|
+
- Multiple framework detection (priority-based selection)
|
|
185
|
+
- Fallback to default template
|
|
186
|
+
|
|
187
|
+
Args:
|
|
188
|
+
tech_stack: Tech stack dictionary from detect_tech_stack()
|
|
189
|
+
templates_dir: Directory containing template files (optional)
|
|
190
|
+
|
|
191
|
+
Returns:
|
|
192
|
+
Tuple of (template_name, reason) where:
|
|
193
|
+
- template_name: Template file name (without .yaml) or None
|
|
194
|
+
- reason: Human-readable reason for selection
|
|
195
|
+
|
|
196
|
+
Examples:
|
|
197
|
+
>>> tech_stack = {"frameworks": ["FastAPI"]}
|
|
198
|
+
>>> select_template(tech_stack)
|
|
199
|
+
('fastapi', 'Selected fastapi for detected framework: FastAPI')
|
|
200
|
+
"""
|
|
201
|
+
if templates_dir is None:
|
|
202
|
+
# Default to framework's templates directory
|
|
203
|
+
current_file = Path(__file__)
|
|
204
|
+
framework_root = current_file.parent.parent.parent
|
|
205
|
+
templates_dir = framework_root / "templates" / "tech_stacks"
|
|
206
|
+
|
|
207
|
+
frameworks = tech_stack.get("frameworks", [])
|
|
208
|
+
|
|
209
|
+
if not frameworks:
|
|
210
|
+
return None, "No frameworks detected in tech stack"
|
|
211
|
+
|
|
212
|
+
# Single framework - direct mapping
|
|
213
|
+
if len(frameworks) == 1:
|
|
214
|
+
framework = frameworks[0]
|
|
215
|
+
template = get_template_for_framework(framework)
|
|
216
|
+
if template:
|
|
217
|
+
template_file = templates_dir / f"{template}.yaml"
|
|
218
|
+
if template_file.exists():
|
|
219
|
+
return (
|
|
220
|
+
template,
|
|
221
|
+
f"Selected {template} for detected framework: {framework}",
|
|
222
|
+
)
|
|
223
|
+
else:
|
|
224
|
+
logger.warning(f"Template {template} mapped but file not found: {template_file}")
|
|
225
|
+
return None, f"Template {template} not found for framework: {framework}"
|
|
226
|
+
else:
|
|
227
|
+
return None, f"No template mapping for framework: {framework}"
|
|
228
|
+
|
|
229
|
+
# Multiple frameworks - use priority-based selection
|
|
230
|
+
return select_template_for_frameworks(frameworks, templates_dir)
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def get_template_path(template_name: str, templates_dir: Path | None = None) -> Path | None:
|
|
234
|
+
"""
|
|
235
|
+
Get full path to template file.
|
|
236
|
+
|
|
237
|
+
Args:
|
|
238
|
+
template_name: Template name (without .yaml extension)
|
|
239
|
+
templates_dir: Directory containing templates (optional)
|
|
240
|
+
|
|
241
|
+
Returns:
|
|
242
|
+
Path to template file or None if not found
|
|
243
|
+
"""
|
|
244
|
+
if templates_dir is None:
|
|
245
|
+
current_file = Path(__file__)
|
|
246
|
+
framework_root = current_file.parent.parent.parent
|
|
247
|
+
templates_dir = framework_root / "templates" / "tech_stacks"
|
|
248
|
+
|
|
249
|
+
template_file = templates_dir / f"{template_name}.yaml"
|
|
250
|
+
if template_file.exists():
|
|
251
|
+
return template_file
|
|
252
|
+
|
|
253
|
+
return None
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def get_available_templates(templates_dir: Path | None = None) -> list[str]:
|
|
257
|
+
"""
|
|
258
|
+
Get list of available template names.
|
|
259
|
+
|
|
260
|
+
Args:
|
|
261
|
+
templates_dir: Directory containing templates (optional)
|
|
262
|
+
|
|
263
|
+
Returns:
|
|
264
|
+
List of template names (without .yaml extension)
|
|
265
|
+
"""
|
|
266
|
+
if templates_dir is None:
|
|
267
|
+
current_file = Path(__file__)
|
|
268
|
+
framework_root = current_file.parent.parent.parent
|
|
269
|
+
templates_dir = framework_root / "templates" / "tech_stacks"
|
|
270
|
+
|
|
271
|
+
if not templates_dir.exists():
|
|
272
|
+
return []
|
|
273
|
+
|
|
274
|
+
templates = []
|
|
275
|
+
for template_file in templates_dir.glob("*.yaml"):
|
|
276
|
+
if template_file.name != "README.md": # Skip README if it has .yaml extension
|
|
277
|
+
templates.append(template_file.stem)
|
|
278
|
+
|
|
279
|
+
return sorted(templates)
|
|
280
|
+
|