tapps-agents 3.5.40__py3-none-any.whl → 3.6.0__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/scoring.py +1566 -1566
- tapps_agents/agents/reviewer/service_discovery.py +534 -534
- tapps_agents/agents/reviewer/tools/__init__.py +41 -41
- 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/health.py +665 -665
- 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 -219
- tapps_agents/cli/commands/tester.py +191 -191
- tapps_agents/cli/commands/top_level.py +3586 -3586
- 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/artifact_context_builder.py +293 -0
- 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/config.py +33 -0
- 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.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/orchestrator.py +271 -271
- 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/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/base.py +185 -185
- 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/build_orchestrator.py +2700 -2667
- 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/fix_orchestrator.py +723 -723
- 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_executor.py +2337 -2196
- 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/message_formatter.py +188 -188
- 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 -111
- 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.5.40.dist-info → tapps_agents-3.6.0.dist-info}/METADATA +672 -672
- tapps_agents-3.6.0.dist-info/RECORD +758 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/licenses/LICENSE +22 -22
- tapps_agents/health/checks/outcomes.backup_20260204_064058.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064256.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064600.py +0 -324
- tapps_agents-3.5.40.dist-info/RECORD +0 -760
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/WHEEL +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/entry_points.txt +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/top_level.txt +0 -0
|
@@ -1,418 +1,418 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Agent Capability Registry
|
|
3
|
-
|
|
4
|
-
Tracks agent capabilities and their performance metrics for self-improvement.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from __future__ import annotations
|
|
8
|
-
|
|
9
|
-
import gzip
|
|
10
|
-
import json
|
|
11
|
-
import logging
|
|
12
|
-
from dataclasses import asdict, dataclass, field
|
|
13
|
-
from datetime import UTC, datetime
|
|
14
|
-
from enum import Enum
|
|
15
|
-
from pathlib import Path
|
|
16
|
-
from typing import Any
|
|
17
|
-
|
|
18
|
-
from .hardware_profiler import HardwareProfile, HardwareProfiler
|
|
19
|
-
|
|
20
|
-
logger = logging.getLogger(__name__)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class LearningIntensity(Enum):
|
|
24
|
-
"""Learning intensity levels based on hardware."""
|
|
25
|
-
|
|
26
|
-
LOW = "low" # Minimal learning, essential patterns only
|
|
27
|
-
MEDIUM = "medium" # Balanced learning
|
|
28
|
-
HIGH = "high" # Aggressive learning
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
@dataclass
|
|
32
|
-
class RefinementRecord:
|
|
33
|
-
"""Record of a capability refinement."""
|
|
34
|
-
|
|
35
|
-
timestamp: datetime
|
|
36
|
-
improvement_type: str # "prompt_optimization", "pattern_learning", "feedback_loop"
|
|
37
|
-
before_metric: dict[str, Any] # Snapshot of metrics before
|
|
38
|
-
after_metric: dict[str, Any] # Snapshot of metrics after
|
|
39
|
-
improvement_percent: float
|
|
40
|
-
learned_patterns: list[str] = field(default_factory=list)
|
|
41
|
-
metadata: dict[str, Any] = field(default_factory=dict)
|
|
42
|
-
|
|
43
|
-
def to_dict(self) -> dict[str, Any]:
|
|
44
|
-
"""Convert to dictionary."""
|
|
45
|
-
data = asdict(self)
|
|
46
|
-
data["timestamp"] = self.timestamp.isoformat()
|
|
47
|
-
return data
|
|
48
|
-
|
|
49
|
-
@classmethod
|
|
50
|
-
def from_dict(cls, data: dict[str, Any]) -> RefinementRecord:
|
|
51
|
-
"""Create from dictionary."""
|
|
52
|
-
data = data.copy()
|
|
53
|
-
data["timestamp"] = datetime.fromisoformat(data["timestamp"])
|
|
54
|
-
return cls(**data)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
@dataclass
|
|
58
|
-
class CapabilityMetric:
|
|
59
|
-
"""Tracks performance metrics for a capability."""
|
|
60
|
-
|
|
61
|
-
capability_id: str
|
|
62
|
-
agent_id: str
|
|
63
|
-
success_rate: float # 0.0 to 1.0
|
|
64
|
-
average_duration: float # seconds
|
|
65
|
-
quality_score: float # 0.0 to 1.0 (from code scoring system)
|
|
66
|
-
usage_count: int
|
|
67
|
-
last_improved: datetime | None = None
|
|
68
|
-
refinement_history: list[RefinementRecord] = field(default_factory=list)
|
|
69
|
-
metadata: dict[str, Any] = field(default_factory=dict)
|
|
70
|
-
|
|
71
|
-
def to_dict(self) -> dict[str, Any]:
|
|
72
|
-
"""Convert to dictionary."""
|
|
73
|
-
data = asdict(self)
|
|
74
|
-
if self.last_improved:
|
|
75
|
-
data["last_improved"] = self.last_improved.isoformat()
|
|
76
|
-
else:
|
|
77
|
-
data["last_improved"] = None
|
|
78
|
-
data["refinement_history"] = [r.to_dict() for r in self.refinement_history]
|
|
79
|
-
return data
|
|
80
|
-
|
|
81
|
-
@classmethod
|
|
82
|
-
def from_dict(cls, data: dict[str, Any]) -> CapabilityMetric:
|
|
83
|
-
"""Create from dictionary."""
|
|
84
|
-
data = data.copy()
|
|
85
|
-
if data.get("last_improved"):
|
|
86
|
-
data["last_improved"] = datetime.fromisoformat(data["last_improved"])
|
|
87
|
-
else:
|
|
88
|
-
data["last_improved"] = None
|
|
89
|
-
data["refinement_history"] = [
|
|
90
|
-
RefinementRecord.from_dict(r) for r in data.get("refinement_history", [])
|
|
91
|
-
]
|
|
92
|
-
return cls(**data)
|
|
93
|
-
|
|
94
|
-
def update_metrics(
|
|
95
|
-
self, success: bool, duration: float, quality_score: float | None = None
|
|
96
|
-
):
|
|
97
|
-
"""
|
|
98
|
-
Update metrics with new task result.
|
|
99
|
-
|
|
100
|
-
Args:
|
|
101
|
-
success: Whether task succeeded
|
|
102
|
-
duration: Task duration in seconds
|
|
103
|
-
quality_score: Optional quality score (0.0 to 1.0)
|
|
104
|
-
"""
|
|
105
|
-
# Update success rate (exponential moving average)
|
|
106
|
-
alpha = 0.1 # Smoothing factor
|
|
107
|
-
self.success_rate = (
|
|
108
|
-
alpha * (1.0 if success else 0.0) + (1 - alpha) * self.success_rate
|
|
109
|
-
)
|
|
110
|
-
|
|
111
|
-
# Update average duration (exponential moving average)
|
|
112
|
-
self.average_duration = alpha * duration + (1 - alpha) * self.average_duration
|
|
113
|
-
|
|
114
|
-
# Update quality score if provided
|
|
115
|
-
if quality_score is not None:
|
|
116
|
-
self.quality_score = (
|
|
117
|
-
alpha * quality_score + (1 - alpha) * self.quality_score
|
|
118
|
-
)
|
|
119
|
-
|
|
120
|
-
# Increment usage count
|
|
121
|
-
self.usage_count += 1
|
|
122
|
-
|
|
123
|
-
def record_refinement(
|
|
124
|
-
self,
|
|
125
|
-
improvement_type: str,
|
|
126
|
-
improvement_percent: float,
|
|
127
|
-
learned_patterns: list[str] | None = None,
|
|
128
|
-
metadata: dict[str, Any] | None = None,
|
|
129
|
-
):
|
|
130
|
-
"""
|
|
131
|
-
Record a refinement to the capability.
|
|
132
|
-
|
|
133
|
-
Args:
|
|
134
|
-
improvement_type: Type of improvement
|
|
135
|
-
improvement_percent: Percentage improvement
|
|
136
|
-
learned_patterns: Optional learned patterns
|
|
137
|
-
metadata: Optional metadata
|
|
138
|
-
"""
|
|
139
|
-
before_metric = {
|
|
140
|
-
"success_rate": self.success_rate,
|
|
141
|
-
"average_duration": self.average_duration,
|
|
142
|
-
"quality_score": self.quality_score,
|
|
143
|
-
"usage_count": self.usage_count,
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
# Create refinement record
|
|
147
|
-
refinement = RefinementRecord(
|
|
148
|
-
timestamp=datetime.now(UTC),
|
|
149
|
-
improvement_type=improvement_type,
|
|
150
|
-
before_metric=before_metric,
|
|
151
|
-
after_metric=before_metric.copy(), # Will be updated after refinement
|
|
152
|
-
improvement_percent=improvement_percent,
|
|
153
|
-
learned_patterns=learned_patterns or [],
|
|
154
|
-
metadata=metadata or {},
|
|
155
|
-
)
|
|
156
|
-
|
|
157
|
-
self.refinement_history.append(refinement)
|
|
158
|
-
self.last_improved = datetime.now(UTC)
|
|
159
|
-
|
|
160
|
-
logger.info(
|
|
161
|
-
f"Recorded refinement for {self.capability_id}: "
|
|
162
|
-
f"{improvement_type} ({improvement_percent:.1f}% improvement)"
|
|
163
|
-
)
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
class CapabilityRegistry:
|
|
167
|
-
"""
|
|
168
|
-
Central registry for agent capabilities and their performance metrics.
|
|
169
|
-
|
|
170
|
-
Follows Hexagonal Architecture pattern (Ports and Adapters).
|
|
171
|
-
"""
|
|
172
|
-
|
|
173
|
-
def __init__(
|
|
174
|
-
self,
|
|
175
|
-
storage_dir: Path | None = None,
|
|
176
|
-
hardware_profile: HardwareProfile | None = None,
|
|
177
|
-
):
|
|
178
|
-
"""
|
|
179
|
-
Initialize capability registry.
|
|
180
|
-
|
|
181
|
-
Args:
|
|
182
|
-
storage_dir: Directory for metric storage (default: .tapps-agents/capabilities)
|
|
183
|
-
hardware_profile: Hardware profile (auto-detected if None)
|
|
184
|
-
"""
|
|
185
|
-
if storage_dir is None:
|
|
186
|
-
storage_dir = Path(".tapps-agents/capabilities")
|
|
187
|
-
|
|
188
|
-
self.storage_dir = Path(storage_dir)
|
|
189
|
-
self.storage_dir.mkdir(parents=True, exist_ok=True)
|
|
190
|
-
|
|
191
|
-
# Detect hardware profile if not provided
|
|
192
|
-
if hardware_profile is None:
|
|
193
|
-
profiler = HardwareProfiler()
|
|
194
|
-
hardware_profile = profiler.detect_profile()
|
|
195
|
-
|
|
196
|
-
self.hardware_profile = hardware_profile
|
|
197
|
-
self.compression_enabled = False # Hardware taxonomy removed
|
|
198
|
-
self.metrics_file = self.storage_dir / "capabilities.json"
|
|
199
|
-
|
|
200
|
-
# In-memory registry
|
|
201
|
-
self.metrics: dict[str, CapabilityMetric] = {}
|
|
202
|
-
self._load_metrics()
|
|
203
|
-
|
|
204
|
-
def _load_metrics(self):
|
|
205
|
-
"""Load metrics from storage."""
|
|
206
|
-
if not self.metrics_file.exists():
|
|
207
|
-
return
|
|
208
|
-
|
|
209
|
-
try:
|
|
210
|
-
if self.compression_enabled:
|
|
211
|
-
with gzip.open(self.metrics_file, "rt", encoding="utf-8") as f:
|
|
212
|
-
data = json.load(f)
|
|
213
|
-
else:
|
|
214
|
-
with open(self.metrics_file, encoding="utf-8") as f:
|
|
215
|
-
data = json.load(f)
|
|
216
|
-
|
|
217
|
-
for metric_data in data.get("metrics", []):
|
|
218
|
-
metric = CapabilityMetric.from_dict(metric_data)
|
|
219
|
-
self.metrics[metric.capability_id] = metric
|
|
220
|
-
|
|
221
|
-
logger.info(f"Loaded {len(self.metrics)} capability metrics")
|
|
222
|
-
except Exception as e:
|
|
223
|
-
logger.error(f"Failed to load metrics: {e}")
|
|
224
|
-
|
|
225
|
-
def _save_metrics(self):
|
|
226
|
-
"""Save metrics to storage."""
|
|
227
|
-
try:
|
|
228
|
-
data = {
|
|
229
|
-
"version": "1.0",
|
|
230
|
-
"hardware_profile": self.hardware_profile.value,
|
|
231
|
-
"metrics": [m.to_dict() for m in self.metrics.values()],
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
json_str = json.dumps(data, indent=2, default=str)
|
|
235
|
-
|
|
236
|
-
if self.compression_enabled:
|
|
237
|
-
with gzip.open(self.metrics_file, "wt", encoding="utf-8") as f:
|
|
238
|
-
f.write(json_str)
|
|
239
|
-
else:
|
|
240
|
-
with open(self.metrics_file, "w", encoding="utf-8") as f:
|
|
241
|
-
f.write(json_str)
|
|
242
|
-
|
|
243
|
-
logger.debug(f"Saved {len(self.metrics)} capability metrics")
|
|
244
|
-
except Exception as e:
|
|
245
|
-
logger.error(f"Failed to save metrics: {e}")
|
|
246
|
-
|
|
247
|
-
def register_capability(
|
|
248
|
-
self, capability_id: str, agent_id: str, initial_quality: float = 0.5
|
|
249
|
-
) -> CapabilityMetric:
|
|
250
|
-
"""
|
|
251
|
-
Register a new capability.
|
|
252
|
-
|
|
253
|
-
Args:
|
|
254
|
-
capability_id: Unique capability identifier
|
|
255
|
-
agent_id: Agent identifier
|
|
256
|
-
initial_quality: Initial quality score
|
|
257
|
-
|
|
258
|
-
Returns:
|
|
259
|
-
CapabilityMetric instance
|
|
260
|
-
"""
|
|
261
|
-
if capability_id not in self.metrics:
|
|
262
|
-
self.metrics[capability_id] = CapabilityMetric(
|
|
263
|
-
capability_id=capability_id,
|
|
264
|
-
agent_id=agent_id,
|
|
265
|
-
success_rate=0.5, # Initial neutral value
|
|
266
|
-
average_duration=0.0,
|
|
267
|
-
quality_score=initial_quality,
|
|
268
|
-
usage_count=0,
|
|
269
|
-
)
|
|
270
|
-
self._save_metrics()
|
|
271
|
-
logger.info(f"Registered capability: {capability_id} for agent {agent_id}")
|
|
272
|
-
|
|
273
|
-
return self.metrics[capability_id]
|
|
274
|
-
|
|
275
|
-
def get_capability(self, capability_id: str) -> CapabilityMetric | None:
|
|
276
|
-
"""
|
|
277
|
-
Get capability metric.
|
|
278
|
-
|
|
279
|
-
Args:
|
|
280
|
-
capability_id: Capability identifier
|
|
281
|
-
|
|
282
|
-
Returns:
|
|
283
|
-
CapabilityMetric if found, None otherwise
|
|
284
|
-
"""
|
|
285
|
-
return self.metrics.get(capability_id)
|
|
286
|
-
|
|
287
|
-
def get_agent_capabilities(self, agent_id: str) -> list[CapabilityMetric]:
|
|
288
|
-
"""
|
|
289
|
-
Get all capabilities for an agent.
|
|
290
|
-
|
|
291
|
-
Args:
|
|
292
|
-
agent_id: Agent identifier
|
|
293
|
-
|
|
294
|
-
Returns:
|
|
295
|
-
List of capability metrics
|
|
296
|
-
"""
|
|
297
|
-
return [m for m in self.metrics.values() if m.agent_id == agent_id]
|
|
298
|
-
|
|
299
|
-
def update_capability_metrics(
|
|
300
|
-
self,
|
|
301
|
-
capability_id: str,
|
|
302
|
-
success: bool,
|
|
303
|
-
duration: float,
|
|
304
|
-
quality_score: float | None = None,
|
|
305
|
-
):
|
|
306
|
-
"""
|
|
307
|
-
Update capability metrics after task execution.
|
|
308
|
-
|
|
309
|
-
Args:
|
|
310
|
-
capability_id: Capability identifier
|
|
311
|
-
success: Whether task succeeded
|
|
312
|
-
duration: Task duration in seconds
|
|
313
|
-
quality_score: Optional quality score
|
|
314
|
-
"""
|
|
315
|
-
if capability_id not in self.metrics:
|
|
316
|
-
logger.warning(
|
|
317
|
-
f"Capability {capability_id} not registered, creating default"
|
|
318
|
-
)
|
|
319
|
-
self.register_capability(
|
|
320
|
-
capability_id, "unknown", initial_quality=quality_score or 0.5
|
|
321
|
-
)
|
|
322
|
-
|
|
323
|
-
metric = self.metrics[capability_id]
|
|
324
|
-
metric.update_metrics(success, duration, quality_score)
|
|
325
|
-
self._save_metrics()
|
|
326
|
-
|
|
327
|
-
def record_refinement(
|
|
328
|
-
self,
|
|
329
|
-
capability_id: str,
|
|
330
|
-
improvement_type: str,
|
|
331
|
-
improvement_percent: float,
|
|
332
|
-
learned_patterns: list[str] | None = None,
|
|
333
|
-
metadata: dict[str, Any] | None = None,
|
|
334
|
-
):
|
|
335
|
-
"""
|
|
336
|
-
Record a capability refinement.
|
|
337
|
-
|
|
338
|
-
Args:
|
|
339
|
-
capability_id: Capability identifier
|
|
340
|
-
improvement_type: Type of improvement
|
|
341
|
-
improvement_percent: Percentage improvement
|
|
342
|
-
learned_patterns: Optional learned patterns
|
|
343
|
-
metadata: Optional metadata
|
|
344
|
-
"""
|
|
345
|
-
if capability_id not in self.metrics:
|
|
346
|
-
logger.warning(f"Capability {capability_id} not found for refinement")
|
|
347
|
-
return
|
|
348
|
-
|
|
349
|
-
metric = self.metrics[capability_id]
|
|
350
|
-
metric.record_refinement(
|
|
351
|
-
improvement_type=improvement_type,
|
|
352
|
-
improvement_percent=improvement_percent,
|
|
353
|
-
learned_patterns=learned_patterns,
|
|
354
|
-
metadata=metadata,
|
|
355
|
-
)
|
|
356
|
-
self._save_metrics()
|
|
357
|
-
|
|
358
|
-
def get_learning_intensity(self) -> LearningIntensity:
|
|
359
|
-
"""Learning intensity. Workstation-like default (hardware taxonomy removed)."""
|
|
360
|
-
return LearningIntensity.HIGH
|
|
361
|
-
|
|
362
|
-
def get_top_capabilities(
|
|
363
|
-
self,
|
|
364
|
-
agent_id: str | None = None,
|
|
365
|
-
limit: int = 10,
|
|
366
|
-
sort_by: str = "quality_score",
|
|
367
|
-
) -> list[CapabilityMetric]:
|
|
368
|
-
"""
|
|
369
|
-
Get top capabilities by metric.
|
|
370
|
-
|
|
371
|
-
Args:
|
|
372
|
-
agent_id: Optional agent filter
|
|
373
|
-
limit: Maximum results
|
|
374
|
-
sort_by: Sort field ("quality_score", "success_rate", "usage_count")
|
|
375
|
-
|
|
376
|
-
Returns:
|
|
377
|
-
List of top capability metrics
|
|
378
|
-
"""
|
|
379
|
-
candidates = list(self.metrics.values())
|
|
380
|
-
|
|
381
|
-
if agent_id:
|
|
382
|
-
candidates = [m for m in candidates if m.agent_id == agent_id]
|
|
383
|
-
|
|
384
|
-
# Sort by specified field
|
|
385
|
-
if sort_by == "quality_score":
|
|
386
|
-
candidates.sort(key=lambda m: m.quality_score, reverse=True)
|
|
387
|
-
elif sort_by == "success_rate":
|
|
388
|
-
candidates.sort(key=lambda m: m.success_rate, reverse=True)
|
|
389
|
-
elif sort_by == "usage_count":
|
|
390
|
-
candidates.sort(key=lambda m: m.usage_count, reverse=True)
|
|
391
|
-
else:
|
|
392
|
-
candidates.sort(key=lambda m: m.quality_score, reverse=True)
|
|
393
|
-
|
|
394
|
-
return candidates[:limit]
|
|
395
|
-
|
|
396
|
-
def get_improvement_candidates(
|
|
397
|
-
self, min_usage: int = 10, max_quality: float = 0.7
|
|
398
|
-
) -> list[CapabilityMetric]:
|
|
399
|
-
"""
|
|
400
|
-
Get capabilities that could benefit from improvement.
|
|
401
|
-
|
|
402
|
-
Args:
|
|
403
|
-
min_usage: Minimum usage count to consider
|
|
404
|
-
max_quality: Maximum quality score (capabilities below this are candidates)
|
|
405
|
-
|
|
406
|
-
Returns:
|
|
407
|
-
List of capability metrics needing improvement
|
|
408
|
-
"""
|
|
409
|
-
candidates = [
|
|
410
|
-
m
|
|
411
|
-
for m in self.metrics.values()
|
|
412
|
-
if m.usage_count >= min_usage and m.quality_score < max_quality
|
|
413
|
-
]
|
|
414
|
-
|
|
415
|
-
# Sort by quality (lowest first)
|
|
416
|
-
candidates.sort(key=lambda m: m.quality_score)
|
|
417
|
-
|
|
418
|
-
return candidates
|
|
1
|
+
"""
|
|
2
|
+
Agent Capability Registry
|
|
3
|
+
|
|
4
|
+
Tracks agent capabilities and their performance metrics for self-improvement.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import gzip
|
|
10
|
+
import json
|
|
11
|
+
import logging
|
|
12
|
+
from dataclasses import asdict, dataclass, field
|
|
13
|
+
from datetime import UTC, datetime
|
|
14
|
+
from enum import Enum
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
from typing import Any
|
|
17
|
+
|
|
18
|
+
from .hardware_profiler import HardwareProfile, HardwareProfiler
|
|
19
|
+
|
|
20
|
+
logger = logging.getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class LearningIntensity(Enum):
|
|
24
|
+
"""Learning intensity levels based on hardware."""
|
|
25
|
+
|
|
26
|
+
LOW = "low" # Minimal learning, essential patterns only
|
|
27
|
+
MEDIUM = "medium" # Balanced learning
|
|
28
|
+
HIGH = "high" # Aggressive learning
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@dataclass
|
|
32
|
+
class RefinementRecord:
|
|
33
|
+
"""Record of a capability refinement."""
|
|
34
|
+
|
|
35
|
+
timestamp: datetime
|
|
36
|
+
improvement_type: str # "prompt_optimization", "pattern_learning", "feedback_loop"
|
|
37
|
+
before_metric: dict[str, Any] # Snapshot of metrics before
|
|
38
|
+
after_metric: dict[str, Any] # Snapshot of metrics after
|
|
39
|
+
improvement_percent: float
|
|
40
|
+
learned_patterns: list[str] = field(default_factory=list)
|
|
41
|
+
metadata: dict[str, Any] = field(default_factory=dict)
|
|
42
|
+
|
|
43
|
+
def to_dict(self) -> dict[str, Any]:
|
|
44
|
+
"""Convert to dictionary."""
|
|
45
|
+
data = asdict(self)
|
|
46
|
+
data["timestamp"] = self.timestamp.isoformat()
|
|
47
|
+
return data
|
|
48
|
+
|
|
49
|
+
@classmethod
|
|
50
|
+
def from_dict(cls, data: dict[str, Any]) -> RefinementRecord:
|
|
51
|
+
"""Create from dictionary."""
|
|
52
|
+
data = data.copy()
|
|
53
|
+
data["timestamp"] = datetime.fromisoformat(data["timestamp"])
|
|
54
|
+
return cls(**data)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@dataclass
|
|
58
|
+
class CapabilityMetric:
|
|
59
|
+
"""Tracks performance metrics for a capability."""
|
|
60
|
+
|
|
61
|
+
capability_id: str
|
|
62
|
+
agent_id: str
|
|
63
|
+
success_rate: float # 0.0 to 1.0
|
|
64
|
+
average_duration: float # seconds
|
|
65
|
+
quality_score: float # 0.0 to 1.0 (from code scoring system)
|
|
66
|
+
usage_count: int
|
|
67
|
+
last_improved: datetime | None = None
|
|
68
|
+
refinement_history: list[RefinementRecord] = field(default_factory=list)
|
|
69
|
+
metadata: dict[str, Any] = field(default_factory=dict)
|
|
70
|
+
|
|
71
|
+
def to_dict(self) -> dict[str, Any]:
|
|
72
|
+
"""Convert to dictionary."""
|
|
73
|
+
data = asdict(self)
|
|
74
|
+
if self.last_improved:
|
|
75
|
+
data["last_improved"] = self.last_improved.isoformat()
|
|
76
|
+
else:
|
|
77
|
+
data["last_improved"] = None
|
|
78
|
+
data["refinement_history"] = [r.to_dict() for r in self.refinement_history]
|
|
79
|
+
return data
|
|
80
|
+
|
|
81
|
+
@classmethod
|
|
82
|
+
def from_dict(cls, data: dict[str, Any]) -> CapabilityMetric:
|
|
83
|
+
"""Create from dictionary."""
|
|
84
|
+
data = data.copy()
|
|
85
|
+
if data.get("last_improved"):
|
|
86
|
+
data["last_improved"] = datetime.fromisoformat(data["last_improved"])
|
|
87
|
+
else:
|
|
88
|
+
data["last_improved"] = None
|
|
89
|
+
data["refinement_history"] = [
|
|
90
|
+
RefinementRecord.from_dict(r) for r in data.get("refinement_history", [])
|
|
91
|
+
]
|
|
92
|
+
return cls(**data)
|
|
93
|
+
|
|
94
|
+
def update_metrics(
|
|
95
|
+
self, success: bool, duration: float, quality_score: float | None = None
|
|
96
|
+
):
|
|
97
|
+
"""
|
|
98
|
+
Update metrics with new task result.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
success: Whether task succeeded
|
|
102
|
+
duration: Task duration in seconds
|
|
103
|
+
quality_score: Optional quality score (0.0 to 1.0)
|
|
104
|
+
"""
|
|
105
|
+
# Update success rate (exponential moving average)
|
|
106
|
+
alpha = 0.1 # Smoothing factor
|
|
107
|
+
self.success_rate = (
|
|
108
|
+
alpha * (1.0 if success else 0.0) + (1 - alpha) * self.success_rate
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
# Update average duration (exponential moving average)
|
|
112
|
+
self.average_duration = alpha * duration + (1 - alpha) * self.average_duration
|
|
113
|
+
|
|
114
|
+
# Update quality score if provided
|
|
115
|
+
if quality_score is not None:
|
|
116
|
+
self.quality_score = (
|
|
117
|
+
alpha * quality_score + (1 - alpha) * self.quality_score
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
# Increment usage count
|
|
121
|
+
self.usage_count += 1
|
|
122
|
+
|
|
123
|
+
def record_refinement(
|
|
124
|
+
self,
|
|
125
|
+
improvement_type: str,
|
|
126
|
+
improvement_percent: float,
|
|
127
|
+
learned_patterns: list[str] | None = None,
|
|
128
|
+
metadata: dict[str, Any] | None = None,
|
|
129
|
+
):
|
|
130
|
+
"""
|
|
131
|
+
Record a refinement to the capability.
|
|
132
|
+
|
|
133
|
+
Args:
|
|
134
|
+
improvement_type: Type of improvement
|
|
135
|
+
improvement_percent: Percentage improvement
|
|
136
|
+
learned_patterns: Optional learned patterns
|
|
137
|
+
metadata: Optional metadata
|
|
138
|
+
"""
|
|
139
|
+
before_metric = {
|
|
140
|
+
"success_rate": self.success_rate,
|
|
141
|
+
"average_duration": self.average_duration,
|
|
142
|
+
"quality_score": self.quality_score,
|
|
143
|
+
"usage_count": self.usage_count,
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
# Create refinement record
|
|
147
|
+
refinement = RefinementRecord(
|
|
148
|
+
timestamp=datetime.now(UTC),
|
|
149
|
+
improvement_type=improvement_type,
|
|
150
|
+
before_metric=before_metric,
|
|
151
|
+
after_metric=before_metric.copy(), # Will be updated after refinement
|
|
152
|
+
improvement_percent=improvement_percent,
|
|
153
|
+
learned_patterns=learned_patterns or [],
|
|
154
|
+
metadata=metadata or {},
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
self.refinement_history.append(refinement)
|
|
158
|
+
self.last_improved = datetime.now(UTC)
|
|
159
|
+
|
|
160
|
+
logger.info(
|
|
161
|
+
f"Recorded refinement for {self.capability_id}: "
|
|
162
|
+
f"{improvement_type} ({improvement_percent:.1f}% improvement)"
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
class CapabilityRegistry:
|
|
167
|
+
"""
|
|
168
|
+
Central registry for agent capabilities and their performance metrics.
|
|
169
|
+
|
|
170
|
+
Follows Hexagonal Architecture pattern (Ports and Adapters).
|
|
171
|
+
"""
|
|
172
|
+
|
|
173
|
+
def __init__(
|
|
174
|
+
self,
|
|
175
|
+
storage_dir: Path | None = None,
|
|
176
|
+
hardware_profile: HardwareProfile | None = None,
|
|
177
|
+
):
|
|
178
|
+
"""
|
|
179
|
+
Initialize capability registry.
|
|
180
|
+
|
|
181
|
+
Args:
|
|
182
|
+
storage_dir: Directory for metric storage (default: .tapps-agents/capabilities)
|
|
183
|
+
hardware_profile: Hardware profile (auto-detected if None)
|
|
184
|
+
"""
|
|
185
|
+
if storage_dir is None:
|
|
186
|
+
storage_dir = Path(".tapps-agents/capabilities")
|
|
187
|
+
|
|
188
|
+
self.storage_dir = Path(storage_dir)
|
|
189
|
+
self.storage_dir.mkdir(parents=True, exist_ok=True)
|
|
190
|
+
|
|
191
|
+
# Detect hardware profile if not provided
|
|
192
|
+
if hardware_profile is None:
|
|
193
|
+
profiler = HardwareProfiler()
|
|
194
|
+
hardware_profile = profiler.detect_profile()
|
|
195
|
+
|
|
196
|
+
self.hardware_profile = hardware_profile
|
|
197
|
+
self.compression_enabled = False # Hardware taxonomy removed
|
|
198
|
+
self.metrics_file = self.storage_dir / "capabilities.json"
|
|
199
|
+
|
|
200
|
+
# In-memory registry
|
|
201
|
+
self.metrics: dict[str, CapabilityMetric] = {}
|
|
202
|
+
self._load_metrics()
|
|
203
|
+
|
|
204
|
+
def _load_metrics(self):
|
|
205
|
+
"""Load metrics from storage."""
|
|
206
|
+
if not self.metrics_file.exists():
|
|
207
|
+
return
|
|
208
|
+
|
|
209
|
+
try:
|
|
210
|
+
if self.compression_enabled:
|
|
211
|
+
with gzip.open(self.metrics_file, "rt", encoding="utf-8") as f:
|
|
212
|
+
data = json.load(f)
|
|
213
|
+
else:
|
|
214
|
+
with open(self.metrics_file, encoding="utf-8") as f:
|
|
215
|
+
data = json.load(f)
|
|
216
|
+
|
|
217
|
+
for metric_data in data.get("metrics", []):
|
|
218
|
+
metric = CapabilityMetric.from_dict(metric_data)
|
|
219
|
+
self.metrics[metric.capability_id] = metric
|
|
220
|
+
|
|
221
|
+
logger.info(f"Loaded {len(self.metrics)} capability metrics")
|
|
222
|
+
except Exception as e:
|
|
223
|
+
logger.error(f"Failed to load metrics: {e}")
|
|
224
|
+
|
|
225
|
+
def _save_metrics(self):
|
|
226
|
+
"""Save metrics to storage."""
|
|
227
|
+
try:
|
|
228
|
+
data = {
|
|
229
|
+
"version": "1.0",
|
|
230
|
+
"hardware_profile": self.hardware_profile.value,
|
|
231
|
+
"metrics": [m.to_dict() for m in self.metrics.values()],
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
json_str = json.dumps(data, indent=2, default=str)
|
|
235
|
+
|
|
236
|
+
if self.compression_enabled:
|
|
237
|
+
with gzip.open(self.metrics_file, "wt", encoding="utf-8") as f:
|
|
238
|
+
f.write(json_str)
|
|
239
|
+
else:
|
|
240
|
+
with open(self.metrics_file, "w", encoding="utf-8") as f:
|
|
241
|
+
f.write(json_str)
|
|
242
|
+
|
|
243
|
+
logger.debug(f"Saved {len(self.metrics)} capability metrics")
|
|
244
|
+
except Exception as e:
|
|
245
|
+
logger.error(f"Failed to save metrics: {e}")
|
|
246
|
+
|
|
247
|
+
def register_capability(
|
|
248
|
+
self, capability_id: str, agent_id: str, initial_quality: float = 0.5
|
|
249
|
+
) -> CapabilityMetric:
|
|
250
|
+
"""
|
|
251
|
+
Register a new capability.
|
|
252
|
+
|
|
253
|
+
Args:
|
|
254
|
+
capability_id: Unique capability identifier
|
|
255
|
+
agent_id: Agent identifier
|
|
256
|
+
initial_quality: Initial quality score
|
|
257
|
+
|
|
258
|
+
Returns:
|
|
259
|
+
CapabilityMetric instance
|
|
260
|
+
"""
|
|
261
|
+
if capability_id not in self.metrics:
|
|
262
|
+
self.metrics[capability_id] = CapabilityMetric(
|
|
263
|
+
capability_id=capability_id,
|
|
264
|
+
agent_id=agent_id,
|
|
265
|
+
success_rate=0.5, # Initial neutral value
|
|
266
|
+
average_duration=0.0,
|
|
267
|
+
quality_score=initial_quality,
|
|
268
|
+
usage_count=0,
|
|
269
|
+
)
|
|
270
|
+
self._save_metrics()
|
|
271
|
+
logger.info(f"Registered capability: {capability_id} for agent {agent_id}")
|
|
272
|
+
|
|
273
|
+
return self.metrics[capability_id]
|
|
274
|
+
|
|
275
|
+
def get_capability(self, capability_id: str) -> CapabilityMetric | None:
|
|
276
|
+
"""
|
|
277
|
+
Get capability metric.
|
|
278
|
+
|
|
279
|
+
Args:
|
|
280
|
+
capability_id: Capability identifier
|
|
281
|
+
|
|
282
|
+
Returns:
|
|
283
|
+
CapabilityMetric if found, None otherwise
|
|
284
|
+
"""
|
|
285
|
+
return self.metrics.get(capability_id)
|
|
286
|
+
|
|
287
|
+
def get_agent_capabilities(self, agent_id: str) -> list[CapabilityMetric]:
|
|
288
|
+
"""
|
|
289
|
+
Get all capabilities for an agent.
|
|
290
|
+
|
|
291
|
+
Args:
|
|
292
|
+
agent_id: Agent identifier
|
|
293
|
+
|
|
294
|
+
Returns:
|
|
295
|
+
List of capability metrics
|
|
296
|
+
"""
|
|
297
|
+
return [m for m in self.metrics.values() if m.agent_id == agent_id]
|
|
298
|
+
|
|
299
|
+
def update_capability_metrics(
|
|
300
|
+
self,
|
|
301
|
+
capability_id: str,
|
|
302
|
+
success: bool,
|
|
303
|
+
duration: float,
|
|
304
|
+
quality_score: float | None = None,
|
|
305
|
+
):
|
|
306
|
+
"""
|
|
307
|
+
Update capability metrics after task execution.
|
|
308
|
+
|
|
309
|
+
Args:
|
|
310
|
+
capability_id: Capability identifier
|
|
311
|
+
success: Whether task succeeded
|
|
312
|
+
duration: Task duration in seconds
|
|
313
|
+
quality_score: Optional quality score
|
|
314
|
+
"""
|
|
315
|
+
if capability_id not in self.metrics:
|
|
316
|
+
logger.warning(
|
|
317
|
+
f"Capability {capability_id} not registered, creating default"
|
|
318
|
+
)
|
|
319
|
+
self.register_capability(
|
|
320
|
+
capability_id, "unknown", initial_quality=quality_score or 0.5
|
|
321
|
+
)
|
|
322
|
+
|
|
323
|
+
metric = self.metrics[capability_id]
|
|
324
|
+
metric.update_metrics(success, duration, quality_score)
|
|
325
|
+
self._save_metrics()
|
|
326
|
+
|
|
327
|
+
def record_refinement(
|
|
328
|
+
self,
|
|
329
|
+
capability_id: str,
|
|
330
|
+
improvement_type: str,
|
|
331
|
+
improvement_percent: float,
|
|
332
|
+
learned_patterns: list[str] | None = None,
|
|
333
|
+
metadata: dict[str, Any] | None = None,
|
|
334
|
+
):
|
|
335
|
+
"""
|
|
336
|
+
Record a capability refinement.
|
|
337
|
+
|
|
338
|
+
Args:
|
|
339
|
+
capability_id: Capability identifier
|
|
340
|
+
improvement_type: Type of improvement
|
|
341
|
+
improvement_percent: Percentage improvement
|
|
342
|
+
learned_patterns: Optional learned patterns
|
|
343
|
+
metadata: Optional metadata
|
|
344
|
+
"""
|
|
345
|
+
if capability_id not in self.metrics:
|
|
346
|
+
logger.warning(f"Capability {capability_id} not found for refinement")
|
|
347
|
+
return
|
|
348
|
+
|
|
349
|
+
metric = self.metrics[capability_id]
|
|
350
|
+
metric.record_refinement(
|
|
351
|
+
improvement_type=improvement_type,
|
|
352
|
+
improvement_percent=improvement_percent,
|
|
353
|
+
learned_patterns=learned_patterns,
|
|
354
|
+
metadata=metadata,
|
|
355
|
+
)
|
|
356
|
+
self._save_metrics()
|
|
357
|
+
|
|
358
|
+
def get_learning_intensity(self) -> LearningIntensity:
|
|
359
|
+
"""Learning intensity. Workstation-like default (hardware taxonomy removed)."""
|
|
360
|
+
return LearningIntensity.HIGH
|
|
361
|
+
|
|
362
|
+
def get_top_capabilities(
|
|
363
|
+
self,
|
|
364
|
+
agent_id: str | None = None,
|
|
365
|
+
limit: int = 10,
|
|
366
|
+
sort_by: str = "quality_score",
|
|
367
|
+
) -> list[CapabilityMetric]:
|
|
368
|
+
"""
|
|
369
|
+
Get top capabilities by metric.
|
|
370
|
+
|
|
371
|
+
Args:
|
|
372
|
+
agent_id: Optional agent filter
|
|
373
|
+
limit: Maximum results
|
|
374
|
+
sort_by: Sort field ("quality_score", "success_rate", "usage_count")
|
|
375
|
+
|
|
376
|
+
Returns:
|
|
377
|
+
List of top capability metrics
|
|
378
|
+
"""
|
|
379
|
+
candidates = list(self.metrics.values())
|
|
380
|
+
|
|
381
|
+
if agent_id:
|
|
382
|
+
candidates = [m for m in candidates if m.agent_id == agent_id]
|
|
383
|
+
|
|
384
|
+
# Sort by specified field
|
|
385
|
+
if sort_by == "quality_score":
|
|
386
|
+
candidates.sort(key=lambda m: m.quality_score, reverse=True)
|
|
387
|
+
elif sort_by == "success_rate":
|
|
388
|
+
candidates.sort(key=lambda m: m.success_rate, reverse=True)
|
|
389
|
+
elif sort_by == "usage_count":
|
|
390
|
+
candidates.sort(key=lambda m: m.usage_count, reverse=True)
|
|
391
|
+
else:
|
|
392
|
+
candidates.sort(key=lambda m: m.quality_score, reverse=True)
|
|
393
|
+
|
|
394
|
+
return candidates[:limit]
|
|
395
|
+
|
|
396
|
+
def get_improvement_candidates(
|
|
397
|
+
self, min_usage: int = 10, max_quality: float = 0.7
|
|
398
|
+
) -> list[CapabilityMetric]:
|
|
399
|
+
"""
|
|
400
|
+
Get capabilities that could benefit from improvement.
|
|
401
|
+
|
|
402
|
+
Args:
|
|
403
|
+
min_usage: Minimum usage count to consider
|
|
404
|
+
max_quality: Maximum quality score (capabilities below this are candidates)
|
|
405
|
+
|
|
406
|
+
Returns:
|
|
407
|
+
List of capability metrics needing improvement
|
|
408
|
+
"""
|
|
409
|
+
candidates = [
|
|
410
|
+
m
|
|
411
|
+
for m in self.metrics.values()
|
|
412
|
+
if m.usage_count >= min_usage and m.quality_score < max_quality
|
|
413
|
+
]
|
|
414
|
+
|
|
415
|
+
# Sort by quality (lowest first)
|
|
416
|
+
candidates.sort(key=lambda m: m.quality_score)
|
|
417
|
+
|
|
418
|
+
return candidates
|