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,136 +1,136 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Validation registry for pluggable validators.
|
|
3
|
-
|
|
4
|
-
Auto-detects validators based on project profile and loads them.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import logging
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
from typing import Any
|
|
10
|
-
|
|
11
|
-
from .evaluation_base import BaseValidator
|
|
12
|
-
from .project_profile import ProjectProfile
|
|
13
|
-
|
|
14
|
-
logger = logging.getLogger(__name__)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class ValidationRegistry:
|
|
18
|
-
"""
|
|
19
|
-
Registry for project-specific validators.
|
|
20
|
-
|
|
21
|
-
Auto-detects validators based on project profile and loads them.
|
|
22
|
-
"""
|
|
23
|
-
|
|
24
|
-
def __init__(self, project_root: Path | None = None):
|
|
25
|
-
"""
|
|
26
|
-
Initialize validation registry.
|
|
27
|
-
|
|
28
|
-
Args:
|
|
29
|
-
project_root: Project root directory
|
|
30
|
-
"""
|
|
31
|
-
self.project_root = project_root or Path.cwd()
|
|
32
|
-
self.validators: dict[str, BaseValidator] = {}
|
|
33
|
-
self.project_profile: ProjectProfile | None = None
|
|
34
|
-
|
|
35
|
-
def load_project_profile(self, profile_path: Path | None = None) -> None:
|
|
36
|
-
"""
|
|
37
|
-
Load project profile for validator detection.
|
|
38
|
-
|
|
39
|
-
Args:
|
|
40
|
-
profile_path: Optional path to project-profile.yaml
|
|
41
|
-
"""
|
|
42
|
-
if profile_path is None:
|
|
43
|
-
profile_path = self.project_root / ".tapps-agents" / "project-profile.yaml"
|
|
44
|
-
|
|
45
|
-
if profile_path.exists():
|
|
46
|
-
try:
|
|
47
|
-
self.project_profile = ProjectProfile.load(profile_path)
|
|
48
|
-
except Exception as e:
|
|
49
|
-
logger.warning(f"Failed to load project profile: {e}")
|
|
50
|
-
else:
|
|
51
|
-
# Create default profile
|
|
52
|
-
self.project_profile = ProjectProfile()
|
|
53
|
-
|
|
54
|
-
def detect_validators(self) -> list[str]:
|
|
55
|
-
"""
|
|
56
|
-
Detect applicable validators from project profile.
|
|
57
|
-
|
|
58
|
-
Returns:
|
|
59
|
-
List of validator identifiers
|
|
60
|
-
"""
|
|
61
|
-
if self.project_profile is None:
|
|
62
|
-
self.load_project_profile()
|
|
63
|
-
|
|
64
|
-
detected: list[str] = []
|
|
65
|
-
|
|
66
|
-
# Detect by language
|
|
67
|
-
languages = self.project_profile.languages if self.project_profile else []
|
|
68
|
-
if "python" in languages:
|
|
69
|
-
detected.append("python")
|
|
70
|
-
if "typescript" in languages or "javascript" in languages:
|
|
71
|
-
detected.append("typescript")
|
|
72
|
-
|
|
73
|
-
# Detect by frameworks/tools
|
|
74
|
-
frameworks = self.project_profile.frameworks if self.project_profile else []
|
|
75
|
-
if any("docker" in f.lower() for f in frameworks):
|
|
76
|
-
detected.append("docker")
|
|
77
|
-
if any("ci" in f.lower() or "github" in f.lower() for f in frameworks):
|
|
78
|
-
detected.append("ci")
|
|
79
|
-
|
|
80
|
-
return detected
|
|
81
|
-
|
|
82
|
-
def register_validator(self, validator: BaseValidator) -> None:
|
|
83
|
-
"""
|
|
84
|
-
Register a validator.
|
|
85
|
-
|
|
86
|
-
Args:
|
|
87
|
-
validator: Validator instance
|
|
88
|
-
"""
|
|
89
|
-
self.validators[validator.get_name()] = validator
|
|
90
|
-
logger.debug(f"Registered validator: {validator.get_name()}")
|
|
91
|
-
|
|
92
|
-
def get_validators(self, project_profile: dict[str, Any] | None = None) -> list[BaseValidator]:
|
|
93
|
-
"""
|
|
94
|
-
Get validators applicable to project.
|
|
95
|
-
|
|
96
|
-
Args:
|
|
97
|
-
project_profile: Optional project profile dict
|
|
98
|
-
|
|
99
|
-
Returns:
|
|
100
|
-
List of applicable validators
|
|
101
|
-
"""
|
|
102
|
-
if not project_profile and self.project_profile:
|
|
103
|
-
project_profile = self.project_profile.to_dict()
|
|
104
|
-
|
|
105
|
-
applicable = []
|
|
106
|
-
for validator in self.validators.values():
|
|
107
|
-
if validator.is_applicable(project_profile or {}):
|
|
108
|
-
applicable.append(validator)
|
|
109
|
-
|
|
110
|
-
return applicable
|
|
111
|
-
|
|
112
|
-
def validate(
|
|
113
|
-
self, target: Path | str, project_profile: dict[str, Any] | None = None
|
|
114
|
-
) -> list[Any]:
|
|
115
|
-
"""
|
|
116
|
-
Run all applicable validators on target.
|
|
117
|
-
|
|
118
|
-
Args:
|
|
119
|
-
target: File path or identifier to validate
|
|
120
|
-
project_profile: Optional project profile
|
|
121
|
-
|
|
122
|
-
Returns:
|
|
123
|
-
List of ValidationResult objects
|
|
124
|
-
"""
|
|
125
|
-
validators = self.get_validators(project_profile)
|
|
126
|
-
results = []
|
|
127
|
-
|
|
128
|
-
for validator in validators:
|
|
129
|
-
try:
|
|
130
|
-
result = validator.validate(target, project_profile)
|
|
131
|
-
results.append(result)
|
|
132
|
-
except Exception as e:
|
|
133
|
-
logger.warning(f"Error in validator {validator.get_name()}: {e}")
|
|
134
|
-
|
|
135
|
-
return results
|
|
136
|
-
|
|
1
|
+
"""
|
|
2
|
+
Validation registry for pluggable validators.
|
|
3
|
+
|
|
4
|
+
Auto-detects validators based on project profile and loads them.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
from .evaluation_base import BaseValidator
|
|
12
|
+
from .project_profile import ProjectProfile
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ValidationRegistry:
|
|
18
|
+
"""
|
|
19
|
+
Registry for project-specific validators.
|
|
20
|
+
|
|
21
|
+
Auto-detects validators based on project profile and loads them.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
def __init__(self, project_root: Path | None = None):
|
|
25
|
+
"""
|
|
26
|
+
Initialize validation registry.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
project_root: Project root directory
|
|
30
|
+
"""
|
|
31
|
+
self.project_root = project_root or Path.cwd()
|
|
32
|
+
self.validators: dict[str, BaseValidator] = {}
|
|
33
|
+
self.project_profile: ProjectProfile | None = None
|
|
34
|
+
|
|
35
|
+
def load_project_profile(self, profile_path: Path | None = None) -> None:
|
|
36
|
+
"""
|
|
37
|
+
Load project profile for validator detection.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
profile_path: Optional path to project-profile.yaml
|
|
41
|
+
"""
|
|
42
|
+
if profile_path is None:
|
|
43
|
+
profile_path = self.project_root / ".tapps-agents" / "project-profile.yaml"
|
|
44
|
+
|
|
45
|
+
if profile_path.exists():
|
|
46
|
+
try:
|
|
47
|
+
self.project_profile = ProjectProfile.load(profile_path)
|
|
48
|
+
except Exception as e:
|
|
49
|
+
logger.warning(f"Failed to load project profile: {e}")
|
|
50
|
+
else:
|
|
51
|
+
# Create default profile
|
|
52
|
+
self.project_profile = ProjectProfile()
|
|
53
|
+
|
|
54
|
+
def detect_validators(self) -> list[str]:
|
|
55
|
+
"""
|
|
56
|
+
Detect applicable validators from project profile.
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
List of validator identifiers
|
|
60
|
+
"""
|
|
61
|
+
if self.project_profile is None:
|
|
62
|
+
self.load_project_profile()
|
|
63
|
+
|
|
64
|
+
detected: list[str] = []
|
|
65
|
+
|
|
66
|
+
# Detect by language
|
|
67
|
+
languages = self.project_profile.languages if self.project_profile else []
|
|
68
|
+
if "python" in languages:
|
|
69
|
+
detected.append("python")
|
|
70
|
+
if "typescript" in languages or "javascript" in languages:
|
|
71
|
+
detected.append("typescript")
|
|
72
|
+
|
|
73
|
+
# Detect by frameworks/tools
|
|
74
|
+
frameworks = self.project_profile.frameworks if self.project_profile else []
|
|
75
|
+
if any("docker" in f.lower() for f in frameworks):
|
|
76
|
+
detected.append("docker")
|
|
77
|
+
if any("ci" in f.lower() or "github" in f.lower() for f in frameworks):
|
|
78
|
+
detected.append("ci")
|
|
79
|
+
|
|
80
|
+
return detected
|
|
81
|
+
|
|
82
|
+
def register_validator(self, validator: BaseValidator) -> None:
|
|
83
|
+
"""
|
|
84
|
+
Register a validator.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
validator: Validator instance
|
|
88
|
+
"""
|
|
89
|
+
self.validators[validator.get_name()] = validator
|
|
90
|
+
logger.debug(f"Registered validator: {validator.get_name()}")
|
|
91
|
+
|
|
92
|
+
def get_validators(self, project_profile: dict[str, Any] | None = None) -> list[BaseValidator]:
|
|
93
|
+
"""
|
|
94
|
+
Get validators applicable to project.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
project_profile: Optional project profile dict
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
List of applicable validators
|
|
101
|
+
"""
|
|
102
|
+
if not project_profile and self.project_profile:
|
|
103
|
+
project_profile = self.project_profile.to_dict()
|
|
104
|
+
|
|
105
|
+
applicable = []
|
|
106
|
+
for validator in self.validators.values():
|
|
107
|
+
if validator.is_applicable(project_profile or {}):
|
|
108
|
+
applicable.append(validator)
|
|
109
|
+
|
|
110
|
+
return applicable
|
|
111
|
+
|
|
112
|
+
def validate(
|
|
113
|
+
self, target: Path | str, project_profile: dict[str, Any] | None = None
|
|
114
|
+
) -> list[Any]:
|
|
115
|
+
"""
|
|
116
|
+
Run all applicable validators on target.
|
|
117
|
+
|
|
118
|
+
Args:
|
|
119
|
+
target: File path or identifier to validate
|
|
120
|
+
project_profile: Optional project profile
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
List of ValidationResult objects
|
|
124
|
+
"""
|
|
125
|
+
validators = self.get_validators(project_profile)
|
|
126
|
+
results = []
|
|
127
|
+
|
|
128
|
+
for validator in validators:
|
|
129
|
+
try:
|
|
130
|
+
result = validator.validate(target, project_profile)
|
|
131
|
+
results.append(result)
|
|
132
|
+
except Exception as e:
|
|
133
|
+
logger.warning(f"Error in validator {validator.get_name()}: {e}")
|
|
134
|
+
|
|
135
|
+
return results
|
|
136
|
+
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Pluggable validators for project-specific validation.
|
|
3
|
-
"""
|
|
4
|
-
|
|
1
|
+
"""
|
|
2
|
+
Pluggable validators for project-specific validation.
|
|
3
|
+
"""
|
|
4
|
+
|
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Python-specific validator.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import logging
|
|
6
|
-
from pathlib import Path
|
|
7
|
-
from typing import Any
|
|
8
|
-
|
|
9
|
-
from ..evaluation_base import BaseValidator, ValidationResult
|
|
10
|
-
from ..evaluation_models import Issue, IssueCategory, IssueManifest, IssueSeverity
|
|
11
|
-
|
|
12
|
-
logger = logging.getLogger(__name__)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class PythonValidator(BaseValidator):
|
|
16
|
-
"""Validator for Python-specific checks."""
|
|
17
|
-
|
|
18
|
-
def get_name(self) -> str:
|
|
19
|
-
"""Get validator name."""
|
|
20
|
-
return "python"
|
|
21
|
-
|
|
22
|
-
def get_description(self) -> str:
|
|
23
|
-
"""Get validator description."""
|
|
24
|
-
return "Validates Python-specific coding standards and best practices"
|
|
25
|
-
|
|
26
|
-
def is_applicable(self, project_profile: dict[str, Any]) -> bool:
|
|
27
|
-
"""Check if validator is applicable to project."""
|
|
28
|
-
languages = project_profile.get("languages", [])
|
|
29
|
-
return "python" in languages
|
|
30
|
-
|
|
31
|
-
def validate(
|
|
32
|
-
self, target: Path | str, context: dict[str, Any] | None = None
|
|
33
|
-
) -> ValidationResult:
|
|
34
|
-
"""
|
|
35
|
-
Validate Python file.
|
|
36
|
-
|
|
37
|
-
Args:
|
|
38
|
-
target: File path to validate
|
|
39
|
-
context: Optional context
|
|
40
|
-
|
|
41
|
-
Returns:
|
|
42
|
-
ValidationResult
|
|
43
|
-
"""
|
|
44
|
-
target_path = Path(target) if isinstance(target, str) else target
|
|
45
|
-
issues = IssueManifest()
|
|
46
|
-
|
|
47
|
-
if not target_path.exists() or target_path.suffix != ".py":
|
|
48
|
-
return ValidationResult(passed=True, issues=issues)
|
|
49
|
-
|
|
50
|
-
try:
|
|
51
|
-
code = target_path.read_text(encoding="utf-8")
|
|
52
|
-
|
|
53
|
-
# Check for Python-specific issues
|
|
54
|
-
# Missing docstrings
|
|
55
|
-
if "def " in code and not '"""' in code[:500] and not "'''" in code[:500]:
|
|
56
|
-
issue = Issue(
|
|
57
|
-
id=f"python_missing_docstring_{target_path.name}",
|
|
58
|
-
severity=IssueSeverity.LOW,
|
|
59
|
-
category=IssueCategory.DOCUMENTATION,
|
|
60
|
-
evidence="File appears to have functions but no module docstring",
|
|
61
|
-
repro=f"Review {target_path} for docstrings",
|
|
62
|
-
suggested_fix="Add module and function docstrings",
|
|
63
|
-
owner_step="implementation",
|
|
64
|
-
file_path=str(target_path),
|
|
65
|
-
)
|
|
66
|
-
issues.add_issue(issue)
|
|
67
|
-
|
|
68
|
-
# Check for common Python issues
|
|
69
|
-
if "import *" in code:
|
|
70
|
-
issue = Issue(
|
|
71
|
-
id=f"python_wildcard_import_{target_path.name}",
|
|
72
|
-
severity=IssueSeverity.MEDIUM,
|
|
73
|
-
category=IssueCategory.MAINTAINABILITY,
|
|
74
|
-
evidence="Wildcard import (import *) found",
|
|
75
|
-
repro=f"Check imports in {target_path}",
|
|
76
|
-
suggested_fix="Replace wildcard imports with explicit imports",
|
|
77
|
-
owner_step="implementation",
|
|
78
|
-
file_path=str(target_path),
|
|
79
|
-
)
|
|
80
|
-
issues.add_issue(issue)
|
|
81
|
-
|
|
82
|
-
except Exception as e:
|
|
83
|
-
logger.warning(f"Error in Python validation: {e}")
|
|
84
|
-
|
|
85
|
-
passed = len(issues.issues) == 0
|
|
86
|
-
return ValidationResult(passed=passed, issues=issues)
|
|
87
|
-
|
|
1
|
+
"""
|
|
2
|
+
Python-specific validator.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from ..evaluation_base import BaseValidator, ValidationResult
|
|
10
|
+
from ..evaluation_models import Issue, IssueCategory, IssueManifest, IssueSeverity
|
|
11
|
+
|
|
12
|
+
logger = logging.getLogger(__name__)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class PythonValidator(BaseValidator):
|
|
16
|
+
"""Validator for Python-specific checks."""
|
|
17
|
+
|
|
18
|
+
def get_name(self) -> str:
|
|
19
|
+
"""Get validator name."""
|
|
20
|
+
return "python"
|
|
21
|
+
|
|
22
|
+
def get_description(self) -> str:
|
|
23
|
+
"""Get validator description."""
|
|
24
|
+
return "Validates Python-specific coding standards and best practices"
|
|
25
|
+
|
|
26
|
+
def is_applicable(self, project_profile: dict[str, Any]) -> bool:
|
|
27
|
+
"""Check if validator is applicable to project."""
|
|
28
|
+
languages = project_profile.get("languages", [])
|
|
29
|
+
return "python" in languages
|
|
30
|
+
|
|
31
|
+
def validate(
|
|
32
|
+
self, target: Path | str, context: dict[str, Any] | None = None
|
|
33
|
+
) -> ValidationResult:
|
|
34
|
+
"""
|
|
35
|
+
Validate Python file.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
target: File path to validate
|
|
39
|
+
context: Optional context
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
ValidationResult
|
|
43
|
+
"""
|
|
44
|
+
target_path = Path(target) if isinstance(target, str) else target
|
|
45
|
+
issues = IssueManifest()
|
|
46
|
+
|
|
47
|
+
if not target_path.exists() or target_path.suffix != ".py":
|
|
48
|
+
return ValidationResult(passed=True, issues=issues)
|
|
49
|
+
|
|
50
|
+
try:
|
|
51
|
+
code = target_path.read_text(encoding="utf-8")
|
|
52
|
+
|
|
53
|
+
# Check for Python-specific issues
|
|
54
|
+
# Missing docstrings
|
|
55
|
+
if "def " in code and not '"""' in code[:500] and not "'''" in code[:500]:
|
|
56
|
+
issue = Issue(
|
|
57
|
+
id=f"python_missing_docstring_{target_path.name}",
|
|
58
|
+
severity=IssueSeverity.LOW,
|
|
59
|
+
category=IssueCategory.DOCUMENTATION,
|
|
60
|
+
evidence="File appears to have functions but no module docstring",
|
|
61
|
+
repro=f"Review {target_path} for docstrings",
|
|
62
|
+
suggested_fix="Add module and function docstrings",
|
|
63
|
+
owner_step="implementation",
|
|
64
|
+
file_path=str(target_path),
|
|
65
|
+
)
|
|
66
|
+
issues.add_issue(issue)
|
|
67
|
+
|
|
68
|
+
# Check for common Python issues
|
|
69
|
+
if "import *" in code:
|
|
70
|
+
issue = Issue(
|
|
71
|
+
id=f"python_wildcard_import_{target_path.name}",
|
|
72
|
+
severity=IssueSeverity.MEDIUM,
|
|
73
|
+
category=IssueCategory.MAINTAINABILITY,
|
|
74
|
+
evidence="Wildcard import (import *) found",
|
|
75
|
+
repro=f"Check imports in {target_path}",
|
|
76
|
+
suggested_fix="Replace wildcard imports with explicit imports",
|
|
77
|
+
owner_step="implementation",
|
|
78
|
+
file_path=str(target_path),
|
|
79
|
+
)
|
|
80
|
+
issues.add_issue(issue)
|
|
81
|
+
|
|
82
|
+
except Exception as e:
|
|
83
|
+
logger.warning(f"Error in Python validation: {e}")
|
|
84
|
+
|
|
85
|
+
passed = len(issues.issues) == 0
|
|
86
|
+
return ValidationResult(passed=passed, issues=issues)
|
|
87
|
+
|
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Collaborative Verification Agents
|
|
3
|
-
|
|
4
|
-
Verification and refinement agents without manual prompts.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import logging
|
|
8
|
-
from typing import Any
|
|
9
|
-
|
|
10
|
-
logger = logging.getLogger(__name__)
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class VerificationAgent:
|
|
14
|
-
"""Verification agent that examines outputs at each step."""
|
|
15
|
-
|
|
16
|
-
def verify(self, output: Any, requirements: dict[str, Any]) -> dict[str, Any]:
|
|
17
|
-
"""
|
|
18
|
-
Verify output meets requirements.
|
|
19
|
-
|
|
20
|
-
Args:
|
|
21
|
-
output: Output to verify
|
|
22
|
-
requirements: Requirements to check against (e.g. required_keys, min_length, non_empty)
|
|
23
|
-
|
|
24
|
-
Returns:
|
|
25
|
-
Verification result with verified (bool) and issues (list of str)
|
|
26
|
-
"""
|
|
27
|
-
issues: list[str] = []
|
|
28
|
-
|
|
29
|
-
# Required keys: if requirements has required_keys, output (if dict) must contain them
|
|
30
|
-
required_keys = requirements.get("required_keys")
|
|
31
|
-
if isinstance(required_keys, list) and required_keys:
|
|
32
|
-
if not isinstance(output, dict):
|
|
33
|
-
issues.append(f"Output must be a dict with keys {required_keys}, got {type(output).__name__}")
|
|
34
|
-
else:
|
|
35
|
-
missing = [k for k in required_keys if k not in output]
|
|
36
|
-
if missing:
|
|
37
|
-
issues.append(f"Missing required keys: {missing}")
|
|
38
|
-
|
|
39
|
-
# Non-empty: if requirements.get("non_empty") is True, output must be non-empty
|
|
40
|
-
if requirements.get("non_empty") is True:
|
|
41
|
-
if output is None:
|
|
42
|
-
issues.append("Output must be non-empty, got None")
|
|
43
|
-
elif isinstance(output, (str, list, dict)) and len(output) == 0:
|
|
44
|
-
issues.append("Output must be non-empty")
|
|
45
|
-
|
|
46
|
-
# min_length: for str/list, check length
|
|
47
|
-
min_len = requirements.get("min_length")
|
|
48
|
-
if isinstance(min_len, (int, float)) and min_len > 0:
|
|
49
|
-
if isinstance(output, (str, list)):
|
|
50
|
-
if len(output) < int(min_len):
|
|
51
|
-
issues.append(f"Output length {len(output)} below min_length {min_len}")
|
|
52
|
-
elif isinstance(output, dict) and len(output) < int(min_len):
|
|
53
|
-
issues.append(f"Output has {len(output)} keys, below min_length {min_len}")
|
|
54
|
-
|
|
55
|
-
return {"verified": len(issues) == 0, "issues": issues}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
class RefinementAgent:
|
|
59
|
-
"""Refinement agent that revises outputs based on issues."""
|
|
60
|
-
|
|
61
|
-
def refine(self, output: Any, issues: list[str]) -> Any:
|
|
62
|
-
"""
|
|
63
|
-
Refine output based on issues.
|
|
64
|
-
|
|
65
|
-
Args:
|
|
66
|
-
output: Output to refine
|
|
67
|
-
issues: List of issues to address
|
|
68
|
-
|
|
69
|
-
Returns:
|
|
70
|
-
Refined output (structure preserved; refinements recorded when possible)
|
|
71
|
-
"""
|
|
72
|
-
if not issues:
|
|
73
|
-
return output
|
|
74
|
-
|
|
75
|
-
# For dict: add a refinement record without mutating semantic content
|
|
76
|
-
if isinstance(output, dict):
|
|
77
|
-
out = dict(output)
|
|
78
|
-
out["_refinement"] = {"issues_addressed": issues, "refined": True}
|
|
79
|
-
return out
|
|
80
|
-
|
|
81
|
-
# For str: append a short refinement note as a comment block
|
|
82
|
-
if isinstance(output, str):
|
|
83
|
-
block = "\n\n# Refinement: issues to address: " + "; ".join(issues[:5])
|
|
84
|
-
if len(issues) > 5:
|
|
85
|
-
block += f" (+{len(issues) - 5} more)"
|
|
86
|
-
return output + block
|
|
87
|
-
|
|
88
|
-
# For other types, return as-is (refinement would need type-specific logic)
|
|
89
|
-
return output
|
|
90
|
-
|
|
1
|
+
"""
|
|
2
|
+
Collaborative Verification Agents
|
|
3
|
+
|
|
4
|
+
Verification and refinement agents without manual prompts.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class VerificationAgent:
|
|
14
|
+
"""Verification agent that examines outputs at each step."""
|
|
15
|
+
|
|
16
|
+
def verify(self, output: Any, requirements: dict[str, Any]) -> dict[str, Any]:
|
|
17
|
+
"""
|
|
18
|
+
Verify output meets requirements.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
output: Output to verify
|
|
22
|
+
requirements: Requirements to check against (e.g. required_keys, min_length, non_empty)
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
Verification result with verified (bool) and issues (list of str)
|
|
26
|
+
"""
|
|
27
|
+
issues: list[str] = []
|
|
28
|
+
|
|
29
|
+
# Required keys: if requirements has required_keys, output (if dict) must contain them
|
|
30
|
+
required_keys = requirements.get("required_keys")
|
|
31
|
+
if isinstance(required_keys, list) and required_keys:
|
|
32
|
+
if not isinstance(output, dict):
|
|
33
|
+
issues.append(f"Output must be a dict with keys {required_keys}, got {type(output).__name__}")
|
|
34
|
+
else:
|
|
35
|
+
missing = [k for k in required_keys if k not in output]
|
|
36
|
+
if missing:
|
|
37
|
+
issues.append(f"Missing required keys: {missing}")
|
|
38
|
+
|
|
39
|
+
# Non-empty: if requirements.get("non_empty") is True, output must be non-empty
|
|
40
|
+
if requirements.get("non_empty") is True:
|
|
41
|
+
if output is None:
|
|
42
|
+
issues.append("Output must be non-empty, got None")
|
|
43
|
+
elif isinstance(output, (str, list, dict)) and len(output) == 0:
|
|
44
|
+
issues.append("Output must be non-empty")
|
|
45
|
+
|
|
46
|
+
# min_length: for str/list, check length
|
|
47
|
+
min_len = requirements.get("min_length")
|
|
48
|
+
if isinstance(min_len, (int, float)) and min_len > 0:
|
|
49
|
+
if isinstance(output, (str, list)):
|
|
50
|
+
if len(output) < int(min_len):
|
|
51
|
+
issues.append(f"Output length {len(output)} below min_length {min_len}")
|
|
52
|
+
elif isinstance(output, dict) and len(output) < int(min_len):
|
|
53
|
+
issues.append(f"Output has {len(output)} keys, below min_length {min_len}")
|
|
54
|
+
|
|
55
|
+
return {"verified": len(issues) == 0, "issues": issues}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class RefinementAgent:
|
|
59
|
+
"""Refinement agent that revises outputs based on issues."""
|
|
60
|
+
|
|
61
|
+
def refine(self, output: Any, issues: list[str]) -> Any:
|
|
62
|
+
"""
|
|
63
|
+
Refine output based on issues.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
output: Output to refine
|
|
67
|
+
issues: List of issues to address
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
Refined output (structure preserved; refinements recorded when possible)
|
|
71
|
+
"""
|
|
72
|
+
if not issues:
|
|
73
|
+
return output
|
|
74
|
+
|
|
75
|
+
# For dict: add a refinement record without mutating semantic content
|
|
76
|
+
if isinstance(output, dict):
|
|
77
|
+
out = dict(output)
|
|
78
|
+
out["_refinement"] = {"issues_addressed": issues, "refined": True}
|
|
79
|
+
return out
|
|
80
|
+
|
|
81
|
+
# For str: append a short refinement note as a comment block
|
|
82
|
+
if isinstance(output, str):
|
|
83
|
+
block = "\n\n# Refinement: issues to address: " + "; ".join(issues[:5])
|
|
84
|
+
if len(issues) > 5:
|
|
85
|
+
block += f" (+{len(issues) - 5} more)"
|
|
86
|
+
return output + block
|
|
87
|
+
|
|
88
|
+
# For other types, return as-is (refinement would need type-specific logic)
|
|
89
|
+
return output
|
|
90
|
+
|