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,285 +1,285 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Preset Workflow Loader
|
|
3
|
-
|
|
4
|
-
Loads and maps preset workflows with short aliases and voice-friendly names.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import logging
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
from typing import Any
|
|
10
|
-
|
|
11
|
-
import yaml
|
|
12
|
-
|
|
13
|
-
logger = logging.getLogger(__name__)
|
|
14
|
-
|
|
15
|
-
from .models import Workflow
|
|
16
|
-
from .parser import WorkflowParser
|
|
17
|
-
|
|
18
|
-
# Try to import resource helper for packaged presets
|
|
19
|
-
try:
|
|
20
|
-
from ..core.init_project import _resource_at
|
|
21
|
-
except ImportError:
|
|
22
|
-
_resource_at = None
|
|
23
|
-
|
|
24
|
-
# Preset name mappings (5 presets; old names alias to the consolidated set)
|
|
25
|
-
PRESET_ALIASES: dict[str, str] = {
|
|
26
|
-
# full-sdlc
|
|
27
|
-
"full": "full-sdlc",
|
|
28
|
-
"enterprise": "full-sdlc",
|
|
29
|
-
"simple-full": "full-sdlc",
|
|
30
|
-
"full-sdlc": "full-sdlc",
|
|
31
|
-
# rapid-dev (absorbed feature-implementation, simple-new-feature)
|
|
32
|
-
"rapid": "rapid-dev",
|
|
33
|
-
"feature": "rapid-dev",
|
|
34
|
-
"new-feature": "rapid-dev",
|
|
35
|
-
"simple-new-feature": "rapid-dev",
|
|
36
|
-
"rapid-dev": "rapid-dev",
|
|
37
|
-
# fix (replaces maintenance, quick-fix, simple-fix-issues)
|
|
38
|
-
"fix": "fix",
|
|
39
|
-
"maintenance": "fix",
|
|
40
|
-
"hotfix": "fix",
|
|
41
|
-
"urgent": "fix",
|
|
42
|
-
"simple-fix-issues": "fix",
|
|
43
|
-
"refactor": "fix",
|
|
44
|
-
"quick-fix": "fix",
|
|
45
|
-
# quality (absorbed simple-improve-quality)
|
|
46
|
-
"quality": "quality",
|
|
47
|
-
"improve": "quality",
|
|
48
|
-
"simple-improve-quality": "quality",
|
|
49
|
-
# brownfield-analysis
|
|
50
|
-
"brownfield": "brownfield-analysis",
|
|
51
|
-
"brownfield-analysis": "brownfield-analysis",
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
class PresetLoader:
|
|
56
|
-
"""Loads preset workflows from YAML files."""
|
|
57
|
-
|
|
58
|
-
def __init__(self, presets_dir: Path | None = None):
|
|
59
|
-
"""
|
|
60
|
-
Initialize preset loader.
|
|
61
|
-
|
|
62
|
-
Args:
|
|
63
|
-
presets_dir: Directory containing preset YAML files.
|
|
64
|
-
Defaults to workflows/presets/ relative to project root.
|
|
65
|
-
"""
|
|
66
|
-
if presets_dir is None:
|
|
67
|
-
presets_dir = self._find_presets_dir()
|
|
68
|
-
|
|
69
|
-
self.presets_dir = Path(presets_dir)
|
|
70
|
-
self.parser = WorkflowParser()
|
|
71
|
-
|
|
72
|
-
def _find_presets_dir(self) -> Path:
|
|
73
|
-
"""
|
|
74
|
-
Find presets directory by checking multiple locations in order:
|
|
75
|
-
1. Framework source location (for development)
|
|
76
|
-
2. Packaged resources (for installed packages)
|
|
77
|
-
3. Current working directory (for project-specific presets)
|
|
78
|
-
|
|
79
|
-
Returns:
|
|
80
|
-
Path to presets directory
|
|
81
|
-
"""
|
|
82
|
-
# 1. Try framework source location (relative to this file)
|
|
83
|
-
# From tapps_agents/workflow/preset_loader.py:
|
|
84
|
-
# workflow/ -> tapps_agents/ -> project_root/
|
|
85
|
-
current_file = Path(__file__).parent # tapps_agents/workflow/
|
|
86
|
-
framework_root = current_file.parent.parent # project_root/
|
|
87
|
-
framework_presets = framework_root / "workflows" / "presets"
|
|
88
|
-
if framework_presets.exists():
|
|
89
|
-
logger.debug(f"Using framework presets: {framework_presets}")
|
|
90
|
-
return framework_presets
|
|
91
|
-
|
|
92
|
-
# 2. Try packaged resources (for installed packages)
|
|
93
|
-
if _resource_at is not None:
|
|
94
|
-
packaged_presets = _resource_at("workflows", "presets")
|
|
95
|
-
if packaged_presets is not None and packaged_presets.is_dir():
|
|
96
|
-
# Convert Traversable to Path by finding a file in it
|
|
97
|
-
try:
|
|
98
|
-
# List files to verify it's a valid directory
|
|
99
|
-
files = list(packaged_presets.iterdir())
|
|
100
|
-
if files:
|
|
101
|
-
# Use the first file's path to determine the actual filesystem path
|
|
102
|
-
# For packaged resources, we'll need to handle them differently
|
|
103
|
-
# For now, we'll fall through to cwd, but log this
|
|
104
|
-
logger.debug("Found packaged presets, but using cwd fallback")
|
|
105
|
-
except Exception as e:
|
|
106
|
-
# Log but continue - packaged presets may not be accessible
|
|
107
|
-
logger.debug(f"Could not access packaged presets: {e}")
|
|
108
|
-
pass
|
|
109
|
-
|
|
110
|
-
# 3. Fallback: try current working directory (for project-specific presets)
|
|
111
|
-
cwd_presets = Path.cwd() / "workflows" / "presets"
|
|
112
|
-
if cwd_presets.exists():
|
|
113
|
-
logger.debug(f"Using project presets: {cwd_presets}")
|
|
114
|
-
return cwd_presets
|
|
115
|
-
|
|
116
|
-
# If none found, return framework location anyway (will be created if needed)
|
|
117
|
-
logger.debug(f"No presets found, using framework location: {framework_presets}")
|
|
118
|
-
return framework_presets
|
|
119
|
-
|
|
120
|
-
def get_preset_name(self, alias: str) -> str | None:
|
|
121
|
-
"""
|
|
122
|
-
Get preset name from alias.
|
|
123
|
-
|
|
124
|
-
Args:
|
|
125
|
-
alias: Short alias or voice-friendly name
|
|
126
|
-
|
|
127
|
-
Returns:
|
|
128
|
-
Preset name or None if not found
|
|
129
|
-
"""
|
|
130
|
-
return PRESET_ALIASES.get(alias.lower())
|
|
131
|
-
|
|
132
|
-
def list_presets(self) -> dict[str, dict[str, Any]]:
|
|
133
|
-
"""
|
|
134
|
-
List all available presets with their aliases.
|
|
135
|
-
|
|
136
|
-
Returns:
|
|
137
|
-
Dictionary mapping preset names to their metadata
|
|
138
|
-
"""
|
|
139
|
-
presets: dict[str, dict[str, Any]] = {}
|
|
140
|
-
|
|
141
|
-
# First, collect all unique preset names
|
|
142
|
-
unique_presets = set(PRESET_ALIASES.values())
|
|
143
|
-
|
|
144
|
-
# Load metadata for each preset
|
|
145
|
-
for preset_name in unique_presets:
|
|
146
|
-
preset_file = self.presets_dir / f"{preset_name}.yaml"
|
|
147
|
-
if preset_file.exists():
|
|
148
|
-
try:
|
|
149
|
-
with open(preset_file, encoding="utf-8") as f:
|
|
150
|
-
data = yaml.safe_load(f)
|
|
151
|
-
workflow_data = data.get("workflow", {})
|
|
152
|
-
presets[preset_name] = {
|
|
153
|
-
"name": workflow_data.get("name", preset_name),
|
|
154
|
-
"description": workflow_data.get("description", ""),
|
|
155
|
-
"aliases": [],
|
|
156
|
-
}
|
|
157
|
-
except (KeyError, ValueError, TypeError, yaml.YAMLError, OSError) as e:
|
|
158
|
-
# Skip invalid preset entries (file errors, YAML errors, missing keys)
|
|
159
|
-
import logging
|
|
160
|
-
|
|
161
|
-
logger = logging.getLogger(__name__)
|
|
162
|
-
logger.warning(f"Invalid preset '{preset_name}': {e}")
|
|
163
|
-
presets[preset_name] = {
|
|
164
|
-
"name": preset_name,
|
|
165
|
-
"description": "",
|
|
166
|
-
"aliases": [],
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
# Add aliases to each preset
|
|
170
|
-
for alias, preset_name in PRESET_ALIASES.items():
|
|
171
|
-
if preset_name in presets:
|
|
172
|
-
if alias not in presets[preset_name]["aliases"]:
|
|
173
|
-
presets[preset_name]["aliases"].append(alias)
|
|
174
|
-
|
|
175
|
-
return presets
|
|
176
|
-
|
|
177
|
-
def load_preset(self, alias: str) -> Workflow | None:
|
|
178
|
-
"""
|
|
179
|
-
Load a preset workflow by alias.
|
|
180
|
-
|
|
181
|
-
Args:
|
|
182
|
-
alias: Short alias, voice-friendly name, or preset name
|
|
183
|
-
|
|
184
|
-
Returns:
|
|
185
|
-
Workflow object or None if not found
|
|
186
|
-
"""
|
|
187
|
-
preset_name = self.get_preset_name(alias)
|
|
188
|
-
if not preset_name:
|
|
189
|
-
# Try direct name match
|
|
190
|
-
preset_name = alias
|
|
191
|
-
|
|
192
|
-
# Try multiple locations to find the preset file
|
|
193
|
-
preset_file = self._find_preset_file(preset_name)
|
|
194
|
-
|
|
195
|
-
if preset_file is None:
|
|
196
|
-
return None
|
|
197
|
-
|
|
198
|
-
try:
|
|
199
|
-
return self.parser.parse_file(preset_file)
|
|
200
|
-
except Exception as e:
|
|
201
|
-
raise ValueError(f"Failed to load preset '{preset_name}': {e}") from e
|
|
202
|
-
|
|
203
|
-
def _find_preset_file(self, preset_name: str) -> Path | None:
|
|
204
|
-
"""
|
|
205
|
-
Find preset file by checking multiple locations in order.
|
|
206
|
-
|
|
207
|
-
Args:
|
|
208
|
-
preset_name: Name of the preset (without .yaml extension)
|
|
209
|
-
|
|
210
|
-
Returns:
|
|
211
|
-
Path to preset file or None if not found
|
|
212
|
-
"""
|
|
213
|
-
# 1. Check configured presets directory
|
|
214
|
-
preset_file = self.presets_dir / f"{preset_name}.yaml"
|
|
215
|
-
if preset_file.exists():
|
|
216
|
-
return preset_file
|
|
217
|
-
|
|
218
|
-
# 2. Try framework source location
|
|
219
|
-
current_file = Path(__file__).parent # tapps_agents/workflow/
|
|
220
|
-
framework_root = current_file.parent.parent # project_root/
|
|
221
|
-
framework_preset = framework_root / "workflows" / "presets" / f"{preset_name}.yaml"
|
|
222
|
-
if framework_preset.exists():
|
|
223
|
-
logger.debug(f"Found preset in framework location: {framework_preset}")
|
|
224
|
-
return framework_preset
|
|
225
|
-
|
|
226
|
-
# 3. Try packaged resources
|
|
227
|
-
if _resource_at is not None:
|
|
228
|
-
try:
|
|
229
|
-
packaged_preset = _resource_at("workflows", "presets", f"{preset_name}.yaml")
|
|
230
|
-
if packaged_preset is not None and packaged_preset.is_file():
|
|
231
|
-
# For Traversable, we need to read it and write to a temp location
|
|
232
|
-
# since the parser expects a Path object
|
|
233
|
-
import tempfile
|
|
234
|
-
with tempfile.NamedTemporaryFile(mode='w', suffix='.yaml', delete=False, encoding='utf-8') as tmp:
|
|
235
|
-
tmp.write(packaged_preset.read_text(encoding='utf-8'))
|
|
236
|
-
tmp_path = Path(tmp.name)
|
|
237
|
-
logger.debug(f"Using packaged preset from temp file: {tmp_path}")
|
|
238
|
-
return tmp_path
|
|
239
|
-
except Exception as e:
|
|
240
|
-
logger.debug(f"Could not load packaged preset: {e}")
|
|
241
|
-
|
|
242
|
-
# 4. Try current working directory
|
|
243
|
-
cwd_preset = Path.cwd() / "workflows" / "presets" / f"{preset_name}.yaml"
|
|
244
|
-
if cwd_preset.exists():
|
|
245
|
-
logger.debug(f"Found preset in project location: {cwd_preset}")
|
|
246
|
-
return cwd_preset
|
|
247
|
-
|
|
248
|
-
return None
|
|
249
|
-
|
|
250
|
-
def find_preset_by_intent(self, intent: str) -> str | None:
|
|
251
|
-
"""
|
|
252
|
-
Find preset by natural language intent (for voice commands).
|
|
253
|
-
|
|
254
|
-
Args:
|
|
255
|
-
intent: Natural language description (e.g., "run rapid development")
|
|
256
|
-
|
|
257
|
-
Returns:
|
|
258
|
-
Preset name or None if not found
|
|
259
|
-
"""
|
|
260
|
-
intent_lower = intent.lower()
|
|
261
|
-
|
|
262
|
-
# Keywords for each preset (5 presets: full-sdlc, rapid-dev, fix, quality, brownfield-analysis)
|
|
263
|
-
keywords = {
|
|
264
|
-
"full-sdlc": ["full", "enterprise", "complete", "sdlc", "lifecycle", "all"],
|
|
265
|
-
"rapid-dev": ["rapid", "quick", "fast", "feature", "sprint", "dev", "new feature"],
|
|
266
|
-
"fix": [
|
|
267
|
-
"fix", "maintenance", "refactor", "bug", "debt", "hotfix", "urgent",
|
|
268
|
-
"quick fix", "emergency", "patch", "critical", "simple fix",
|
|
269
|
-
],
|
|
270
|
-
"quality": ["quality", "improve", "review", "clean", "simple improve"],
|
|
271
|
-
"brownfield-analysis": ["brownfield", "analysis", "existing", "legacy"],
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
# Score each preset based on keyword matches
|
|
275
|
-
scores = {}
|
|
276
|
-
for preset_name, preset_keywords in keywords.items():
|
|
277
|
-
score = sum(1 for keyword in preset_keywords if keyword in intent_lower)
|
|
278
|
-
if score > 0:
|
|
279
|
-
scores[preset_name] = score
|
|
280
|
-
|
|
281
|
-
if scores:
|
|
282
|
-
# Return preset with highest score
|
|
283
|
-
return max(scores.items(), key=lambda x: x[1])[0]
|
|
284
|
-
|
|
285
|
-
return None
|
|
1
|
+
"""
|
|
2
|
+
Preset Workflow Loader
|
|
3
|
+
|
|
4
|
+
Loads and maps preset workflows with short aliases and voice-friendly names.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
import yaml
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
from .models import Workflow
|
|
16
|
+
from .parser import WorkflowParser
|
|
17
|
+
|
|
18
|
+
# Try to import resource helper for packaged presets
|
|
19
|
+
try:
|
|
20
|
+
from ..core.init_project import _resource_at
|
|
21
|
+
except ImportError:
|
|
22
|
+
_resource_at = None
|
|
23
|
+
|
|
24
|
+
# Preset name mappings (5 presets; old names alias to the consolidated set)
|
|
25
|
+
PRESET_ALIASES: dict[str, str] = {
|
|
26
|
+
# full-sdlc
|
|
27
|
+
"full": "full-sdlc",
|
|
28
|
+
"enterprise": "full-sdlc",
|
|
29
|
+
"simple-full": "full-sdlc",
|
|
30
|
+
"full-sdlc": "full-sdlc",
|
|
31
|
+
# rapid-dev (absorbed feature-implementation, simple-new-feature)
|
|
32
|
+
"rapid": "rapid-dev",
|
|
33
|
+
"feature": "rapid-dev",
|
|
34
|
+
"new-feature": "rapid-dev",
|
|
35
|
+
"simple-new-feature": "rapid-dev",
|
|
36
|
+
"rapid-dev": "rapid-dev",
|
|
37
|
+
# fix (replaces maintenance, quick-fix, simple-fix-issues)
|
|
38
|
+
"fix": "fix",
|
|
39
|
+
"maintenance": "fix",
|
|
40
|
+
"hotfix": "fix",
|
|
41
|
+
"urgent": "fix",
|
|
42
|
+
"simple-fix-issues": "fix",
|
|
43
|
+
"refactor": "fix",
|
|
44
|
+
"quick-fix": "fix",
|
|
45
|
+
# quality (absorbed simple-improve-quality)
|
|
46
|
+
"quality": "quality",
|
|
47
|
+
"improve": "quality",
|
|
48
|
+
"simple-improve-quality": "quality",
|
|
49
|
+
# brownfield-analysis
|
|
50
|
+
"brownfield": "brownfield-analysis",
|
|
51
|
+
"brownfield-analysis": "brownfield-analysis",
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class PresetLoader:
|
|
56
|
+
"""Loads preset workflows from YAML files."""
|
|
57
|
+
|
|
58
|
+
def __init__(self, presets_dir: Path | None = None):
|
|
59
|
+
"""
|
|
60
|
+
Initialize preset loader.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
presets_dir: Directory containing preset YAML files.
|
|
64
|
+
Defaults to workflows/presets/ relative to project root.
|
|
65
|
+
"""
|
|
66
|
+
if presets_dir is None:
|
|
67
|
+
presets_dir = self._find_presets_dir()
|
|
68
|
+
|
|
69
|
+
self.presets_dir = Path(presets_dir)
|
|
70
|
+
self.parser = WorkflowParser()
|
|
71
|
+
|
|
72
|
+
def _find_presets_dir(self) -> Path:
|
|
73
|
+
"""
|
|
74
|
+
Find presets directory by checking multiple locations in order:
|
|
75
|
+
1. Framework source location (for development)
|
|
76
|
+
2. Packaged resources (for installed packages)
|
|
77
|
+
3. Current working directory (for project-specific presets)
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
Path to presets directory
|
|
81
|
+
"""
|
|
82
|
+
# 1. Try framework source location (relative to this file)
|
|
83
|
+
# From tapps_agents/workflow/preset_loader.py:
|
|
84
|
+
# workflow/ -> tapps_agents/ -> project_root/
|
|
85
|
+
current_file = Path(__file__).parent # tapps_agents/workflow/
|
|
86
|
+
framework_root = current_file.parent.parent # project_root/
|
|
87
|
+
framework_presets = framework_root / "workflows" / "presets"
|
|
88
|
+
if framework_presets.exists():
|
|
89
|
+
logger.debug(f"Using framework presets: {framework_presets}")
|
|
90
|
+
return framework_presets
|
|
91
|
+
|
|
92
|
+
# 2. Try packaged resources (for installed packages)
|
|
93
|
+
if _resource_at is not None:
|
|
94
|
+
packaged_presets = _resource_at("workflows", "presets")
|
|
95
|
+
if packaged_presets is not None and packaged_presets.is_dir():
|
|
96
|
+
# Convert Traversable to Path by finding a file in it
|
|
97
|
+
try:
|
|
98
|
+
# List files to verify it's a valid directory
|
|
99
|
+
files = list(packaged_presets.iterdir())
|
|
100
|
+
if files:
|
|
101
|
+
# Use the first file's path to determine the actual filesystem path
|
|
102
|
+
# For packaged resources, we'll need to handle them differently
|
|
103
|
+
# For now, we'll fall through to cwd, but log this
|
|
104
|
+
logger.debug("Found packaged presets, but using cwd fallback")
|
|
105
|
+
except Exception as e:
|
|
106
|
+
# Log but continue - packaged presets may not be accessible
|
|
107
|
+
logger.debug(f"Could not access packaged presets: {e}")
|
|
108
|
+
pass
|
|
109
|
+
|
|
110
|
+
# 3. Fallback: try current working directory (for project-specific presets)
|
|
111
|
+
cwd_presets = Path.cwd() / "workflows" / "presets"
|
|
112
|
+
if cwd_presets.exists():
|
|
113
|
+
logger.debug(f"Using project presets: {cwd_presets}")
|
|
114
|
+
return cwd_presets
|
|
115
|
+
|
|
116
|
+
# If none found, return framework location anyway (will be created if needed)
|
|
117
|
+
logger.debug(f"No presets found, using framework location: {framework_presets}")
|
|
118
|
+
return framework_presets
|
|
119
|
+
|
|
120
|
+
def get_preset_name(self, alias: str) -> str | None:
|
|
121
|
+
"""
|
|
122
|
+
Get preset name from alias.
|
|
123
|
+
|
|
124
|
+
Args:
|
|
125
|
+
alias: Short alias or voice-friendly name
|
|
126
|
+
|
|
127
|
+
Returns:
|
|
128
|
+
Preset name or None if not found
|
|
129
|
+
"""
|
|
130
|
+
return PRESET_ALIASES.get(alias.lower())
|
|
131
|
+
|
|
132
|
+
def list_presets(self) -> dict[str, dict[str, Any]]:
|
|
133
|
+
"""
|
|
134
|
+
List all available presets with their aliases.
|
|
135
|
+
|
|
136
|
+
Returns:
|
|
137
|
+
Dictionary mapping preset names to their metadata
|
|
138
|
+
"""
|
|
139
|
+
presets: dict[str, dict[str, Any]] = {}
|
|
140
|
+
|
|
141
|
+
# First, collect all unique preset names
|
|
142
|
+
unique_presets = set(PRESET_ALIASES.values())
|
|
143
|
+
|
|
144
|
+
# Load metadata for each preset
|
|
145
|
+
for preset_name in unique_presets:
|
|
146
|
+
preset_file = self.presets_dir / f"{preset_name}.yaml"
|
|
147
|
+
if preset_file.exists():
|
|
148
|
+
try:
|
|
149
|
+
with open(preset_file, encoding="utf-8") as f:
|
|
150
|
+
data = yaml.safe_load(f)
|
|
151
|
+
workflow_data = data.get("workflow", {})
|
|
152
|
+
presets[preset_name] = {
|
|
153
|
+
"name": workflow_data.get("name", preset_name),
|
|
154
|
+
"description": workflow_data.get("description", ""),
|
|
155
|
+
"aliases": [],
|
|
156
|
+
}
|
|
157
|
+
except (KeyError, ValueError, TypeError, yaml.YAMLError, OSError) as e:
|
|
158
|
+
# Skip invalid preset entries (file errors, YAML errors, missing keys)
|
|
159
|
+
import logging
|
|
160
|
+
|
|
161
|
+
logger = logging.getLogger(__name__)
|
|
162
|
+
logger.warning(f"Invalid preset '{preset_name}': {e}")
|
|
163
|
+
presets[preset_name] = {
|
|
164
|
+
"name": preset_name,
|
|
165
|
+
"description": "",
|
|
166
|
+
"aliases": [],
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
# Add aliases to each preset
|
|
170
|
+
for alias, preset_name in PRESET_ALIASES.items():
|
|
171
|
+
if preset_name in presets:
|
|
172
|
+
if alias not in presets[preset_name]["aliases"]:
|
|
173
|
+
presets[preset_name]["aliases"].append(alias)
|
|
174
|
+
|
|
175
|
+
return presets
|
|
176
|
+
|
|
177
|
+
def load_preset(self, alias: str) -> Workflow | None:
|
|
178
|
+
"""
|
|
179
|
+
Load a preset workflow by alias.
|
|
180
|
+
|
|
181
|
+
Args:
|
|
182
|
+
alias: Short alias, voice-friendly name, or preset name
|
|
183
|
+
|
|
184
|
+
Returns:
|
|
185
|
+
Workflow object or None if not found
|
|
186
|
+
"""
|
|
187
|
+
preset_name = self.get_preset_name(alias)
|
|
188
|
+
if not preset_name:
|
|
189
|
+
# Try direct name match
|
|
190
|
+
preset_name = alias
|
|
191
|
+
|
|
192
|
+
# Try multiple locations to find the preset file
|
|
193
|
+
preset_file = self._find_preset_file(preset_name)
|
|
194
|
+
|
|
195
|
+
if preset_file is None:
|
|
196
|
+
return None
|
|
197
|
+
|
|
198
|
+
try:
|
|
199
|
+
return self.parser.parse_file(preset_file)
|
|
200
|
+
except Exception as e:
|
|
201
|
+
raise ValueError(f"Failed to load preset '{preset_name}': {e}") from e
|
|
202
|
+
|
|
203
|
+
def _find_preset_file(self, preset_name: str) -> Path | None:
|
|
204
|
+
"""
|
|
205
|
+
Find preset file by checking multiple locations in order.
|
|
206
|
+
|
|
207
|
+
Args:
|
|
208
|
+
preset_name: Name of the preset (without .yaml extension)
|
|
209
|
+
|
|
210
|
+
Returns:
|
|
211
|
+
Path to preset file or None if not found
|
|
212
|
+
"""
|
|
213
|
+
# 1. Check configured presets directory
|
|
214
|
+
preset_file = self.presets_dir / f"{preset_name}.yaml"
|
|
215
|
+
if preset_file.exists():
|
|
216
|
+
return preset_file
|
|
217
|
+
|
|
218
|
+
# 2. Try framework source location
|
|
219
|
+
current_file = Path(__file__).parent # tapps_agents/workflow/
|
|
220
|
+
framework_root = current_file.parent.parent # project_root/
|
|
221
|
+
framework_preset = framework_root / "workflows" / "presets" / f"{preset_name}.yaml"
|
|
222
|
+
if framework_preset.exists():
|
|
223
|
+
logger.debug(f"Found preset in framework location: {framework_preset}")
|
|
224
|
+
return framework_preset
|
|
225
|
+
|
|
226
|
+
# 3. Try packaged resources
|
|
227
|
+
if _resource_at is not None:
|
|
228
|
+
try:
|
|
229
|
+
packaged_preset = _resource_at("workflows", "presets", f"{preset_name}.yaml")
|
|
230
|
+
if packaged_preset is not None and packaged_preset.is_file():
|
|
231
|
+
# For Traversable, we need to read it and write to a temp location
|
|
232
|
+
# since the parser expects a Path object
|
|
233
|
+
import tempfile
|
|
234
|
+
with tempfile.NamedTemporaryFile(mode='w', suffix='.yaml', delete=False, encoding='utf-8') as tmp:
|
|
235
|
+
tmp.write(packaged_preset.read_text(encoding='utf-8'))
|
|
236
|
+
tmp_path = Path(tmp.name)
|
|
237
|
+
logger.debug(f"Using packaged preset from temp file: {tmp_path}")
|
|
238
|
+
return tmp_path
|
|
239
|
+
except Exception as e:
|
|
240
|
+
logger.debug(f"Could not load packaged preset: {e}")
|
|
241
|
+
|
|
242
|
+
# 4. Try current working directory
|
|
243
|
+
cwd_preset = Path.cwd() / "workflows" / "presets" / f"{preset_name}.yaml"
|
|
244
|
+
if cwd_preset.exists():
|
|
245
|
+
logger.debug(f"Found preset in project location: {cwd_preset}")
|
|
246
|
+
return cwd_preset
|
|
247
|
+
|
|
248
|
+
return None
|
|
249
|
+
|
|
250
|
+
def find_preset_by_intent(self, intent: str) -> str | None:
|
|
251
|
+
"""
|
|
252
|
+
Find preset by natural language intent (for voice commands).
|
|
253
|
+
|
|
254
|
+
Args:
|
|
255
|
+
intent: Natural language description (e.g., "run rapid development")
|
|
256
|
+
|
|
257
|
+
Returns:
|
|
258
|
+
Preset name or None if not found
|
|
259
|
+
"""
|
|
260
|
+
intent_lower = intent.lower()
|
|
261
|
+
|
|
262
|
+
# Keywords for each preset (5 presets: full-sdlc, rapid-dev, fix, quality, brownfield-analysis)
|
|
263
|
+
keywords = {
|
|
264
|
+
"full-sdlc": ["full", "enterprise", "complete", "sdlc", "lifecycle", "all"],
|
|
265
|
+
"rapid-dev": ["rapid", "quick", "fast", "feature", "sprint", "dev", "new feature"],
|
|
266
|
+
"fix": [
|
|
267
|
+
"fix", "maintenance", "refactor", "bug", "debt", "hotfix", "urgent",
|
|
268
|
+
"quick fix", "emergency", "patch", "critical", "simple fix",
|
|
269
|
+
],
|
|
270
|
+
"quality": ["quality", "improve", "review", "clean", "simple improve"],
|
|
271
|
+
"brownfield-analysis": ["brownfield", "analysis", "existing", "legacy"],
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
# Score each preset based on keyword matches
|
|
275
|
+
scores = {}
|
|
276
|
+
for preset_name, preset_keywords in keywords.items():
|
|
277
|
+
score = sum(1 for keyword in preset_keywords if keyword in intent_lower)
|
|
278
|
+
if score > 0:
|
|
279
|
+
scores[preset_name] = score
|
|
280
|
+
|
|
281
|
+
if scores:
|
|
282
|
+
# Return preset with highest score
|
|
283
|
+
return max(scores.items(), key=lambda x: x[1])[0]
|
|
284
|
+
|
|
285
|
+
return None
|