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,666 +1,666 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Meta-Learning System
|
|
3
|
-
|
|
4
|
-
Enables the learning system to learn about its own learning effectiveness
|
|
5
|
-
and optimize learning parameters autonomously.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
import logging
|
|
9
|
-
from dataclasses import dataclass, field
|
|
10
|
-
from datetime import UTC, datetime, timedelta
|
|
11
|
-
from enum import Enum
|
|
12
|
-
from typing import Any
|
|
13
|
-
from uuid import uuid4
|
|
14
|
-
|
|
15
|
-
logger = logging.getLogger(__name__)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class LearningStrategy(Enum):
|
|
19
|
-
"""Learning strategy types."""
|
|
20
|
-
|
|
21
|
-
CONSERVATIVE = "conservative" # High thresholds, slow learning
|
|
22
|
-
BALANCED = "balanced" # Medium thresholds, moderate learning
|
|
23
|
-
AGGRESSIVE = "aggressive" # Low thresholds, fast learning
|
|
24
|
-
ADAPTIVE = "adaptive" # Dynamic based on effectiveness
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
@dataclass
|
|
28
|
-
class LearningSession:
|
|
29
|
-
"""Represents a learning session."""
|
|
30
|
-
|
|
31
|
-
session_id: str
|
|
32
|
-
timestamp: datetime
|
|
33
|
-
capability_id: str
|
|
34
|
-
before_metrics: dict[str, float]
|
|
35
|
-
after_metrics: dict[str, float]
|
|
36
|
-
improvement_percent: float
|
|
37
|
-
strategies_used: list[str]
|
|
38
|
-
effectiveness_score: float
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
class LearningEffectivenessTracker:
|
|
42
|
-
"""Tracks learning effectiveness over time."""
|
|
43
|
-
|
|
44
|
-
def __init__(self):
|
|
45
|
-
"""Initialize effectiveness tracker."""
|
|
46
|
-
self.sessions: list[LearningSession] = []
|
|
47
|
-
self.max_sessions: int = 1000 # Limit to prevent memory issues
|
|
48
|
-
|
|
49
|
-
def track_effectiveness(
|
|
50
|
-
self,
|
|
51
|
-
capability_id: str,
|
|
52
|
-
before_metrics: dict[str, float],
|
|
53
|
-
after_metrics: dict[str, float],
|
|
54
|
-
strategies_used: list[str] | None = None,
|
|
55
|
-
) -> LearningSession:
|
|
56
|
-
"""
|
|
57
|
-
Track learning session effectiveness.
|
|
58
|
-
|
|
59
|
-
Args:
|
|
60
|
-
capability_id: Capability identifier
|
|
61
|
-
before_metrics: Metrics before learning
|
|
62
|
-
after_metrics: Metrics after learning
|
|
63
|
-
strategies_used: Optional list of strategies used
|
|
64
|
-
|
|
65
|
-
Returns:
|
|
66
|
-
LearningSession instance
|
|
67
|
-
"""
|
|
68
|
-
# Calculate improvement
|
|
69
|
-
improvements = {}
|
|
70
|
-
for metric, after_value in after_metrics.items():
|
|
71
|
-
before_value = before_metrics.get(metric, 0.0)
|
|
72
|
-
if before_value > 0:
|
|
73
|
-
improvement = ((after_value - before_value) / before_value) * 100
|
|
74
|
-
else:
|
|
75
|
-
improvement = 100.0 if after_value > 0 else 0.0
|
|
76
|
-
improvements[metric] = improvement
|
|
77
|
-
|
|
78
|
-
# Average improvement percent
|
|
79
|
-
improvement_percent = (
|
|
80
|
-
sum(improvements.values()) / len(improvements) if improvements else 0.0
|
|
81
|
-
)
|
|
82
|
-
|
|
83
|
-
# Calculate effectiveness score (0.0-1.0)
|
|
84
|
-
effectiveness_score = min(1.0, max(0.0, improvement_percent / 100.0))
|
|
85
|
-
|
|
86
|
-
session = LearningSession(
|
|
87
|
-
session_id=str(uuid4()),
|
|
88
|
-
timestamp=datetime.now(UTC),
|
|
89
|
-
capability_id=capability_id,
|
|
90
|
-
before_metrics=before_metrics.copy(),
|
|
91
|
-
after_metrics=after_metrics.copy(),
|
|
92
|
-
improvement_percent=improvement_percent,
|
|
93
|
-
strategies_used=strategies_used or [],
|
|
94
|
-
effectiveness_score=effectiveness_score,
|
|
95
|
-
)
|
|
96
|
-
|
|
97
|
-
self.sessions.append(session)
|
|
98
|
-
|
|
99
|
-
# Limit session count
|
|
100
|
-
if len(self.sessions) > self.max_sessions:
|
|
101
|
-
self.sessions = self.sessions[-self.max_sessions :]
|
|
102
|
-
|
|
103
|
-
logger.debug(
|
|
104
|
-
f"Tracked learning session {session.session_id}: "
|
|
105
|
-
f"effectiveness={effectiveness_score:.2f}"
|
|
106
|
-
)
|
|
107
|
-
|
|
108
|
-
return session
|
|
109
|
-
|
|
110
|
-
def calculate_improvement_rate(
|
|
111
|
-
self, capability_id: str | None = None, days: int = 30
|
|
112
|
-
) -> dict[str, Any]:
|
|
113
|
-
"""
|
|
114
|
-
Calculate improvement rate over time.
|
|
115
|
-
|
|
116
|
-
Args:
|
|
117
|
-
capability_id: Optional filter by capability
|
|
118
|
-
days: Number of days to look back
|
|
119
|
-
|
|
120
|
-
Returns:
|
|
121
|
-
Improvement rate metrics
|
|
122
|
-
"""
|
|
123
|
-
sessions = self.sessions
|
|
124
|
-
if capability_id:
|
|
125
|
-
sessions = [s for s in sessions if s.capability_id == capability_id]
|
|
126
|
-
|
|
127
|
-
# Filter by time
|
|
128
|
-
cutoff_date = datetime.now(UTC) - timedelta(days=days)
|
|
129
|
-
sessions = [s for s in sessions if s.timestamp >= cutoff_date]
|
|
130
|
-
|
|
131
|
-
if not sessions:
|
|
132
|
-
return {
|
|
133
|
-
"sessions_count": 0,
|
|
134
|
-
"average_improvement": 0.0,
|
|
135
|
-
"improvement_rate": 0.0,
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
total_improvement = sum(s.improvement_percent for s in sessions)
|
|
139
|
-
average_improvement = total_improvement / len(sessions)
|
|
140
|
-
|
|
141
|
-
# Calculate rate (improvement per session)
|
|
142
|
-
improvement_rate = average_improvement
|
|
143
|
-
|
|
144
|
-
return {
|
|
145
|
-
"sessions_count": len(sessions),
|
|
146
|
-
"average_improvement": average_improvement,
|
|
147
|
-
"improvement_rate": improvement_rate,
|
|
148
|
-
"period_days": days,
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
def get_effective_strategies(
|
|
152
|
-
self, capability_id: str | None = None
|
|
153
|
-
) -> dict[str, float]:
|
|
154
|
-
"""
|
|
155
|
-
Identify effective learning strategies.
|
|
156
|
-
|
|
157
|
-
Args:
|
|
158
|
-
capability_id: Optional filter by capability
|
|
159
|
-
|
|
160
|
-
Returns:
|
|
161
|
-
Dictionary mapping strategy to effectiveness score
|
|
162
|
-
"""
|
|
163
|
-
sessions = self.sessions
|
|
164
|
-
if capability_id:
|
|
165
|
-
sessions = [s for s in sessions if s.capability_id == capability_id]
|
|
166
|
-
|
|
167
|
-
strategy_effectiveness: dict[str, list[float]] = {}
|
|
168
|
-
for session in sessions:
|
|
169
|
-
for strategy in session.strategies_used:
|
|
170
|
-
if strategy not in strategy_effectiveness:
|
|
171
|
-
strategy_effectiveness[strategy] = []
|
|
172
|
-
strategy_effectiveness[strategy].append(session.effectiveness_score)
|
|
173
|
-
|
|
174
|
-
# Calculate average effectiveness per strategy
|
|
175
|
-
result = {}
|
|
176
|
-
for strategy, scores in strategy_effectiveness.items():
|
|
177
|
-
result[strategy] = sum(scores) / len(scores) if scores else 0.0
|
|
178
|
-
|
|
179
|
-
return result
|
|
180
|
-
|
|
181
|
-
def get_learning_roi(
|
|
182
|
-
self, capability_id: str | None = None
|
|
183
|
-
) -> dict[str, Any]:
|
|
184
|
-
"""
|
|
185
|
-
Calculate return on learning investment.
|
|
186
|
-
|
|
187
|
-
Args:
|
|
188
|
-
capability_id: Optional filter by capability
|
|
189
|
-
|
|
190
|
-
Returns:
|
|
191
|
-
ROI metrics
|
|
192
|
-
"""
|
|
193
|
-
sessions = self.sessions
|
|
194
|
-
if capability_id:
|
|
195
|
-
sessions = [s for s in sessions if s.capability_id == capability_id]
|
|
196
|
-
|
|
197
|
-
if not sessions:
|
|
198
|
-
return {
|
|
199
|
-
"total_sessions": 0,
|
|
200
|
-
"total_improvement": 0.0,
|
|
201
|
-
"roi_score": 0.0,
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
total_improvement = sum(s.improvement_percent for s in sessions)
|
|
205
|
-
average_effectiveness = sum(s.effectiveness_score for s in sessions) / len(
|
|
206
|
-
sessions
|
|
207
|
-
)
|
|
208
|
-
|
|
209
|
-
# ROI = average effectiveness * number of sessions
|
|
210
|
-
roi_score = average_effectiveness * len(sessions)
|
|
211
|
-
|
|
212
|
-
return {
|
|
213
|
-
"total_sessions": len(sessions),
|
|
214
|
-
"total_improvement": total_improvement,
|
|
215
|
-
"average_effectiveness": average_effectiveness,
|
|
216
|
-
"roi_score": roi_score,
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
class LearningSelfAssessor:
|
|
221
|
-
"""Assesses learning quality and identifies gaps."""
|
|
222
|
-
|
|
223
|
-
def __init__(self):
|
|
224
|
-
"""Initialize self-assessor."""
|
|
225
|
-
self.assessments: list[dict[str, Any]] = []
|
|
226
|
-
|
|
227
|
-
def assess_learning_quality(
|
|
228
|
-
self,
|
|
229
|
-
pattern_count: int,
|
|
230
|
-
anti_pattern_count: int,
|
|
231
|
-
average_quality: float,
|
|
232
|
-
average_security: float,
|
|
233
|
-
) -> dict[str, Any]:
|
|
234
|
-
"""
|
|
235
|
-
Assess overall learning quality.
|
|
236
|
-
|
|
237
|
-
Args:
|
|
238
|
-
pattern_count: Number of learned patterns
|
|
239
|
-
anti_pattern_count: Number of anti-patterns
|
|
240
|
-
average_quality: Average pattern quality score
|
|
241
|
-
average_security: Average pattern security score
|
|
242
|
-
|
|
243
|
-
Returns:
|
|
244
|
-
Quality assessment dictionary
|
|
245
|
-
"""
|
|
246
|
-
quality_score = 0.0
|
|
247
|
-
|
|
248
|
-
# Pattern diversity (more patterns = better, but not too many)
|
|
249
|
-
if pattern_count > 0:
|
|
250
|
-
diversity_score = min(1.0, pattern_count / 100.0) # Normalize to 0-1
|
|
251
|
-
quality_score += diversity_score * 0.2
|
|
252
|
-
|
|
253
|
-
# Quality score
|
|
254
|
-
quality_score += average_quality * 0.4
|
|
255
|
-
|
|
256
|
-
# Security score
|
|
257
|
-
quality_score += (average_security / 10.0) * 0.3
|
|
258
|
-
|
|
259
|
-
# Anti-pattern awareness (having anti-patterns is good for learning)
|
|
260
|
-
if anti_pattern_count > 0:
|
|
261
|
-
awareness_score = min(1.0, anti_pattern_count / 50.0)
|
|
262
|
-
quality_score += awareness_score * 0.1
|
|
263
|
-
|
|
264
|
-
quality_score = min(1.0, quality_score)
|
|
265
|
-
|
|
266
|
-
assessment = {
|
|
267
|
-
"quality_score": quality_score,
|
|
268
|
-
"pattern_count": pattern_count,
|
|
269
|
-
"anti_pattern_count": anti_pattern_count,
|
|
270
|
-
"average_quality": average_quality,
|
|
271
|
-
"average_security": average_security,
|
|
272
|
-
"timestamp": datetime.now(UTC).isoformat(),
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
self.assessments.append(assessment)
|
|
276
|
-
return assessment
|
|
277
|
-
|
|
278
|
-
def evaluate_pattern_quality(
|
|
279
|
-
self, patterns: list[Any] # CodePattern
|
|
280
|
-
) -> dict[str, Any]:
|
|
281
|
-
"""
|
|
282
|
-
Evaluate pattern library quality.
|
|
283
|
-
|
|
284
|
-
Args:
|
|
285
|
-
patterns: List of patterns to evaluate
|
|
286
|
-
|
|
287
|
-
Returns:
|
|
288
|
-
Quality evaluation dictionary
|
|
289
|
-
"""
|
|
290
|
-
if not patterns:
|
|
291
|
-
return {
|
|
292
|
-
"total_patterns": 0,
|
|
293
|
-
"average_quality": 0.0,
|
|
294
|
-
"average_security": 0.0,
|
|
295
|
-
"quality_score": 0.0,
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
total_quality = sum(p.quality_score for p in patterns)
|
|
299
|
-
total_security = sum(getattr(p, "security_score", 0.0) for p in patterns)
|
|
300
|
-
|
|
301
|
-
average_quality = total_quality / len(patterns)
|
|
302
|
-
average_security = total_security / len(patterns)
|
|
303
|
-
|
|
304
|
-
# Quality score combines quality and security
|
|
305
|
-
quality_score = (average_quality + (average_security / 10.0)) / 2.0
|
|
306
|
-
|
|
307
|
-
return {
|
|
308
|
-
"total_patterns": len(patterns),
|
|
309
|
-
"average_quality": average_quality,
|
|
310
|
-
"average_security": average_security,
|
|
311
|
-
"quality_score": quality_score,
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
def identify_learning_gaps(
|
|
315
|
-
self,
|
|
316
|
-
capability_metrics: dict[str, Any],
|
|
317
|
-
pattern_statistics: dict[str, Any],
|
|
318
|
-
) -> list[str]:
|
|
319
|
-
"""
|
|
320
|
-
Identify areas needing improvement.
|
|
321
|
-
|
|
322
|
-
Args:
|
|
323
|
-
capability_metrics: Capability performance metrics
|
|
324
|
-
pattern_statistics: Pattern library statistics
|
|
325
|
-
|
|
326
|
-
Returns:
|
|
327
|
-
List of identified gaps
|
|
328
|
-
"""
|
|
329
|
-
gaps = []
|
|
330
|
-
|
|
331
|
-
# Check pattern coverage
|
|
332
|
-
pattern_count = pattern_statistics.get("total_patterns", 0)
|
|
333
|
-
if pattern_count < 10:
|
|
334
|
-
gaps.append("Low pattern coverage - need more learned patterns")
|
|
335
|
-
|
|
336
|
-
# Check quality
|
|
337
|
-
avg_quality = pattern_statistics.get("average_quality", 0.0)
|
|
338
|
-
if avg_quality < 0.7:
|
|
339
|
-
gaps.append("Low average pattern quality - improve code quality")
|
|
340
|
-
|
|
341
|
-
# Check security
|
|
342
|
-
avg_security = pattern_statistics.get("average_security", 0.0)
|
|
343
|
-
if avg_security < 7.0:
|
|
344
|
-
gaps.append("Low average security score - improve security practices")
|
|
345
|
-
|
|
346
|
-
# Check capability performance
|
|
347
|
-
if isinstance(capability_metrics, dict):
|
|
348
|
-
success_rate = capability_metrics.get("success_rate", 1.0)
|
|
349
|
-
if success_rate < 0.8:
|
|
350
|
-
gaps.append("Low success rate - improve task execution")
|
|
351
|
-
|
|
352
|
-
return gaps
|
|
353
|
-
|
|
354
|
-
def suggest_improvements(
|
|
355
|
-
self, assessment: dict[str, Any]
|
|
356
|
-
) -> list[str]:
|
|
357
|
-
"""
|
|
358
|
-
Suggest how to improve learning.
|
|
359
|
-
|
|
360
|
-
Args:
|
|
361
|
-
assessment: Quality assessment dictionary
|
|
362
|
-
|
|
363
|
-
Returns:
|
|
364
|
-
List of improvement suggestions
|
|
365
|
-
"""
|
|
366
|
-
suggestions = []
|
|
367
|
-
|
|
368
|
-
quality_score = assessment.get("quality_score", 0.0)
|
|
369
|
-
if quality_score < 0.7:
|
|
370
|
-
suggestions.append(
|
|
371
|
-
"Increase learning intensity to capture more patterns"
|
|
372
|
-
)
|
|
373
|
-
suggestions.append("Focus on high-quality code examples")
|
|
374
|
-
|
|
375
|
-
pattern_count = assessment.get("pattern_count", 0)
|
|
376
|
-
if pattern_count < 20:
|
|
377
|
-
suggestions.append("Learn from more successful tasks")
|
|
378
|
-
|
|
379
|
-
avg_security = assessment.get("average_security", 0.0)
|
|
380
|
-
if avg_security < 7.0:
|
|
381
|
-
suggestions.append("Improve security scanning and filtering")
|
|
382
|
-
|
|
383
|
-
return suggestions
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
class AdaptiveLearningRate:
|
|
387
|
-
"""Adjusts learning intensity based on effectiveness."""
|
|
388
|
-
|
|
389
|
-
def __init__(self, base_rate: float = 0.7):
|
|
390
|
-
"""
|
|
391
|
-
Initialize adaptive learning rate.
|
|
392
|
-
|
|
393
|
-
Args:
|
|
394
|
-
base_rate: Base learning rate (default: 0.7)
|
|
395
|
-
"""
|
|
396
|
-
self.base_rate = base_rate
|
|
397
|
-
self.current_rate = base_rate
|
|
398
|
-
self.effectiveness_history: list[float] = []
|
|
399
|
-
|
|
400
|
-
def calculate_optimal_rate(
|
|
401
|
-
self, recent_effectiveness: list[float]
|
|
402
|
-
) -> float:
|
|
403
|
-
"""
|
|
404
|
-
Calculate optimal learning rate based on effectiveness.
|
|
405
|
-
|
|
406
|
-
Args:
|
|
407
|
-
recent_effectiveness: List of recent effectiveness scores
|
|
408
|
-
|
|
409
|
-
Returns:
|
|
410
|
-
Optimal learning rate (0.0-1.0)
|
|
411
|
-
"""
|
|
412
|
-
if not recent_effectiveness:
|
|
413
|
-
return self.base_rate
|
|
414
|
-
|
|
415
|
-
avg_effectiveness = sum(recent_effectiveness) / len(recent_effectiveness)
|
|
416
|
-
|
|
417
|
-
# If effectiveness is high, increase rate
|
|
418
|
-
# If effectiveness is low, decrease rate
|
|
419
|
-
if avg_effectiveness > 0.8:
|
|
420
|
-
# High effectiveness - can be more aggressive
|
|
421
|
-
optimal_rate = min(1.0, self.base_rate + 0.2)
|
|
422
|
-
elif avg_effectiveness > 0.6:
|
|
423
|
-
# Good effectiveness - maintain current rate
|
|
424
|
-
optimal_rate = self.base_rate
|
|
425
|
-
elif avg_effectiveness > 0.4:
|
|
426
|
-
# Moderate effectiveness - slightly reduce
|
|
427
|
-
optimal_rate = max(0.5, self.base_rate - 0.1)
|
|
428
|
-
else:
|
|
429
|
-
# Low effectiveness - be conservative
|
|
430
|
-
optimal_rate = max(0.3, self.base_rate - 0.3)
|
|
431
|
-
|
|
432
|
-
self.current_rate = optimal_rate
|
|
433
|
-
return optimal_rate
|
|
434
|
-
|
|
435
|
-
def adjust_learning_intensity(
|
|
436
|
-
self, effectiveness_score: float
|
|
437
|
-
) -> dict[str, Any]:
|
|
438
|
-
"""
|
|
439
|
-
Adjust learning intensity dynamically.
|
|
440
|
-
|
|
441
|
-
Args:
|
|
442
|
-
effectiveness_score: Current effectiveness score
|
|
443
|
-
|
|
444
|
-
Returns:
|
|
445
|
-
Adjustment result dictionary
|
|
446
|
-
"""
|
|
447
|
-
self.effectiveness_history.append(effectiveness_score)
|
|
448
|
-
|
|
449
|
-
# Keep only recent history (last 10)
|
|
450
|
-
if len(self.effectiveness_history) > 10:
|
|
451
|
-
self.effectiveness_history = self.effectiveness_history[-10:]
|
|
452
|
-
|
|
453
|
-
# Calculate optimal rate
|
|
454
|
-
optimal_rate = self.calculate_optimal_rate(self.effectiveness_history)
|
|
455
|
-
|
|
456
|
-
return {
|
|
457
|
-
"previous_rate": self.current_rate,
|
|
458
|
-
"new_rate": optimal_rate,
|
|
459
|
-
"effectiveness": effectiveness_score,
|
|
460
|
-
"adjustment": optimal_rate - self.current_rate,
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
def optimize_thresholds(
|
|
464
|
-
self,
|
|
465
|
-
current_threshold: float,
|
|
466
|
-
success_rate: float,
|
|
467
|
-
quality_score: float,
|
|
468
|
-
) -> float:
|
|
469
|
-
"""
|
|
470
|
-
Optimize quality thresholds based on performance.
|
|
471
|
-
|
|
472
|
-
Args:
|
|
473
|
-
current_threshold: Current quality threshold
|
|
474
|
-
success_rate: Current success rate
|
|
475
|
-
quality_score: Current quality score
|
|
476
|
-
|
|
477
|
-
Returns:
|
|
478
|
-
Optimized threshold
|
|
479
|
-
"""
|
|
480
|
-
# If success rate is high and quality is good, can lower threshold slightly
|
|
481
|
-
if success_rate > 0.9 and quality_score > 0.8:
|
|
482
|
-
return max(0.6, current_threshold - 0.05)
|
|
483
|
-
|
|
484
|
-
# If success rate is low, raise threshold
|
|
485
|
-
if success_rate < 0.7:
|
|
486
|
-
return min(0.9, current_threshold + 0.05)
|
|
487
|
-
|
|
488
|
-
# Otherwise, maintain current threshold
|
|
489
|
-
return current_threshold
|
|
490
|
-
|
|
491
|
-
def balance_exploration(
|
|
492
|
-
self, exploration_rate: float = 0.1
|
|
493
|
-
) -> dict[str, float]:
|
|
494
|
-
"""
|
|
495
|
-
Balance exploration vs exploitation.
|
|
496
|
-
|
|
497
|
-
Args:
|
|
498
|
-
exploration_rate: Desired exploration rate
|
|
499
|
-
|
|
500
|
-
Returns:
|
|
501
|
-
Balanced rates dictionary
|
|
502
|
-
"""
|
|
503
|
-
# Adjust based on current effectiveness
|
|
504
|
-
if self.effectiveness_history:
|
|
505
|
-
avg_effectiveness = sum(self.effectiveness_history) / len(
|
|
506
|
-
self.effectiveness_history
|
|
507
|
-
)
|
|
508
|
-
|
|
509
|
-
# High effectiveness = more exploitation
|
|
510
|
-
# Low effectiveness = more exploration
|
|
511
|
-
if avg_effectiveness > 0.7:
|
|
512
|
-
exploration_rate = max(0.05, exploration_rate - 0.02)
|
|
513
|
-
elif avg_effectiveness < 0.5:
|
|
514
|
-
exploration_rate = min(0.2, exploration_rate + 0.02)
|
|
515
|
-
|
|
516
|
-
return {
|
|
517
|
-
"exploration_rate": exploration_rate,
|
|
518
|
-
"exploitation_rate": 1.0 - exploration_rate,
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
class LearningStrategySelector:
|
|
523
|
-
"""Selects optimal learning strategy."""
|
|
524
|
-
|
|
525
|
-
def __init__(self):
|
|
526
|
-
"""Initialize strategy selector."""
|
|
527
|
-
self.strategy_performance: dict[str, list[float]] = {}
|
|
528
|
-
|
|
529
|
-
def select_strategy(
|
|
530
|
-
self,
|
|
531
|
-
capability_id: str,
|
|
532
|
-
current_effectiveness: float,
|
|
533
|
-
hardware_profile: str | None = None,
|
|
534
|
-
) -> LearningStrategy:
|
|
535
|
-
"""
|
|
536
|
-
Select best strategy for context.
|
|
537
|
-
|
|
538
|
-
Args:
|
|
539
|
-
capability_id: Capability identifier
|
|
540
|
-
current_effectiveness: Current learning effectiveness
|
|
541
|
-
hardware_profile: Optional hardware profile
|
|
542
|
-
|
|
543
|
-
Returns:
|
|
544
|
-
Selected learning strategy
|
|
545
|
-
"""
|
|
546
|
-
# If effectiveness is high, can be more aggressive
|
|
547
|
-
if current_effectiveness > 0.8:
|
|
548
|
-
return LearningStrategy.AGGRESSIVE
|
|
549
|
-
|
|
550
|
-
# If effectiveness is moderate, use balanced
|
|
551
|
-
if current_effectiveness > 0.6:
|
|
552
|
-
return LearningStrategy.BALANCED
|
|
553
|
-
|
|
554
|
-
# If effectiveness is low or hardware is constrained, be conservative
|
|
555
|
-
if hardware_profile == "nuc" or current_effectiveness < 0.4:
|
|
556
|
-
return LearningStrategy.CONSERVATIVE
|
|
557
|
-
|
|
558
|
-
# Default to adaptive
|
|
559
|
-
return LearningStrategy.ADAPTIVE
|
|
560
|
-
|
|
561
|
-
def test_strategy(
|
|
562
|
-
self, strategy: LearningStrategy, effectiveness: float
|
|
563
|
-
) -> dict[str, Any]:
|
|
564
|
-
"""
|
|
565
|
-
Test strategy effectiveness.
|
|
566
|
-
|
|
567
|
-
Args:
|
|
568
|
-
strategy: Strategy to test
|
|
569
|
-
effectiveness: Effectiveness score
|
|
570
|
-
|
|
571
|
-
Returns:
|
|
572
|
-
Test result dictionary
|
|
573
|
-
"""
|
|
574
|
-
strategy_name = strategy.value
|
|
575
|
-
if strategy_name not in self.strategy_performance:
|
|
576
|
-
self.strategy_performance[strategy_name] = []
|
|
577
|
-
|
|
578
|
-
self.strategy_performance[strategy_name].append(effectiveness)
|
|
579
|
-
|
|
580
|
-
# Keep only recent performance (last 20)
|
|
581
|
-
if len(self.strategy_performance[strategy_name]) > 20:
|
|
582
|
-
self.strategy_performance[strategy_name] = self.strategy_performance[
|
|
583
|
-
strategy_name
|
|
584
|
-
][-20:]
|
|
585
|
-
|
|
586
|
-
avg_effectiveness = (
|
|
587
|
-
sum(self.strategy_performance[strategy_name])
|
|
588
|
-
/ len(self.strategy_performance[strategy_name])
|
|
589
|
-
if self.strategy_performance[strategy_name]
|
|
590
|
-
else 0.0
|
|
591
|
-
)
|
|
592
|
-
|
|
593
|
-
return {
|
|
594
|
-
"strategy": strategy_name,
|
|
595
|
-
"effectiveness": effectiveness,
|
|
596
|
-
"average_effectiveness": avg_effectiveness,
|
|
597
|
-
"test_count": len(self.strategy_performance[strategy_name]),
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
def switch_strategy(
|
|
601
|
-
self,
|
|
602
|
-
current_strategy: LearningStrategy,
|
|
603
|
-
new_strategy: LearningStrategy,
|
|
604
|
-
) -> dict[str, Any]:
|
|
605
|
-
"""
|
|
606
|
-
Switch to a better strategy.
|
|
607
|
-
|
|
608
|
-
Args:
|
|
609
|
-
current_strategy: Current strategy
|
|
610
|
-
new_strategy: New strategy to switch to
|
|
611
|
-
|
|
612
|
-
Returns:
|
|
613
|
-
Switch result dictionary
|
|
614
|
-
"""
|
|
615
|
-
current_perf = self.strategy_performance.get(current_strategy.value, [])
|
|
616
|
-
new_perf = self.strategy_performance.get(new_strategy.value, [])
|
|
617
|
-
|
|
618
|
-
current_avg = (
|
|
619
|
-
sum(current_perf) / len(current_perf) if current_perf else 0.0
|
|
620
|
-
)
|
|
621
|
-
new_avg = sum(new_perf) / len(new_perf) if new_perf else 0.0
|
|
622
|
-
|
|
623
|
-
return {
|
|
624
|
-
"switched": new_avg > current_avg,
|
|
625
|
-
"current_strategy": current_strategy.value,
|
|
626
|
-
"new_strategy": new_strategy.value,
|
|
627
|
-
"current_avg": current_avg,
|
|
628
|
-
"new_avg": new_avg,
|
|
629
|
-
}
|
|
630
|
-
|
|
631
|
-
def optimize_strategy(
|
|
632
|
-
self, strategy: LearningStrategy, parameters: dict[str, Any]
|
|
633
|
-
) -> dict[str, Any]:
|
|
634
|
-
"""
|
|
635
|
-
Optimize strategy parameters.
|
|
636
|
-
|
|
637
|
-
Args:
|
|
638
|
-
strategy: Strategy to optimize
|
|
639
|
-
parameters: Current parameters
|
|
640
|
-
|
|
641
|
-
Returns:
|
|
642
|
-
Optimized parameters
|
|
643
|
-
"""
|
|
644
|
-
# Simple optimization - adjust thresholds based on strategy
|
|
645
|
-
optimized = parameters.copy()
|
|
646
|
-
|
|
647
|
-
if strategy == LearningStrategy.CONSERVATIVE:
|
|
648
|
-
optimized["quality_threshold"] = max(
|
|
649
|
-
0.8, parameters.get("quality_threshold", 0.7)
|
|
650
|
-
)
|
|
651
|
-
optimized["security_threshold"] = max(
|
|
652
|
-
8.0, parameters.get("security_threshold", 7.0)
|
|
653
|
-
)
|
|
654
|
-
elif strategy == LearningStrategy.AGGRESSIVE:
|
|
655
|
-
optimized["quality_threshold"] = min(
|
|
656
|
-
0.6, parameters.get("quality_threshold", 0.7)
|
|
657
|
-
)
|
|
658
|
-
optimized["security_threshold"] = min(
|
|
659
|
-
6.0, parameters.get("security_threshold", 7.0)
|
|
660
|
-
)
|
|
661
|
-
elif strategy == LearningStrategy.BALANCED:
|
|
662
|
-
optimized["quality_threshold"] = 0.7
|
|
663
|
-
optimized["security_threshold"] = 7.0
|
|
664
|
-
|
|
665
|
-
return optimized
|
|
666
|
-
|
|
1
|
+
"""
|
|
2
|
+
Meta-Learning System
|
|
3
|
+
|
|
4
|
+
Enables the learning system to learn about its own learning effectiveness
|
|
5
|
+
and optimize learning parameters autonomously.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import logging
|
|
9
|
+
from dataclasses import dataclass, field
|
|
10
|
+
from datetime import UTC, datetime, timedelta
|
|
11
|
+
from enum import Enum
|
|
12
|
+
from typing import Any
|
|
13
|
+
from uuid import uuid4
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class LearningStrategy(Enum):
|
|
19
|
+
"""Learning strategy types."""
|
|
20
|
+
|
|
21
|
+
CONSERVATIVE = "conservative" # High thresholds, slow learning
|
|
22
|
+
BALANCED = "balanced" # Medium thresholds, moderate learning
|
|
23
|
+
AGGRESSIVE = "aggressive" # Low thresholds, fast learning
|
|
24
|
+
ADAPTIVE = "adaptive" # Dynamic based on effectiveness
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@dataclass
|
|
28
|
+
class LearningSession:
|
|
29
|
+
"""Represents a learning session."""
|
|
30
|
+
|
|
31
|
+
session_id: str
|
|
32
|
+
timestamp: datetime
|
|
33
|
+
capability_id: str
|
|
34
|
+
before_metrics: dict[str, float]
|
|
35
|
+
after_metrics: dict[str, float]
|
|
36
|
+
improvement_percent: float
|
|
37
|
+
strategies_used: list[str]
|
|
38
|
+
effectiveness_score: float
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class LearningEffectivenessTracker:
|
|
42
|
+
"""Tracks learning effectiveness over time."""
|
|
43
|
+
|
|
44
|
+
def __init__(self):
|
|
45
|
+
"""Initialize effectiveness tracker."""
|
|
46
|
+
self.sessions: list[LearningSession] = []
|
|
47
|
+
self.max_sessions: int = 1000 # Limit to prevent memory issues
|
|
48
|
+
|
|
49
|
+
def track_effectiveness(
|
|
50
|
+
self,
|
|
51
|
+
capability_id: str,
|
|
52
|
+
before_metrics: dict[str, float],
|
|
53
|
+
after_metrics: dict[str, float],
|
|
54
|
+
strategies_used: list[str] | None = None,
|
|
55
|
+
) -> LearningSession:
|
|
56
|
+
"""
|
|
57
|
+
Track learning session effectiveness.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
capability_id: Capability identifier
|
|
61
|
+
before_metrics: Metrics before learning
|
|
62
|
+
after_metrics: Metrics after learning
|
|
63
|
+
strategies_used: Optional list of strategies used
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
LearningSession instance
|
|
67
|
+
"""
|
|
68
|
+
# Calculate improvement
|
|
69
|
+
improvements = {}
|
|
70
|
+
for metric, after_value in after_metrics.items():
|
|
71
|
+
before_value = before_metrics.get(metric, 0.0)
|
|
72
|
+
if before_value > 0:
|
|
73
|
+
improvement = ((after_value - before_value) / before_value) * 100
|
|
74
|
+
else:
|
|
75
|
+
improvement = 100.0 if after_value > 0 else 0.0
|
|
76
|
+
improvements[metric] = improvement
|
|
77
|
+
|
|
78
|
+
# Average improvement percent
|
|
79
|
+
improvement_percent = (
|
|
80
|
+
sum(improvements.values()) / len(improvements) if improvements else 0.0
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
# Calculate effectiveness score (0.0-1.0)
|
|
84
|
+
effectiveness_score = min(1.0, max(0.0, improvement_percent / 100.0))
|
|
85
|
+
|
|
86
|
+
session = LearningSession(
|
|
87
|
+
session_id=str(uuid4()),
|
|
88
|
+
timestamp=datetime.now(UTC),
|
|
89
|
+
capability_id=capability_id,
|
|
90
|
+
before_metrics=before_metrics.copy(),
|
|
91
|
+
after_metrics=after_metrics.copy(),
|
|
92
|
+
improvement_percent=improvement_percent,
|
|
93
|
+
strategies_used=strategies_used or [],
|
|
94
|
+
effectiveness_score=effectiveness_score,
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
self.sessions.append(session)
|
|
98
|
+
|
|
99
|
+
# Limit session count
|
|
100
|
+
if len(self.sessions) > self.max_sessions:
|
|
101
|
+
self.sessions = self.sessions[-self.max_sessions :]
|
|
102
|
+
|
|
103
|
+
logger.debug(
|
|
104
|
+
f"Tracked learning session {session.session_id}: "
|
|
105
|
+
f"effectiveness={effectiveness_score:.2f}"
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
return session
|
|
109
|
+
|
|
110
|
+
def calculate_improvement_rate(
|
|
111
|
+
self, capability_id: str | None = None, days: int = 30
|
|
112
|
+
) -> dict[str, Any]:
|
|
113
|
+
"""
|
|
114
|
+
Calculate improvement rate over time.
|
|
115
|
+
|
|
116
|
+
Args:
|
|
117
|
+
capability_id: Optional filter by capability
|
|
118
|
+
days: Number of days to look back
|
|
119
|
+
|
|
120
|
+
Returns:
|
|
121
|
+
Improvement rate metrics
|
|
122
|
+
"""
|
|
123
|
+
sessions = self.sessions
|
|
124
|
+
if capability_id:
|
|
125
|
+
sessions = [s for s in sessions if s.capability_id == capability_id]
|
|
126
|
+
|
|
127
|
+
# Filter by time
|
|
128
|
+
cutoff_date = datetime.now(UTC) - timedelta(days=days)
|
|
129
|
+
sessions = [s for s in sessions if s.timestamp >= cutoff_date]
|
|
130
|
+
|
|
131
|
+
if not sessions:
|
|
132
|
+
return {
|
|
133
|
+
"sessions_count": 0,
|
|
134
|
+
"average_improvement": 0.0,
|
|
135
|
+
"improvement_rate": 0.0,
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
total_improvement = sum(s.improvement_percent for s in sessions)
|
|
139
|
+
average_improvement = total_improvement / len(sessions)
|
|
140
|
+
|
|
141
|
+
# Calculate rate (improvement per session)
|
|
142
|
+
improvement_rate = average_improvement
|
|
143
|
+
|
|
144
|
+
return {
|
|
145
|
+
"sessions_count": len(sessions),
|
|
146
|
+
"average_improvement": average_improvement,
|
|
147
|
+
"improvement_rate": improvement_rate,
|
|
148
|
+
"period_days": days,
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
def get_effective_strategies(
|
|
152
|
+
self, capability_id: str | None = None
|
|
153
|
+
) -> dict[str, float]:
|
|
154
|
+
"""
|
|
155
|
+
Identify effective learning strategies.
|
|
156
|
+
|
|
157
|
+
Args:
|
|
158
|
+
capability_id: Optional filter by capability
|
|
159
|
+
|
|
160
|
+
Returns:
|
|
161
|
+
Dictionary mapping strategy to effectiveness score
|
|
162
|
+
"""
|
|
163
|
+
sessions = self.sessions
|
|
164
|
+
if capability_id:
|
|
165
|
+
sessions = [s for s in sessions if s.capability_id == capability_id]
|
|
166
|
+
|
|
167
|
+
strategy_effectiveness: dict[str, list[float]] = {}
|
|
168
|
+
for session in sessions:
|
|
169
|
+
for strategy in session.strategies_used:
|
|
170
|
+
if strategy not in strategy_effectiveness:
|
|
171
|
+
strategy_effectiveness[strategy] = []
|
|
172
|
+
strategy_effectiveness[strategy].append(session.effectiveness_score)
|
|
173
|
+
|
|
174
|
+
# Calculate average effectiveness per strategy
|
|
175
|
+
result = {}
|
|
176
|
+
for strategy, scores in strategy_effectiveness.items():
|
|
177
|
+
result[strategy] = sum(scores) / len(scores) if scores else 0.0
|
|
178
|
+
|
|
179
|
+
return result
|
|
180
|
+
|
|
181
|
+
def get_learning_roi(
|
|
182
|
+
self, capability_id: str | None = None
|
|
183
|
+
) -> dict[str, Any]:
|
|
184
|
+
"""
|
|
185
|
+
Calculate return on learning investment.
|
|
186
|
+
|
|
187
|
+
Args:
|
|
188
|
+
capability_id: Optional filter by capability
|
|
189
|
+
|
|
190
|
+
Returns:
|
|
191
|
+
ROI metrics
|
|
192
|
+
"""
|
|
193
|
+
sessions = self.sessions
|
|
194
|
+
if capability_id:
|
|
195
|
+
sessions = [s for s in sessions if s.capability_id == capability_id]
|
|
196
|
+
|
|
197
|
+
if not sessions:
|
|
198
|
+
return {
|
|
199
|
+
"total_sessions": 0,
|
|
200
|
+
"total_improvement": 0.0,
|
|
201
|
+
"roi_score": 0.0,
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
total_improvement = sum(s.improvement_percent for s in sessions)
|
|
205
|
+
average_effectiveness = sum(s.effectiveness_score for s in sessions) / len(
|
|
206
|
+
sessions
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
# ROI = average effectiveness * number of sessions
|
|
210
|
+
roi_score = average_effectiveness * len(sessions)
|
|
211
|
+
|
|
212
|
+
return {
|
|
213
|
+
"total_sessions": len(sessions),
|
|
214
|
+
"total_improvement": total_improvement,
|
|
215
|
+
"average_effectiveness": average_effectiveness,
|
|
216
|
+
"roi_score": roi_score,
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
class LearningSelfAssessor:
|
|
221
|
+
"""Assesses learning quality and identifies gaps."""
|
|
222
|
+
|
|
223
|
+
def __init__(self):
|
|
224
|
+
"""Initialize self-assessor."""
|
|
225
|
+
self.assessments: list[dict[str, Any]] = []
|
|
226
|
+
|
|
227
|
+
def assess_learning_quality(
|
|
228
|
+
self,
|
|
229
|
+
pattern_count: int,
|
|
230
|
+
anti_pattern_count: int,
|
|
231
|
+
average_quality: float,
|
|
232
|
+
average_security: float,
|
|
233
|
+
) -> dict[str, Any]:
|
|
234
|
+
"""
|
|
235
|
+
Assess overall learning quality.
|
|
236
|
+
|
|
237
|
+
Args:
|
|
238
|
+
pattern_count: Number of learned patterns
|
|
239
|
+
anti_pattern_count: Number of anti-patterns
|
|
240
|
+
average_quality: Average pattern quality score
|
|
241
|
+
average_security: Average pattern security score
|
|
242
|
+
|
|
243
|
+
Returns:
|
|
244
|
+
Quality assessment dictionary
|
|
245
|
+
"""
|
|
246
|
+
quality_score = 0.0
|
|
247
|
+
|
|
248
|
+
# Pattern diversity (more patterns = better, but not too many)
|
|
249
|
+
if pattern_count > 0:
|
|
250
|
+
diversity_score = min(1.0, pattern_count / 100.0) # Normalize to 0-1
|
|
251
|
+
quality_score += diversity_score * 0.2
|
|
252
|
+
|
|
253
|
+
# Quality score
|
|
254
|
+
quality_score += average_quality * 0.4
|
|
255
|
+
|
|
256
|
+
# Security score
|
|
257
|
+
quality_score += (average_security / 10.0) * 0.3
|
|
258
|
+
|
|
259
|
+
# Anti-pattern awareness (having anti-patterns is good for learning)
|
|
260
|
+
if anti_pattern_count > 0:
|
|
261
|
+
awareness_score = min(1.0, anti_pattern_count / 50.0)
|
|
262
|
+
quality_score += awareness_score * 0.1
|
|
263
|
+
|
|
264
|
+
quality_score = min(1.0, quality_score)
|
|
265
|
+
|
|
266
|
+
assessment = {
|
|
267
|
+
"quality_score": quality_score,
|
|
268
|
+
"pattern_count": pattern_count,
|
|
269
|
+
"anti_pattern_count": anti_pattern_count,
|
|
270
|
+
"average_quality": average_quality,
|
|
271
|
+
"average_security": average_security,
|
|
272
|
+
"timestamp": datetime.now(UTC).isoformat(),
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
self.assessments.append(assessment)
|
|
276
|
+
return assessment
|
|
277
|
+
|
|
278
|
+
def evaluate_pattern_quality(
|
|
279
|
+
self, patterns: list[Any] # CodePattern
|
|
280
|
+
) -> dict[str, Any]:
|
|
281
|
+
"""
|
|
282
|
+
Evaluate pattern library quality.
|
|
283
|
+
|
|
284
|
+
Args:
|
|
285
|
+
patterns: List of patterns to evaluate
|
|
286
|
+
|
|
287
|
+
Returns:
|
|
288
|
+
Quality evaluation dictionary
|
|
289
|
+
"""
|
|
290
|
+
if not patterns:
|
|
291
|
+
return {
|
|
292
|
+
"total_patterns": 0,
|
|
293
|
+
"average_quality": 0.0,
|
|
294
|
+
"average_security": 0.0,
|
|
295
|
+
"quality_score": 0.0,
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
total_quality = sum(p.quality_score for p in patterns)
|
|
299
|
+
total_security = sum(getattr(p, "security_score", 0.0) for p in patterns)
|
|
300
|
+
|
|
301
|
+
average_quality = total_quality / len(patterns)
|
|
302
|
+
average_security = total_security / len(patterns)
|
|
303
|
+
|
|
304
|
+
# Quality score combines quality and security
|
|
305
|
+
quality_score = (average_quality + (average_security / 10.0)) / 2.0
|
|
306
|
+
|
|
307
|
+
return {
|
|
308
|
+
"total_patterns": len(patterns),
|
|
309
|
+
"average_quality": average_quality,
|
|
310
|
+
"average_security": average_security,
|
|
311
|
+
"quality_score": quality_score,
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
def identify_learning_gaps(
|
|
315
|
+
self,
|
|
316
|
+
capability_metrics: dict[str, Any],
|
|
317
|
+
pattern_statistics: dict[str, Any],
|
|
318
|
+
) -> list[str]:
|
|
319
|
+
"""
|
|
320
|
+
Identify areas needing improvement.
|
|
321
|
+
|
|
322
|
+
Args:
|
|
323
|
+
capability_metrics: Capability performance metrics
|
|
324
|
+
pattern_statistics: Pattern library statistics
|
|
325
|
+
|
|
326
|
+
Returns:
|
|
327
|
+
List of identified gaps
|
|
328
|
+
"""
|
|
329
|
+
gaps = []
|
|
330
|
+
|
|
331
|
+
# Check pattern coverage
|
|
332
|
+
pattern_count = pattern_statistics.get("total_patterns", 0)
|
|
333
|
+
if pattern_count < 10:
|
|
334
|
+
gaps.append("Low pattern coverage - need more learned patterns")
|
|
335
|
+
|
|
336
|
+
# Check quality
|
|
337
|
+
avg_quality = pattern_statistics.get("average_quality", 0.0)
|
|
338
|
+
if avg_quality < 0.7:
|
|
339
|
+
gaps.append("Low average pattern quality - improve code quality")
|
|
340
|
+
|
|
341
|
+
# Check security
|
|
342
|
+
avg_security = pattern_statistics.get("average_security", 0.0)
|
|
343
|
+
if avg_security < 7.0:
|
|
344
|
+
gaps.append("Low average security score - improve security practices")
|
|
345
|
+
|
|
346
|
+
# Check capability performance
|
|
347
|
+
if isinstance(capability_metrics, dict):
|
|
348
|
+
success_rate = capability_metrics.get("success_rate", 1.0)
|
|
349
|
+
if success_rate < 0.8:
|
|
350
|
+
gaps.append("Low success rate - improve task execution")
|
|
351
|
+
|
|
352
|
+
return gaps
|
|
353
|
+
|
|
354
|
+
def suggest_improvements(
|
|
355
|
+
self, assessment: dict[str, Any]
|
|
356
|
+
) -> list[str]:
|
|
357
|
+
"""
|
|
358
|
+
Suggest how to improve learning.
|
|
359
|
+
|
|
360
|
+
Args:
|
|
361
|
+
assessment: Quality assessment dictionary
|
|
362
|
+
|
|
363
|
+
Returns:
|
|
364
|
+
List of improvement suggestions
|
|
365
|
+
"""
|
|
366
|
+
suggestions = []
|
|
367
|
+
|
|
368
|
+
quality_score = assessment.get("quality_score", 0.0)
|
|
369
|
+
if quality_score < 0.7:
|
|
370
|
+
suggestions.append(
|
|
371
|
+
"Increase learning intensity to capture more patterns"
|
|
372
|
+
)
|
|
373
|
+
suggestions.append("Focus on high-quality code examples")
|
|
374
|
+
|
|
375
|
+
pattern_count = assessment.get("pattern_count", 0)
|
|
376
|
+
if pattern_count < 20:
|
|
377
|
+
suggestions.append("Learn from more successful tasks")
|
|
378
|
+
|
|
379
|
+
avg_security = assessment.get("average_security", 0.0)
|
|
380
|
+
if avg_security < 7.0:
|
|
381
|
+
suggestions.append("Improve security scanning and filtering")
|
|
382
|
+
|
|
383
|
+
return suggestions
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
class AdaptiveLearningRate:
|
|
387
|
+
"""Adjusts learning intensity based on effectiveness."""
|
|
388
|
+
|
|
389
|
+
def __init__(self, base_rate: float = 0.7):
|
|
390
|
+
"""
|
|
391
|
+
Initialize adaptive learning rate.
|
|
392
|
+
|
|
393
|
+
Args:
|
|
394
|
+
base_rate: Base learning rate (default: 0.7)
|
|
395
|
+
"""
|
|
396
|
+
self.base_rate = base_rate
|
|
397
|
+
self.current_rate = base_rate
|
|
398
|
+
self.effectiveness_history: list[float] = []
|
|
399
|
+
|
|
400
|
+
def calculate_optimal_rate(
|
|
401
|
+
self, recent_effectiveness: list[float]
|
|
402
|
+
) -> float:
|
|
403
|
+
"""
|
|
404
|
+
Calculate optimal learning rate based on effectiveness.
|
|
405
|
+
|
|
406
|
+
Args:
|
|
407
|
+
recent_effectiveness: List of recent effectiveness scores
|
|
408
|
+
|
|
409
|
+
Returns:
|
|
410
|
+
Optimal learning rate (0.0-1.0)
|
|
411
|
+
"""
|
|
412
|
+
if not recent_effectiveness:
|
|
413
|
+
return self.base_rate
|
|
414
|
+
|
|
415
|
+
avg_effectiveness = sum(recent_effectiveness) / len(recent_effectiveness)
|
|
416
|
+
|
|
417
|
+
# If effectiveness is high, increase rate
|
|
418
|
+
# If effectiveness is low, decrease rate
|
|
419
|
+
if avg_effectiveness > 0.8:
|
|
420
|
+
# High effectiveness - can be more aggressive
|
|
421
|
+
optimal_rate = min(1.0, self.base_rate + 0.2)
|
|
422
|
+
elif avg_effectiveness > 0.6:
|
|
423
|
+
# Good effectiveness - maintain current rate
|
|
424
|
+
optimal_rate = self.base_rate
|
|
425
|
+
elif avg_effectiveness > 0.4:
|
|
426
|
+
# Moderate effectiveness - slightly reduce
|
|
427
|
+
optimal_rate = max(0.5, self.base_rate - 0.1)
|
|
428
|
+
else:
|
|
429
|
+
# Low effectiveness - be conservative
|
|
430
|
+
optimal_rate = max(0.3, self.base_rate - 0.3)
|
|
431
|
+
|
|
432
|
+
self.current_rate = optimal_rate
|
|
433
|
+
return optimal_rate
|
|
434
|
+
|
|
435
|
+
def adjust_learning_intensity(
|
|
436
|
+
self, effectiveness_score: float
|
|
437
|
+
) -> dict[str, Any]:
|
|
438
|
+
"""
|
|
439
|
+
Adjust learning intensity dynamically.
|
|
440
|
+
|
|
441
|
+
Args:
|
|
442
|
+
effectiveness_score: Current effectiveness score
|
|
443
|
+
|
|
444
|
+
Returns:
|
|
445
|
+
Adjustment result dictionary
|
|
446
|
+
"""
|
|
447
|
+
self.effectiveness_history.append(effectiveness_score)
|
|
448
|
+
|
|
449
|
+
# Keep only recent history (last 10)
|
|
450
|
+
if len(self.effectiveness_history) > 10:
|
|
451
|
+
self.effectiveness_history = self.effectiveness_history[-10:]
|
|
452
|
+
|
|
453
|
+
# Calculate optimal rate
|
|
454
|
+
optimal_rate = self.calculate_optimal_rate(self.effectiveness_history)
|
|
455
|
+
|
|
456
|
+
return {
|
|
457
|
+
"previous_rate": self.current_rate,
|
|
458
|
+
"new_rate": optimal_rate,
|
|
459
|
+
"effectiveness": effectiveness_score,
|
|
460
|
+
"adjustment": optimal_rate - self.current_rate,
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
def optimize_thresholds(
|
|
464
|
+
self,
|
|
465
|
+
current_threshold: float,
|
|
466
|
+
success_rate: float,
|
|
467
|
+
quality_score: float,
|
|
468
|
+
) -> float:
|
|
469
|
+
"""
|
|
470
|
+
Optimize quality thresholds based on performance.
|
|
471
|
+
|
|
472
|
+
Args:
|
|
473
|
+
current_threshold: Current quality threshold
|
|
474
|
+
success_rate: Current success rate
|
|
475
|
+
quality_score: Current quality score
|
|
476
|
+
|
|
477
|
+
Returns:
|
|
478
|
+
Optimized threshold
|
|
479
|
+
"""
|
|
480
|
+
# If success rate is high and quality is good, can lower threshold slightly
|
|
481
|
+
if success_rate > 0.9 and quality_score > 0.8:
|
|
482
|
+
return max(0.6, current_threshold - 0.05)
|
|
483
|
+
|
|
484
|
+
# If success rate is low, raise threshold
|
|
485
|
+
if success_rate < 0.7:
|
|
486
|
+
return min(0.9, current_threshold + 0.05)
|
|
487
|
+
|
|
488
|
+
# Otherwise, maintain current threshold
|
|
489
|
+
return current_threshold
|
|
490
|
+
|
|
491
|
+
def balance_exploration(
|
|
492
|
+
self, exploration_rate: float = 0.1
|
|
493
|
+
) -> dict[str, float]:
|
|
494
|
+
"""
|
|
495
|
+
Balance exploration vs exploitation.
|
|
496
|
+
|
|
497
|
+
Args:
|
|
498
|
+
exploration_rate: Desired exploration rate
|
|
499
|
+
|
|
500
|
+
Returns:
|
|
501
|
+
Balanced rates dictionary
|
|
502
|
+
"""
|
|
503
|
+
# Adjust based on current effectiveness
|
|
504
|
+
if self.effectiveness_history:
|
|
505
|
+
avg_effectiveness = sum(self.effectiveness_history) / len(
|
|
506
|
+
self.effectiveness_history
|
|
507
|
+
)
|
|
508
|
+
|
|
509
|
+
# High effectiveness = more exploitation
|
|
510
|
+
# Low effectiveness = more exploration
|
|
511
|
+
if avg_effectiveness > 0.7:
|
|
512
|
+
exploration_rate = max(0.05, exploration_rate - 0.02)
|
|
513
|
+
elif avg_effectiveness < 0.5:
|
|
514
|
+
exploration_rate = min(0.2, exploration_rate + 0.02)
|
|
515
|
+
|
|
516
|
+
return {
|
|
517
|
+
"exploration_rate": exploration_rate,
|
|
518
|
+
"exploitation_rate": 1.0 - exploration_rate,
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
class LearningStrategySelector:
|
|
523
|
+
"""Selects optimal learning strategy."""
|
|
524
|
+
|
|
525
|
+
def __init__(self):
|
|
526
|
+
"""Initialize strategy selector."""
|
|
527
|
+
self.strategy_performance: dict[str, list[float]] = {}
|
|
528
|
+
|
|
529
|
+
def select_strategy(
|
|
530
|
+
self,
|
|
531
|
+
capability_id: str,
|
|
532
|
+
current_effectiveness: float,
|
|
533
|
+
hardware_profile: str | None = None,
|
|
534
|
+
) -> LearningStrategy:
|
|
535
|
+
"""
|
|
536
|
+
Select best strategy for context.
|
|
537
|
+
|
|
538
|
+
Args:
|
|
539
|
+
capability_id: Capability identifier
|
|
540
|
+
current_effectiveness: Current learning effectiveness
|
|
541
|
+
hardware_profile: Optional hardware profile
|
|
542
|
+
|
|
543
|
+
Returns:
|
|
544
|
+
Selected learning strategy
|
|
545
|
+
"""
|
|
546
|
+
# If effectiveness is high, can be more aggressive
|
|
547
|
+
if current_effectiveness > 0.8:
|
|
548
|
+
return LearningStrategy.AGGRESSIVE
|
|
549
|
+
|
|
550
|
+
# If effectiveness is moderate, use balanced
|
|
551
|
+
if current_effectiveness > 0.6:
|
|
552
|
+
return LearningStrategy.BALANCED
|
|
553
|
+
|
|
554
|
+
# If effectiveness is low or hardware is constrained, be conservative
|
|
555
|
+
if hardware_profile == "nuc" or current_effectiveness < 0.4:
|
|
556
|
+
return LearningStrategy.CONSERVATIVE
|
|
557
|
+
|
|
558
|
+
# Default to adaptive
|
|
559
|
+
return LearningStrategy.ADAPTIVE
|
|
560
|
+
|
|
561
|
+
def test_strategy(
|
|
562
|
+
self, strategy: LearningStrategy, effectiveness: float
|
|
563
|
+
) -> dict[str, Any]:
|
|
564
|
+
"""
|
|
565
|
+
Test strategy effectiveness.
|
|
566
|
+
|
|
567
|
+
Args:
|
|
568
|
+
strategy: Strategy to test
|
|
569
|
+
effectiveness: Effectiveness score
|
|
570
|
+
|
|
571
|
+
Returns:
|
|
572
|
+
Test result dictionary
|
|
573
|
+
"""
|
|
574
|
+
strategy_name = strategy.value
|
|
575
|
+
if strategy_name not in self.strategy_performance:
|
|
576
|
+
self.strategy_performance[strategy_name] = []
|
|
577
|
+
|
|
578
|
+
self.strategy_performance[strategy_name].append(effectiveness)
|
|
579
|
+
|
|
580
|
+
# Keep only recent performance (last 20)
|
|
581
|
+
if len(self.strategy_performance[strategy_name]) > 20:
|
|
582
|
+
self.strategy_performance[strategy_name] = self.strategy_performance[
|
|
583
|
+
strategy_name
|
|
584
|
+
][-20:]
|
|
585
|
+
|
|
586
|
+
avg_effectiveness = (
|
|
587
|
+
sum(self.strategy_performance[strategy_name])
|
|
588
|
+
/ len(self.strategy_performance[strategy_name])
|
|
589
|
+
if self.strategy_performance[strategy_name]
|
|
590
|
+
else 0.0
|
|
591
|
+
)
|
|
592
|
+
|
|
593
|
+
return {
|
|
594
|
+
"strategy": strategy_name,
|
|
595
|
+
"effectiveness": effectiveness,
|
|
596
|
+
"average_effectiveness": avg_effectiveness,
|
|
597
|
+
"test_count": len(self.strategy_performance[strategy_name]),
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
def switch_strategy(
|
|
601
|
+
self,
|
|
602
|
+
current_strategy: LearningStrategy,
|
|
603
|
+
new_strategy: LearningStrategy,
|
|
604
|
+
) -> dict[str, Any]:
|
|
605
|
+
"""
|
|
606
|
+
Switch to a better strategy.
|
|
607
|
+
|
|
608
|
+
Args:
|
|
609
|
+
current_strategy: Current strategy
|
|
610
|
+
new_strategy: New strategy to switch to
|
|
611
|
+
|
|
612
|
+
Returns:
|
|
613
|
+
Switch result dictionary
|
|
614
|
+
"""
|
|
615
|
+
current_perf = self.strategy_performance.get(current_strategy.value, [])
|
|
616
|
+
new_perf = self.strategy_performance.get(new_strategy.value, [])
|
|
617
|
+
|
|
618
|
+
current_avg = (
|
|
619
|
+
sum(current_perf) / len(current_perf) if current_perf else 0.0
|
|
620
|
+
)
|
|
621
|
+
new_avg = sum(new_perf) / len(new_perf) if new_perf else 0.0
|
|
622
|
+
|
|
623
|
+
return {
|
|
624
|
+
"switched": new_avg > current_avg,
|
|
625
|
+
"current_strategy": current_strategy.value,
|
|
626
|
+
"new_strategy": new_strategy.value,
|
|
627
|
+
"current_avg": current_avg,
|
|
628
|
+
"new_avg": new_avg,
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
def optimize_strategy(
|
|
632
|
+
self, strategy: LearningStrategy, parameters: dict[str, Any]
|
|
633
|
+
) -> dict[str, Any]:
|
|
634
|
+
"""
|
|
635
|
+
Optimize strategy parameters.
|
|
636
|
+
|
|
637
|
+
Args:
|
|
638
|
+
strategy: Strategy to optimize
|
|
639
|
+
parameters: Current parameters
|
|
640
|
+
|
|
641
|
+
Returns:
|
|
642
|
+
Optimized parameters
|
|
643
|
+
"""
|
|
644
|
+
# Simple optimization - adjust thresholds based on strategy
|
|
645
|
+
optimized = parameters.copy()
|
|
646
|
+
|
|
647
|
+
if strategy == LearningStrategy.CONSERVATIVE:
|
|
648
|
+
optimized["quality_threshold"] = max(
|
|
649
|
+
0.8, parameters.get("quality_threshold", 0.7)
|
|
650
|
+
)
|
|
651
|
+
optimized["security_threshold"] = max(
|
|
652
|
+
8.0, parameters.get("security_threshold", 7.0)
|
|
653
|
+
)
|
|
654
|
+
elif strategy == LearningStrategy.AGGRESSIVE:
|
|
655
|
+
optimized["quality_threshold"] = min(
|
|
656
|
+
0.6, parameters.get("quality_threshold", 0.7)
|
|
657
|
+
)
|
|
658
|
+
optimized["security_threshold"] = min(
|
|
659
|
+
6.0, parameters.get("security_threshold", 7.0)
|
|
660
|
+
)
|
|
661
|
+
elif strategy == LearningStrategy.BALANCED:
|
|
662
|
+
optimized["quality_threshold"] = 0.7
|
|
663
|
+
optimized["security_threshold"] = 7.0
|
|
664
|
+
|
|
665
|
+
return optimized
|
|
666
|
+
|