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,384 +1,384 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Learning Decision Engine
|
|
3
|
-
|
|
4
|
-
Combines learned experience and best practices to make intelligent decisions
|
|
5
|
-
for the learning system.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
import logging
|
|
9
|
-
from dataclasses import dataclass, field
|
|
10
|
-
from enum import Enum
|
|
11
|
-
from typing import Any
|
|
12
|
-
|
|
13
|
-
from .best_practice_consultant import BestPracticeAdvice, BestPracticeConsultant
|
|
14
|
-
from .learning_confidence import LearningConfidenceCalculator
|
|
15
|
-
from .learning_explainability import DecisionReasoningLogger
|
|
16
|
-
|
|
17
|
-
logger = logging.getLogger(__name__)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class DecisionSource(Enum):
|
|
21
|
-
"""Source of the decision."""
|
|
22
|
-
|
|
23
|
-
LEARNED_EXPERIENCE = "learned_experience"
|
|
24
|
-
BEST_PRACTICE = "best_practice"
|
|
25
|
-
COMBINED = "combined"
|
|
26
|
-
DEFAULT = "default"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
@dataclass
|
|
30
|
-
class DecisionResult:
|
|
31
|
-
"""Result of a learning decision."""
|
|
32
|
-
|
|
33
|
-
value: Any
|
|
34
|
-
source: DecisionSource
|
|
35
|
-
confidence: float
|
|
36
|
-
reasoning: str
|
|
37
|
-
should_proceed: bool
|
|
38
|
-
learned_confidence: float | None = None
|
|
39
|
-
best_practice_confidence: float | None = None
|
|
40
|
-
metadata: dict[str, Any] = field(default_factory=dict)
|
|
41
|
-
reasoning_chain: list[str] = field(default_factory=list) # Decision reasoning chain
|
|
42
|
-
explanation: str = "" # Human-readable explanation
|
|
43
|
-
decision_id: str = "" # Decision identifier for logging
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
@dataclass
|
|
47
|
-
class LearningDecision:
|
|
48
|
-
"""Complete learning decision with all context."""
|
|
49
|
-
|
|
50
|
-
decision_type: str
|
|
51
|
-
result: DecisionResult
|
|
52
|
-
learned_data: dict[str, Any]
|
|
53
|
-
best_practice_advice: BestPracticeAdvice | None = None
|
|
54
|
-
context: dict[str, Any] = field(default_factory=dict)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
class LearningDecisionEngine:
|
|
58
|
-
"""
|
|
59
|
-
Makes learning decisions by combining learned experience and best practices.
|
|
60
|
-
|
|
61
|
-
Implements the "Guided Autonomy" pattern:
|
|
62
|
-
- Prioritizes learned experience when high confidence
|
|
63
|
-
- Falls back to best practices when learned confidence is low
|
|
64
|
-
- Uses defaults when both sources are insufficient
|
|
65
|
-
"""
|
|
66
|
-
|
|
67
|
-
# Decision thresholds
|
|
68
|
-
LEARNED_HIGH_CONFIDENCE = 0.8
|
|
69
|
-
BEST_PRACTICE_HIGH_CONFIDENCE = 0.7
|
|
70
|
-
LEARNED_MODERATE_CONFIDENCE = 0.6
|
|
71
|
-
DEFAULT_CONFIDENCE = 0.5
|
|
72
|
-
|
|
73
|
-
# Minimum confidence to proceed
|
|
74
|
-
MIN_PROCEED_CONFIDENCE = 0.5
|
|
75
|
-
|
|
76
|
-
def __init__(
|
|
77
|
-
self,
|
|
78
|
-
capability_registry: Any, # CapabilityRegistry
|
|
79
|
-
best_practice_consultant: BestPracticeConsultant | None,
|
|
80
|
-
confidence_calculator: LearningConfidenceCalculator | None = None,
|
|
81
|
-
decision_logger: DecisionReasoningLogger | None = None,
|
|
82
|
-
):
|
|
83
|
-
"""
|
|
84
|
-
Initialize learning decision engine.
|
|
85
|
-
|
|
86
|
-
Args:
|
|
87
|
-
capability_registry: CapabilityRegistry instance
|
|
88
|
-
best_practice_consultant: BestPracticeConsultant instance (optional)
|
|
89
|
-
confidence_calculator: LearningConfidenceCalculator instance (optional)
|
|
90
|
-
decision_logger: DecisionReasoningLogger instance (optional)
|
|
91
|
-
"""
|
|
92
|
-
self.capability_registry = capability_registry
|
|
93
|
-
self.best_practice_consultant = best_practice_consultant
|
|
94
|
-
self.confidence_calculator = (
|
|
95
|
-
confidence_calculator or LearningConfidenceCalculator()
|
|
96
|
-
)
|
|
97
|
-
self.decision_logger = decision_logger or DecisionReasoningLogger()
|
|
98
|
-
self._decision_count = 0
|
|
99
|
-
self._decision_metrics: dict[str, list[DecisionResult]] = {}
|
|
100
|
-
|
|
101
|
-
async def make_decision(
|
|
102
|
-
self,
|
|
103
|
-
decision_type: str,
|
|
104
|
-
learned_data: dict[str, Any],
|
|
105
|
-
context: dict[str, Any],
|
|
106
|
-
default_value: Any = None,
|
|
107
|
-
) -> LearningDecision:
|
|
108
|
-
"""
|
|
109
|
-
Make a learning decision combining learned experience and best practices.
|
|
110
|
-
|
|
111
|
-
Decision Logic:
|
|
112
|
-
1. Calculate learned experience confidence
|
|
113
|
-
2. Consult best practices (if available)
|
|
114
|
-
3. Apply decision logic to choose value
|
|
115
|
-
4. Return decision result
|
|
116
|
-
|
|
117
|
-
Args:
|
|
118
|
-
decision_type: Type of decision (e.g., "quality_threshold")
|
|
119
|
-
learned_data: Dictionary with learned experience metrics
|
|
120
|
-
context: Context dictionary for decision
|
|
121
|
-
default_value: Default value if both sources insufficient
|
|
122
|
-
|
|
123
|
-
Returns:
|
|
124
|
-
LearningDecision with result and metadata
|
|
125
|
-
"""
|
|
126
|
-
self._decision_count += 1
|
|
127
|
-
|
|
128
|
-
logger.debug(
|
|
129
|
-
f"Making decision: {decision_type} "
|
|
130
|
-
f"(learned_data keys: {list(learned_data.keys())})"
|
|
131
|
-
)
|
|
132
|
-
|
|
133
|
-
# Calculate learned experience confidence
|
|
134
|
-
learned_confidence = self._calculate_learned_confidence(learned_data)
|
|
135
|
-
learned_value = learned_data.get("value") or default_value
|
|
136
|
-
|
|
137
|
-
# Get best practice advice (if consultant available)
|
|
138
|
-
best_practice_advice = None
|
|
139
|
-
if self.best_practice_consultant:
|
|
140
|
-
try:
|
|
141
|
-
best_practice_advice = (
|
|
142
|
-
await self.best_practice_consultant.consult_best_practices(
|
|
143
|
-
decision_type=decision_type, context=context
|
|
144
|
-
)
|
|
145
|
-
)
|
|
146
|
-
except Exception as e:
|
|
147
|
-
logger.warning(f"Failed to consult best practices: {e}")
|
|
148
|
-
|
|
149
|
-
# Calculate best practice confidence
|
|
150
|
-
best_practice_confidence = None
|
|
151
|
-
best_practice_value = None
|
|
152
|
-
if best_practice_advice:
|
|
153
|
-
best_practice_confidence = best_practice_advice.confidence
|
|
154
|
-
# Extract value from advice (may need parsing based on decision type)
|
|
155
|
-
best_practice_value = self._extract_value_from_advice(
|
|
156
|
-
best_practice_advice.advice, decision_type
|
|
157
|
-
)
|
|
158
|
-
|
|
159
|
-
# Apply decision logic
|
|
160
|
-
result = self._apply_decision_logic(
|
|
161
|
-
learned_confidence=learned_confidence,
|
|
162
|
-
best_practice_confidence=best_practice_confidence,
|
|
163
|
-
learned_value=learned_value,
|
|
164
|
-
best_practice_value=best_practice_value,
|
|
165
|
-
default_value=default_value,
|
|
166
|
-
decision_type=decision_type,
|
|
167
|
-
)
|
|
168
|
-
|
|
169
|
-
# Track metrics
|
|
170
|
-
if decision_type not in self._decision_metrics:
|
|
171
|
-
self._decision_metrics[decision_type] = []
|
|
172
|
-
self._decision_metrics[decision_type].append(result)
|
|
173
|
-
|
|
174
|
-
# Log decision with reasoning
|
|
175
|
-
sources = [result.source.value]
|
|
176
|
-
if best_practice_advice:
|
|
177
|
-
sources.append("best_practice")
|
|
178
|
-
|
|
179
|
-
decision_id = self.decision_logger.log_decision(
|
|
180
|
-
decision_type=decision_type,
|
|
181
|
-
reasoning=result.reasoning,
|
|
182
|
-
sources=sources,
|
|
183
|
-
confidence=result.confidence,
|
|
184
|
-
outcome=result.value,
|
|
185
|
-
context=context,
|
|
186
|
-
)
|
|
187
|
-
|
|
188
|
-
# Add decision_id to result metadata
|
|
189
|
-
result.metadata["decision_id"] = decision_id
|
|
190
|
-
|
|
191
|
-
return LearningDecision(
|
|
192
|
-
decision_type=decision_type,
|
|
193
|
-
result=result,
|
|
194
|
-
learned_data=learned_data,
|
|
195
|
-
best_practice_advice=best_practice_advice,
|
|
196
|
-
context=context,
|
|
197
|
-
)
|
|
198
|
-
|
|
199
|
-
def _calculate_learned_confidence(self, learned_data: dict[str, Any]) -> float:
|
|
200
|
-
"""
|
|
201
|
-
Calculate confidence from learned experience data.
|
|
202
|
-
|
|
203
|
-
Args:
|
|
204
|
-
learned_data: Dictionary with learned experience metrics
|
|
205
|
-
|
|
206
|
-
Returns:
|
|
207
|
-
Confidence score (0.0-1.0)
|
|
208
|
-
"""
|
|
209
|
-
# Extract metrics
|
|
210
|
-
usage_count = learned_data.get("usage_count", 0)
|
|
211
|
-
success_rate = learned_data.get("success_rate", 0.0)
|
|
212
|
-
quality_score = learned_data.get("quality_score", 0.0)
|
|
213
|
-
context_relevance = learned_data.get("context_relevance", 1.0)
|
|
214
|
-
|
|
215
|
-
# Calculate confidence
|
|
216
|
-
confidence = self.confidence_calculator.calculate_learned_confidence(
|
|
217
|
-
usage_count=usage_count,
|
|
218
|
-
success_rate=success_rate,
|
|
219
|
-
quality_score=quality_score,
|
|
220
|
-
context_relevance=context_relevance,
|
|
221
|
-
)
|
|
222
|
-
|
|
223
|
-
return confidence
|
|
224
|
-
|
|
225
|
-
def _extract_value_from_advice(self, advice: str, decision_type: str) -> Any:
|
|
226
|
-
"""
|
|
227
|
-
Extract value from best practice advice text.
|
|
228
|
-
|
|
229
|
-
This is a simple implementation - in production, might use
|
|
230
|
-
structured output or parsing based on decision type.
|
|
231
|
-
|
|
232
|
-
Args:
|
|
233
|
-
advice: Advice text from expert
|
|
234
|
-
decision_type: Type of decision
|
|
235
|
-
|
|
236
|
-
Returns:
|
|
237
|
-
Extracted value (may be None if extraction fails)
|
|
238
|
-
"""
|
|
239
|
-
# For now, return the advice text itself
|
|
240
|
-
# In production, might parse structured values like thresholds, etc.
|
|
241
|
-
return advice
|
|
242
|
-
|
|
243
|
-
def _apply_decision_logic(
|
|
244
|
-
self,
|
|
245
|
-
learned_confidence: float,
|
|
246
|
-
best_practice_confidence: float | None,
|
|
247
|
-
learned_value: Any,
|
|
248
|
-
best_practice_value: Any,
|
|
249
|
-
default_value: Any,
|
|
250
|
-
decision_type: str,
|
|
251
|
-
) -> DecisionResult:
|
|
252
|
-
"""
|
|
253
|
-
Apply decision logic to choose value from available sources.
|
|
254
|
-
|
|
255
|
-
Priority:
|
|
256
|
-
1. Learned experience (confidence >= 0.8)
|
|
257
|
-
2. Best practice (confidence >= 0.7)
|
|
258
|
-
3. Moderate learned experience (confidence >= 0.6)
|
|
259
|
-
4. Best practice fallback
|
|
260
|
-
5. Default
|
|
261
|
-
|
|
262
|
-
Args:
|
|
263
|
-
learned_confidence: Confidence from learned experience
|
|
264
|
-
best_practice_confidence: Confidence from best practices
|
|
265
|
-
learned_value: Value from learned experience
|
|
266
|
-
best_practice_value: Value from best practices
|
|
267
|
-
default_value: Default value
|
|
268
|
-
decision_type: Type of decision
|
|
269
|
-
|
|
270
|
-
Returns:
|
|
271
|
-
DecisionResult with chosen value and reasoning
|
|
272
|
-
"""
|
|
273
|
-
# Priority 1: High confidence learned experience
|
|
274
|
-
if learned_confidence >= self.LEARNED_HIGH_CONFIDENCE:
|
|
275
|
-
return DecisionResult(
|
|
276
|
-
value=learned_value,
|
|
277
|
-
source=DecisionSource.LEARNED_EXPERIENCE,
|
|
278
|
-
confidence=learned_confidence,
|
|
279
|
-
reasoning=(
|
|
280
|
-
f"High confidence from learned experience "
|
|
281
|
-
f"(confidence={learned_confidence:.3f})"
|
|
282
|
-
),
|
|
283
|
-
should_proceed=True,
|
|
284
|
-
learned_confidence=learned_confidence,
|
|
285
|
-
best_practice_confidence=best_practice_confidence,
|
|
286
|
-
)
|
|
287
|
-
|
|
288
|
-
# Priority 2: High confidence best practice
|
|
289
|
-
if (
|
|
290
|
-
best_practice_confidence is not None
|
|
291
|
-
and best_practice_confidence >= self.BEST_PRACTICE_HIGH_CONFIDENCE
|
|
292
|
-
):
|
|
293
|
-
return DecisionResult(
|
|
294
|
-
value=best_practice_value,
|
|
295
|
-
source=DecisionSource.BEST_PRACTICE,
|
|
296
|
-
confidence=best_practice_confidence,
|
|
297
|
-
reasoning=(
|
|
298
|
-
f"High confidence from best practices "
|
|
299
|
-
f"(confidence={best_practice_confidence:.3f})"
|
|
300
|
-
),
|
|
301
|
-
should_proceed=True,
|
|
302
|
-
learned_confidence=learned_confidence,
|
|
303
|
-
best_practice_confidence=best_practice_confidence,
|
|
304
|
-
)
|
|
305
|
-
|
|
306
|
-
# Priority 3: Moderate learned experience
|
|
307
|
-
if learned_confidence >= self.LEARNED_MODERATE_CONFIDENCE:
|
|
308
|
-
return DecisionResult(
|
|
309
|
-
value=learned_value,
|
|
310
|
-
source=DecisionSource.LEARNED_EXPERIENCE,
|
|
311
|
-
confidence=learned_confidence,
|
|
312
|
-
reasoning=(
|
|
313
|
-
f"Moderate confidence from learned experience "
|
|
314
|
-
f"(confidence={learned_confidence:.3f})"
|
|
315
|
-
),
|
|
316
|
-
should_proceed=learned_confidence >= self.MIN_PROCEED_CONFIDENCE,
|
|
317
|
-
learned_confidence=learned_confidence,
|
|
318
|
-
best_practice_confidence=best_practice_confidence,
|
|
319
|
-
)
|
|
320
|
-
|
|
321
|
-
# Priority 4: Best practice fallback
|
|
322
|
-
if best_practice_confidence is not None:
|
|
323
|
-
return DecisionResult(
|
|
324
|
-
value=best_practice_value,
|
|
325
|
-
source=DecisionSource.BEST_PRACTICE,
|
|
326
|
-
confidence=best_practice_confidence,
|
|
327
|
-
reasoning=(
|
|
328
|
-
f"Using best practice as fallback "
|
|
329
|
-
f"(confidence={best_practice_confidence:.3f}, "
|
|
330
|
-
f"learned_confidence={learned_confidence:.3f})"
|
|
331
|
-
),
|
|
332
|
-
should_proceed=best_practice_confidence >= self.MIN_PROCEED_CONFIDENCE,
|
|
333
|
-
learned_confidence=learned_confidence,
|
|
334
|
-
best_practice_confidence=best_practice_confidence,
|
|
335
|
-
)
|
|
336
|
-
|
|
337
|
-
# Priority 5: Default
|
|
338
|
-
return DecisionResult(
|
|
339
|
-
value=default_value,
|
|
340
|
-
source=DecisionSource.DEFAULT,
|
|
341
|
-
confidence=self.DEFAULT_CONFIDENCE,
|
|
342
|
-
reasoning=(
|
|
343
|
-
f"No sufficient confidence from either source "
|
|
344
|
-
f"(learned={learned_confidence:.3f}, "
|
|
345
|
-
f"best_practice={best_practice_confidence})"
|
|
346
|
-
),
|
|
347
|
-
should_proceed=False,
|
|
348
|
-
learned_confidence=learned_confidence,
|
|
349
|
-
best_practice_confidence=best_practice_confidence,
|
|
350
|
-
)
|
|
351
|
-
|
|
352
|
-
def get_decision_statistics(self) -> dict[str, Any]:
|
|
353
|
-
"""
|
|
354
|
-
Get decision statistics.
|
|
355
|
-
|
|
356
|
-
Returns:
|
|
357
|
-
Dictionary with decision statistics
|
|
358
|
-
"""
|
|
359
|
-
stats: dict[str, Any] = {
|
|
360
|
-
"total_decisions": self._decision_count,
|
|
361
|
-
"by_type": {},
|
|
362
|
-
"by_source": {},
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
# Count by type and source
|
|
366
|
-
for decision_type, results in self._decision_metrics.items():
|
|
367
|
-
stats["by_type"][decision_type] = len(results)
|
|
368
|
-
|
|
369
|
-
for result in results:
|
|
370
|
-
source = result.source.value
|
|
371
|
-
stats["by_source"][source] = stats["by_source"].get(source, 0) + 1
|
|
372
|
-
|
|
373
|
-
return stats
|
|
374
|
-
|
|
375
|
-
def get_cache_statistics(self) -> dict[str, Any] | None:
|
|
376
|
-
"""
|
|
377
|
-
Get cache statistics from best practice consultant.
|
|
378
|
-
|
|
379
|
-
Returns:
|
|
380
|
-
Cache statistics if consultant available, None otherwise
|
|
381
|
-
"""
|
|
382
|
-
if self.best_practice_consultant:
|
|
383
|
-
return self.best_practice_consultant.get_cache_statistics()
|
|
384
|
-
return None
|
|
1
|
+
"""
|
|
2
|
+
Learning Decision Engine
|
|
3
|
+
|
|
4
|
+
Combines learned experience and best practices to make intelligent decisions
|
|
5
|
+
for the learning system.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import logging
|
|
9
|
+
from dataclasses import dataclass, field
|
|
10
|
+
from enum import Enum
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
from .best_practice_consultant import BestPracticeAdvice, BestPracticeConsultant
|
|
14
|
+
from .learning_confidence import LearningConfidenceCalculator
|
|
15
|
+
from .learning_explainability import DecisionReasoningLogger
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class DecisionSource(Enum):
|
|
21
|
+
"""Source of the decision."""
|
|
22
|
+
|
|
23
|
+
LEARNED_EXPERIENCE = "learned_experience"
|
|
24
|
+
BEST_PRACTICE = "best_practice"
|
|
25
|
+
COMBINED = "combined"
|
|
26
|
+
DEFAULT = "default"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class DecisionResult:
|
|
31
|
+
"""Result of a learning decision."""
|
|
32
|
+
|
|
33
|
+
value: Any
|
|
34
|
+
source: DecisionSource
|
|
35
|
+
confidence: float
|
|
36
|
+
reasoning: str
|
|
37
|
+
should_proceed: bool
|
|
38
|
+
learned_confidence: float | None = None
|
|
39
|
+
best_practice_confidence: float | None = None
|
|
40
|
+
metadata: dict[str, Any] = field(default_factory=dict)
|
|
41
|
+
reasoning_chain: list[str] = field(default_factory=list) # Decision reasoning chain
|
|
42
|
+
explanation: str = "" # Human-readable explanation
|
|
43
|
+
decision_id: str = "" # Decision identifier for logging
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@dataclass
|
|
47
|
+
class LearningDecision:
|
|
48
|
+
"""Complete learning decision with all context."""
|
|
49
|
+
|
|
50
|
+
decision_type: str
|
|
51
|
+
result: DecisionResult
|
|
52
|
+
learned_data: dict[str, Any]
|
|
53
|
+
best_practice_advice: BestPracticeAdvice | None = None
|
|
54
|
+
context: dict[str, Any] = field(default_factory=dict)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class LearningDecisionEngine:
|
|
58
|
+
"""
|
|
59
|
+
Makes learning decisions by combining learned experience and best practices.
|
|
60
|
+
|
|
61
|
+
Implements the "Guided Autonomy" pattern:
|
|
62
|
+
- Prioritizes learned experience when high confidence
|
|
63
|
+
- Falls back to best practices when learned confidence is low
|
|
64
|
+
- Uses defaults when both sources are insufficient
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
# Decision thresholds
|
|
68
|
+
LEARNED_HIGH_CONFIDENCE = 0.8
|
|
69
|
+
BEST_PRACTICE_HIGH_CONFIDENCE = 0.7
|
|
70
|
+
LEARNED_MODERATE_CONFIDENCE = 0.6
|
|
71
|
+
DEFAULT_CONFIDENCE = 0.5
|
|
72
|
+
|
|
73
|
+
# Minimum confidence to proceed
|
|
74
|
+
MIN_PROCEED_CONFIDENCE = 0.5
|
|
75
|
+
|
|
76
|
+
def __init__(
|
|
77
|
+
self,
|
|
78
|
+
capability_registry: Any, # CapabilityRegistry
|
|
79
|
+
best_practice_consultant: BestPracticeConsultant | None,
|
|
80
|
+
confidence_calculator: LearningConfidenceCalculator | None = None,
|
|
81
|
+
decision_logger: DecisionReasoningLogger | None = None,
|
|
82
|
+
):
|
|
83
|
+
"""
|
|
84
|
+
Initialize learning decision engine.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
capability_registry: CapabilityRegistry instance
|
|
88
|
+
best_practice_consultant: BestPracticeConsultant instance (optional)
|
|
89
|
+
confidence_calculator: LearningConfidenceCalculator instance (optional)
|
|
90
|
+
decision_logger: DecisionReasoningLogger instance (optional)
|
|
91
|
+
"""
|
|
92
|
+
self.capability_registry = capability_registry
|
|
93
|
+
self.best_practice_consultant = best_practice_consultant
|
|
94
|
+
self.confidence_calculator = (
|
|
95
|
+
confidence_calculator or LearningConfidenceCalculator()
|
|
96
|
+
)
|
|
97
|
+
self.decision_logger = decision_logger or DecisionReasoningLogger()
|
|
98
|
+
self._decision_count = 0
|
|
99
|
+
self._decision_metrics: dict[str, list[DecisionResult]] = {}
|
|
100
|
+
|
|
101
|
+
async def make_decision(
|
|
102
|
+
self,
|
|
103
|
+
decision_type: str,
|
|
104
|
+
learned_data: dict[str, Any],
|
|
105
|
+
context: dict[str, Any],
|
|
106
|
+
default_value: Any = None,
|
|
107
|
+
) -> LearningDecision:
|
|
108
|
+
"""
|
|
109
|
+
Make a learning decision combining learned experience and best practices.
|
|
110
|
+
|
|
111
|
+
Decision Logic:
|
|
112
|
+
1. Calculate learned experience confidence
|
|
113
|
+
2. Consult best practices (if available)
|
|
114
|
+
3. Apply decision logic to choose value
|
|
115
|
+
4. Return decision result
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
decision_type: Type of decision (e.g., "quality_threshold")
|
|
119
|
+
learned_data: Dictionary with learned experience metrics
|
|
120
|
+
context: Context dictionary for decision
|
|
121
|
+
default_value: Default value if both sources insufficient
|
|
122
|
+
|
|
123
|
+
Returns:
|
|
124
|
+
LearningDecision with result and metadata
|
|
125
|
+
"""
|
|
126
|
+
self._decision_count += 1
|
|
127
|
+
|
|
128
|
+
logger.debug(
|
|
129
|
+
f"Making decision: {decision_type} "
|
|
130
|
+
f"(learned_data keys: {list(learned_data.keys())})"
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
# Calculate learned experience confidence
|
|
134
|
+
learned_confidence = self._calculate_learned_confidence(learned_data)
|
|
135
|
+
learned_value = learned_data.get("value") or default_value
|
|
136
|
+
|
|
137
|
+
# Get best practice advice (if consultant available)
|
|
138
|
+
best_practice_advice = None
|
|
139
|
+
if self.best_practice_consultant:
|
|
140
|
+
try:
|
|
141
|
+
best_practice_advice = (
|
|
142
|
+
await self.best_practice_consultant.consult_best_practices(
|
|
143
|
+
decision_type=decision_type, context=context
|
|
144
|
+
)
|
|
145
|
+
)
|
|
146
|
+
except Exception as e:
|
|
147
|
+
logger.warning(f"Failed to consult best practices: {e}")
|
|
148
|
+
|
|
149
|
+
# Calculate best practice confidence
|
|
150
|
+
best_practice_confidence = None
|
|
151
|
+
best_practice_value = None
|
|
152
|
+
if best_practice_advice:
|
|
153
|
+
best_practice_confidence = best_practice_advice.confidence
|
|
154
|
+
# Extract value from advice (may need parsing based on decision type)
|
|
155
|
+
best_practice_value = self._extract_value_from_advice(
|
|
156
|
+
best_practice_advice.advice, decision_type
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
# Apply decision logic
|
|
160
|
+
result = self._apply_decision_logic(
|
|
161
|
+
learned_confidence=learned_confidence,
|
|
162
|
+
best_practice_confidence=best_practice_confidence,
|
|
163
|
+
learned_value=learned_value,
|
|
164
|
+
best_practice_value=best_practice_value,
|
|
165
|
+
default_value=default_value,
|
|
166
|
+
decision_type=decision_type,
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
# Track metrics
|
|
170
|
+
if decision_type not in self._decision_metrics:
|
|
171
|
+
self._decision_metrics[decision_type] = []
|
|
172
|
+
self._decision_metrics[decision_type].append(result)
|
|
173
|
+
|
|
174
|
+
# Log decision with reasoning
|
|
175
|
+
sources = [result.source.value]
|
|
176
|
+
if best_practice_advice:
|
|
177
|
+
sources.append("best_practice")
|
|
178
|
+
|
|
179
|
+
decision_id = self.decision_logger.log_decision(
|
|
180
|
+
decision_type=decision_type,
|
|
181
|
+
reasoning=result.reasoning,
|
|
182
|
+
sources=sources,
|
|
183
|
+
confidence=result.confidence,
|
|
184
|
+
outcome=result.value,
|
|
185
|
+
context=context,
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
# Add decision_id to result metadata
|
|
189
|
+
result.metadata["decision_id"] = decision_id
|
|
190
|
+
|
|
191
|
+
return LearningDecision(
|
|
192
|
+
decision_type=decision_type,
|
|
193
|
+
result=result,
|
|
194
|
+
learned_data=learned_data,
|
|
195
|
+
best_practice_advice=best_practice_advice,
|
|
196
|
+
context=context,
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
def _calculate_learned_confidence(self, learned_data: dict[str, Any]) -> float:
|
|
200
|
+
"""
|
|
201
|
+
Calculate confidence from learned experience data.
|
|
202
|
+
|
|
203
|
+
Args:
|
|
204
|
+
learned_data: Dictionary with learned experience metrics
|
|
205
|
+
|
|
206
|
+
Returns:
|
|
207
|
+
Confidence score (0.0-1.0)
|
|
208
|
+
"""
|
|
209
|
+
# Extract metrics
|
|
210
|
+
usage_count = learned_data.get("usage_count", 0)
|
|
211
|
+
success_rate = learned_data.get("success_rate", 0.0)
|
|
212
|
+
quality_score = learned_data.get("quality_score", 0.0)
|
|
213
|
+
context_relevance = learned_data.get("context_relevance", 1.0)
|
|
214
|
+
|
|
215
|
+
# Calculate confidence
|
|
216
|
+
confidence = self.confidence_calculator.calculate_learned_confidence(
|
|
217
|
+
usage_count=usage_count,
|
|
218
|
+
success_rate=success_rate,
|
|
219
|
+
quality_score=quality_score,
|
|
220
|
+
context_relevance=context_relevance,
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
return confidence
|
|
224
|
+
|
|
225
|
+
def _extract_value_from_advice(self, advice: str, decision_type: str) -> Any:
|
|
226
|
+
"""
|
|
227
|
+
Extract value from best practice advice text.
|
|
228
|
+
|
|
229
|
+
This is a simple implementation - in production, might use
|
|
230
|
+
structured output or parsing based on decision type.
|
|
231
|
+
|
|
232
|
+
Args:
|
|
233
|
+
advice: Advice text from expert
|
|
234
|
+
decision_type: Type of decision
|
|
235
|
+
|
|
236
|
+
Returns:
|
|
237
|
+
Extracted value (may be None if extraction fails)
|
|
238
|
+
"""
|
|
239
|
+
# For now, return the advice text itself
|
|
240
|
+
# In production, might parse structured values like thresholds, etc.
|
|
241
|
+
return advice
|
|
242
|
+
|
|
243
|
+
def _apply_decision_logic(
|
|
244
|
+
self,
|
|
245
|
+
learned_confidence: float,
|
|
246
|
+
best_practice_confidence: float | None,
|
|
247
|
+
learned_value: Any,
|
|
248
|
+
best_practice_value: Any,
|
|
249
|
+
default_value: Any,
|
|
250
|
+
decision_type: str,
|
|
251
|
+
) -> DecisionResult:
|
|
252
|
+
"""
|
|
253
|
+
Apply decision logic to choose value from available sources.
|
|
254
|
+
|
|
255
|
+
Priority:
|
|
256
|
+
1. Learned experience (confidence >= 0.8)
|
|
257
|
+
2. Best practice (confidence >= 0.7)
|
|
258
|
+
3. Moderate learned experience (confidence >= 0.6)
|
|
259
|
+
4. Best practice fallback
|
|
260
|
+
5. Default
|
|
261
|
+
|
|
262
|
+
Args:
|
|
263
|
+
learned_confidence: Confidence from learned experience
|
|
264
|
+
best_practice_confidence: Confidence from best practices
|
|
265
|
+
learned_value: Value from learned experience
|
|
266
|
+
best_practice_value: Value from best practices
|
|
267
|
+
default_value: Default value
|
|
268
|
+
decision_type: Type of decision
|
|
269
|
+
|
|
270
|
+
Returns:
|
|
271
|
+
DecisionResult with chosen value and reasoning
|
|
272
|
+
"""
|
|
273
|
+
# Priority 1: High confidence learned experience
|
|
274
|
+
if learned_confidence >= self.LEARNED_HIGH_CONFIDENCE:
|
|
275
|
+
return DecisionResult(
|
|
276
|
+
value=learned_value,
|
|
277
|
+
source=DecisionSource.LEARNED_EXPERIENCE,
|
|
278
|
+
confidence=learned_confidence,
|
|
279
|
+
reasoning=(
|
|
280
|
+
f"High confidence from learned experience "
|
|
281
|
+
f"(confidence={learned_confidence:.3f})"
|
|
282
|
+
),
|
|
283
|
+
should_proceed=True,
|
|
284
|
+
learned_confidence=learned_confidence,
|
|
285
|
+
best_practice_confidence=best_practice_confidence,
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
# Priority 2: High confidence best practice
|
|
289
|
+
if (
|
|
290
|
+
best_practice_confidence is not None
|
|
291
|
+
and best_practice_confidence >= self.BEST_PRACTICE_HIGH_CONFIDENCE
|
|
292
|
+
):
|
|
293
|
+
return DecisionResult(
|
|
294
|
+
value=best_practice_value,
|
|
295
|
+
source=DecisionSource.BEST_PRACTICE,
|
|
296
|
+
confidence=best_practice_confidence,
|
|
297
|
+
reasoning=(
|
|
298
|
+
f"High confidence from best practices "
|
|
299
|
+
f"(confidence={best_practice_confidence:.3f})"
|
|
300
|
+
),
|
|
301
|
+
should_proceed=True,
|
|
302
|
+
learned_confidence=learned_confidence,
|
|
303
|
+
best_practice_confidence=best_practice_confidence,
|
|
304
|
+
)
|
|
305
|
+
|
|
306
|
+
# Priority 3: Moderate learned experience
|
|
307
|
+
if learned_confidence >= self.LEARNED_MODERATE_CONFIDENCE:
|
|
308
|
+
return DecisionResult(
|
|
309
|
+
value=learned_value,
|
|
310
|
+
source=DecisionSource.LEARNED_EXPERIENCE,
|
|
311
|
+
confidence=learned_confidence,
|
|
312
|
+
reasoning=(
|
|
313
|
+
f"Moderate confidence from learned experience "
|
|
314
|
+
f"(confidence={learned_confidence:.3f})"
|
|
315
|
+
),
|
|
316
|
+
should_proceed=learned_confidence >= self.MIN_PROCEED_CONFIDENCE,
|
|
317
|
+
learned_confidence=learned_confidence,
|
|
318
|
+
best_practice_confidence=best_practice_confidence,
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
# Priority 4: Best practice fallback
|
|
322
|
+
if best_practice_confidence is not None:
|
|
323
|
+
return DecisionResult(
|
|
324
|
+
value=best_practice_value,
|
|
325
|
+
source=DecisionSource.BEST_PRACTICE,
|
|
326
|
+
confidence=best_practice_confidence,
|
|
327
|
+
reasoning=(
|
|
328
|
+
f"Using best practice as fallback "
|
|
329
|
+
f"(confidence={best_practice_confidence:.3f}, "
|
|
330
|
+
f"learned_confidence={learned_confidence:.3f})"
|
|
331
|
+
),
|
|
332
|
+
should_proceed=best_practice_confidence >= self.MIN_PROCEED_CONFIDENCE,
|
|
333
|
+
learned_confidence=learned_confidence,
|
|
334
|
+
best_practice_confidence=best_practice_confidence,
|
|
335
|
+
)
|
|
336
|
+
|
|
337
|
+
# Priority 5: Default
|
|
338
|
+
return DecisionResult(
|
|
339
|
+
value=default_value,
|
|
340
|
+
source=DecisionSource.DEFAULT,
|
|
341
|
+
confidence=self.DEFAULT_CONFIDENCE,
|
|
342
|
+
reasoning=(
|
|
343
|
+
f"No sufficient confidence from either source "
|
|
344
|
+
f"(learned={learned_confidence:.3f}, "
|
|
345
|
+
f"best_practice={best_practice_confidence})"
|
|
346
|
+
),
|
|
347
|
+
should_proceed=False,
|
|
348
|
+
learned_confidence=learned_confidence,
|
|
349
|
+
best_practice_confidence=best_practice_confidence,
|
|
350
|
+
)
|
|
351
|
+
|
|
352
|
+
def get_decision_statistics(self) -> dict[str, Any]:
|
|
353
|
+
"""
|
|
354
|
+
Get decision statistics.
|
|
355
|
+
|
|
356
|
+
Returns:
|
|
357
|
+
Dictionary with decision statistics
|
|
358
|
+
"""
|
|
359
|
+
stats: dict[str, Any] = {
|
|
360
|
+
"total_decisions": self._decision_count,
|
|
361
|
+
"by_type": {},
|
|
362
|
+
"by_source": {},
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
# Count by type and source
|
|
366
|
+
for decision_type, results in self._decision_metrics.items():
|
|
367
|
+
stats["by_type"][decision_type] = len(results)
|
|
368
|
+
|
|
369
|
+
for result in results:
|
|
370
|
+
source = result.source.value
|
|
371
|
+
stats["by_source"][source] = stats["by_source"].get(source, 0) + 1
|
|
372
|
+
|
|
373
|
+
return stats
|
|
374
|
+
|
|
375
|
+
def get_cache_statistics(self) -> dict[str, Any] | None:
|
|
376
|
+
"""
|
|
377
|
+
Get cache statistics from best practice consultant.
|
|
378
|
+
|
|
379
|
+
Returns:
|
|
380
|
+
Cache statistics if consultant available, None otherwise
|
|
381
|
+
"""
|
|
382
|
+
if self.best_practice_consultant:
|
|
383
|
+
return self.best_practice_consultant.get_cache_statistics()
|
|
384
|
+
return None
|