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,202 +1,202 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Export Schema
|
|
3
|
-
|
|
4
|
-
Defines and validates export data format.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import json
|
|
8
|
-
import logging
|
|
9
|
-
from dataclasses import dataclass
|
|
10
|
-
from pathlib import Path
|
|
11
|
-
from typing import Any
|
|
12
|
-
|
|
13
|
-
logger = logging.getLogger(__name__)
|
|
14
|
-
|
|
15
|
-
# Export schema version
|
|
16
|
-
SCHEMA_VERSION = "1.0"
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
@dataclass
|
|
20
|
-
class ValidationResult:
|
|
21
|
-
"""Schema validation result."""
|
|
22
|
-
|
|
23
|
-
valid: bool
|
|
24
|
-
errors: list[str]
|
|
25
|
-
warnings: list[str]
|
|
26
|
-
schema_version: str
|
|
27
|
-
|
|
28
|
-
def __post_init__(self):
|
|
29
|
-
"""Initialize lists if None."""
|
|
30
|
-
if self.errors is None:
|
|
31
|
-
self.errors = []
|
|
32
|
-
if self.warnings is None:
|
|
33
|
-
self.warnings = []
|
|
34
|
-
|
|
35
|
-
def to_dict(self) -> dict[str, Any]:
|
|
36
|
-
"""Convert to dictionary."""
|
|
37
|
-
return {
|
|
38
|
-
"valid": self.valid,
|
|
39
|
-
"errors": self.errors,
|
|
40
|
-
"warnings": self.warnings,
|
|
41
|
-
"schema_version": self.schema_version,
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
class ExportSchema:
|
|
46
|
-
"""Defines and validates export data format."""
|
|
47
|
-
|
|
48
|
-
SCHEMA_VERSION = SCHEMA_VERSION
|
|
49
|
-
|
|
50
|
-
@staticmethod
|
|
51
|
-
def get_schema(version: str = "1.0") -> dict[str, Any]:
|
|
52
|
-
"""
|
|
53
|
-
Get JSON schema for specified version.
|
|
54
|
-
|
|
55
|
-
Args:
|
|
56
|
-
version: Schema version (default: "1.0")
|
|
57
|
-
|
|
58
|
-
Returns:
|
|
59
|
-
JSON schema dictionary
|
|
60
|
-
"""
|
|
61
|
-
if version == "1.0":
|
|
62
|
-
return {
|
|
63
|
-
"type": "object",
|
|
64
|
-
"required": ["export_metadata"],
|
|
65
|
-
"properties": {
|
|
66
|
-
"export_metadata": {
|
|
67
|
-
"type": "object",
|
|
68
|
-
"required": [
|
|
69
|
-
"export_timestamp",
|
|
70
|
-
"framework_version",
|
|
71
|
-
"export_version",
|
|
72
|
-
"schema_version",
|
|
73
|
-
],
|
|
74
|
-
"properties": {
|
|
75
|
-
"export_timestamp": {"type": "string"},
|
|
76
|
-
"framework_version": {"type": "string"},
|
|
77
|
-
"export_version": {"type": "string"},
|
|
78
|
-
"schema_version": {"type": "string"},
|
|
79
|
-
"project_hash": {"type": "string"},
|
|
80
|
-
"anonymization_applied": {"type": "boolean"},
|
|
81
|
-
"privacy_notice": {"type": "string"},
|
|
82
|
-
},
|
|
83
|
-
},
|
|
84
|
-
"capability_metrics": {"type": "object"},
|
|
85
|
-
"pattern_statistics": {"type": "object"},
|
|
86
|
-
"learning_effectiveness": {"type": "object"},
|
|
87
|
-
"analytics_data": {"type": "object"},
|
|
88
|
-
},
|
|
89
|
-
}
|
|
90
|
-
else:
|
|
91
|
-
raise ValueError(f"Unknown schema version: {version}")
|
|
92
|
-
|
|
93
|
-
@staticmethod
|
|
94
|
-
def validate(
|
|
95
|
-
data: dict[str, Any], version: str = "1.0"
|
|
96
|
-
) -> ValidationResult:
|
|
97
|
-
"""
|
|
98
|
-
Validate export data against schema.
|
|
99
|
-
|
|
100
|
-
Args:
|
|
101
|
-
data: Export data dictionary
|
|
102
|
-
version: Schema version to validate against
|
|
103
|
-
|
|
104
|
-
Returns:
|
|
105
|
-
ValidationResult instance
|
|
106
|
-
"""
|
|
107
|
-
errors: list[str] = []
|
|
108
|
-
warnings: list[str] = []
|
|
109
|
-
|
|
110
|
-
# Basic structure validation
|
|
111
|
-
if not isinstance(data, dict):
|
|
112
|
-
return ValidationResult(
|
|
113
|
-
valid=False,
|
|
114
|
-
errors=["Export data must be a dictionary"],
|
|
115
|
-
warnings=[],
|
|
116
|
-
schema_version=version,
|
|
117
|
-
)
|
|
118
|
-
|
|
119
|
-
# Check required fields
|
|
120
|
-
if "export_metadata" not in data:
|
|
121
|
-
errors.append("Missing required field: export_metadata")
|
|
122
|
-
|
|
123
|
-
# Validate export_metadata
|
|
124
|
-
if "export_metadata" in data:
|
|
125
|
-
metadata = data["export_metadata"]
|
|
126
|
-
if not isinstance(metadata, dict):
|
|
127
|
-
errors.append("export_metadata must be a dictionary")
|
|
128
|
-
else:
|
|
129
|
-
required_fields = [
|
|
130
|
-
"export_timestamp",
|
|
131
|
-
"framework_version",
|
|
132
|
-
"export_version",
|
|
133
|
-
"schema_version",
|
|
134
|
-
]
|
|
135
|
-
for field in required_fields:
|
|
136
|
-
if field not in metadata:
|
|
137
|
-
errors.append(
|
|
138
|
-
f"Missing required field in export_metadata: {field}"
|
|
139
|
-
)
|
|
140
|
-
|
|
141
|
-
# Check optional fields (warn if missing but don't fail)
|
|
142
|
-
optional_fields = [
|
|
143
|
-
"capability_metrics",
|
|
144
|
-
"pattern_statistics",
|
|
145
|
-
"learning_effectiveness",
|
|
146
|
-
"analytics_data",
|
|
147
|
-
]
|
|
148
|
-
for field in optional_fields:
|
|
149
|
-
if field not in data:
|
|
150
|
-
warnings.append(f"Optional field missing: {field}")
|
|
151
|
-
|
|
152
|
-
# Validate schema version matches
|
|
153
|
-
if "export_metadata" in data and isinstance(data["export_metadata"], dict):
|
|
154
|
-
if data["export_metadata"].get("schema_version") != version:
|
|
155
|
-
warnings.append(
|
|
156
|
-
f"Schema version mismatch: expected {version}, "
|
|
157
|
-
f"got {data['export_metadata'].get('schema_version')}"
|
|
158
|
-
)
|
|
159
|
-
|
|
160
|
-
valid = len(errors) == 0
|
|
161
|
-
return ValidationResult(
|
|
162
|
-
valid=valid, errors=errors, warnings=warnings, schema_version=version
|
|
163
|
-
)
|
|
164
|
-
|
|
165
|
-
@staticmethod
|
|
166
|
-
def migrate(
|
|
167
|
-
data: dict[str, Any], from_version: str, to_version: str
|
|
168
|
-
) -> dict[str, Any]:
|
|
169
|
-
"""
|
|
170
|
-
Migrate export data between schema versions.
|
|
171
|
-
|
|
172
|
-
Args:
|
|
173
|
-
data: Export data dictionary
|
|
174
|
-
from_version: Source schema version
|
|
175
|
-
to_version: Target schema version
|
|
176
|
-
|
|
177
|
-
Returns:
|
|
178
|
-
Migrated export data
|
|
179
|
-
|
|
180
|
-
Note:
|
|
181
|
-
Currently only version 1.0 is supported.
|
|
182
|
-
Migration logic will be added as new versions are introduced.
|
|
183
|
-
"""
|
|
184
|
-
if from_version == to_version:
|
|
185
|
-
return data
|
|
186
|
-
|
|
187
|
-
if from_version == "1.0" and to_version == "1.0":
|
|
188
|
-
return data
|
|
189
|
-
|
|
190
|
-
raise ValueError(
|
|
191
|
-
f"Migration from {from_version} to {to_version} not yet supported"
|
|
192
|
-
)
|
|
193
|
-
|
|
194
|
-
@staticmethod
|
|
195
|
-
def get_latest_version() -> str:
|
|
196
|
-
"""
|
|
197
|
-
Get latest schema version.
|
|
198
|
-
|
|
199
|
-
Returns:
|
|
200
|
-
Latest schema version string
|
|
201
|
-
"""
|
|
202
|
-
return SCHEMA_VERSION
|
|
1
|
+
"""
|
|
2
|
+
Export Schema
|
|
3
|
+
|
|
4
|
+
Defines and validates export data format.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
import logging
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
# Export schema version
|
|
16
|
+
SCHEMA_VERSION = "1.0"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@dataclass
|
|
20
|
+
class ValidationResult:
|
|
21
|
+
"""Schema validation result."""
|
|
22
|
+
|
|
23
|
+
valid: bool
|
|
24
|
+
errors: list[str]
|
|
25
|
+
warnings: list[str]
|
|
26
|
+
schema_version: str
|
|
27
|
+
|
|
28
|
+
def __post_init__(self):
|
|
29
|
+
"""Initialize lists if None."""
|
|
30
|
+
if self.errors is None:
|
|
31
|
+
self.errors = []
|
|
32
|
+
if self.warnings is None:
|
|
33
|
+
self.warnings = []
|
|
34
|
+
|
|
35
|
+
def to_dict(self) -> dict[str, Any]:
|
|
36
|
+
"""Convert to dictionary."""
|
|
37
|
+
return {
|
|
38
|
+
"valid": self.valid,
|
|
39
|
+
"errors": self.errors,
|
|
40
|
+
"warnings": self.warnings,
|
|
41
|
+
"schema_version": self.schema_version,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class ExportSchema:
|
|
46
|
+
"""Defines and validates export data format."""
|
|
47
|
+
|
|
48
|
+
SCHEMA_VERSION = SCHEMA_VERSION
|
|
49
|
+
|
|
50
|
+
@staticmethod
|
|
51
|
+
def get_schema(version: str = "1.0") -> dict[str, Any]:
|
|
52
|
+
"""
|
|
53
|
+
Get JSON schema for specified version.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
version: Schema version (default: "1.0")
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
JSON schema dictionary
|
|
60
|
+
"""
|
|
61
|
+
if version == "1.0":
|
|
62
|
+
return {
|
|
63
|
+
"type": "object",
|
|
64
|
+
"required": ["export_metadata"],
|
|
65
|
+
"properties": {
|
|
66
|
+
"export_metadata": {
|
|
67
|
+
"type": "object",
|
|
68
|
+
"required": [
|
|
69
|
+
"export_timestamp",
|
|
70
|
+
"framework_version",
|
|
71
|
+
"export_version",
|
|
72
|
+
"schema_version",
|
|
73
|
+
],
|
|
74
|
+
"properties": {
|
|
75
|
+
"export_timestamp": {"type": "string"},
|
|
76
|
+
"framework_version": {"type": "string"},
|
|
77
|
+
"export_version": {"type": "string"},
|
|
78
|
+
"schema_version": {"type": "string"},
|
|
79
|
+
"project_hash": {"type": "string"},
|
|
80
|
+
"anonymization_applied": {"type": "boolean"},
|
|
81
|
+
"privacy_notice": {"type": "string"},
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
"capability_metrics": {"type": "object"},
|
|
85
|
+
"pattern_statistics": {"type": "object"},
|
|
86
|
+
"learning_effectiveness": {"type": "object"},
|
|
87
|
+
"analytics_data": {"type": "object"},
|
|
88
|
+
},
|
|
89
|
+
}
|
|
90
|
+
else:
|
|
91
|
+
raise ValueError(f"Unknown schema version: {version}")
|
|
92
|
+
|
|
93
|
+
@staticmethod
|
|
94
|
+
def validate(
|
|
95
|
+
data: dict[str, Any], version: str = "1.0"
|
|
96
|
+
) -> ValidationResult:
|
|
97
|
+
"""
|
|
98
|
+
Validate export data against schema.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
data: Export data dictionary
|
|
102
|
+
version: Schema version to validate against
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
ValidationResult instance
|
|
106
|
+
"""
|
|
107
|
+
errors: list[str] = []
|
|
108
|
+
warnings: list[str] = []
|
|
109
|
+
|
|
110
|
+
# Basic structure validation
|
|
111
|
+
if not isinstance(data, dict):
|
|
112
|
+
return ValidationResult(
|
|
113
|
+
valid=False,
|
|
114
|
+
errors=["Export data must be a dictionary"],
|
|
115
|
+
warnings=[],
|
|
116
|
+
schema_version=version,
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
# Check required fields
|
|
120
|
+
if "export_metadata" not in data:
|
|
121
|
+
errors.append("Missing required field: export_metadata")
|
|
122
|
+
|
|
123
|
+
# Validate export_metadata
|
|
124
|
+
if "export_metadata" in data:
|
|
125
|
+
metadata = data["export_metadata"]
|
|
126
|
+
if not isinstance(metadata, dict):
|
|
127
|
+
errors.append("export_metadata must be a dictionary")
|
|
128
|
+
else:
|
|
129
|
+
required_fields = [
|
|
130
|
+
"export_timestamp",
|
|
131
|
+
"framework_version",
|
|
132
|
+
"export_version",
|
|
133
|
+
"schema_version",
|
|
134
|
+
]
|
|
135
|
+
for field in required_fields:
|
|
136
|
+
if field not in metadata:
|
|
137
|
+
errors.append(
|
|
138
|
+
f"Missing required field in export_metadata: {field}"
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
# Check optional fields (warn if missing but don't fail)
|
|
142
|
+
optional_fields = [
|
|
143
|
+
"capability_metrics",
|
|
144
|
+
"pattern_statistics",
|
|
145
|
+
"learning_effectiveness",
|
|
146
|
+
"analytics_data",
|
|
147
|
+
]
|
|
148
|
+
for field in optional_fields:
|
|
149
|
+
if field not in data:
|
|
150
|
+
warnings.append(f"Optional field missing: {field}")
|
|
151
|
+
|
|
152
|
+
# Validate schema version matches
|
|
153
|
+
if "export_metadata" in data and isinstance(data["export_metadata"], dict):
|
|
154
|
+
if data["export_metadata"].get("schema_version") != version:
|
|
155
|
+
warnings.append(
|
|
156
|
+
f"Schema version mismatch: expected {version}, "
|
|
157
|
+
f"got {data['export_metadata'].get('schema_version')}"
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
valid = len(errors) == 0
|
|
161
|
+
return ValidationResult(
|
|
162
|
+
valid=valid, errors=errors, warnings=warnings, schema_version=version
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
@staticmethod
|
|
166
|
+
def migrate(
|
|
167
|
+
data: dict[str, Any], from_version: str, to_version: str
|
|
168
|
+
) -> dict[str, Any]:
|
|
169
|
+
"""
|
|
170
|
+
Migrate export data between schema versions.
|
|
171
|
+
|
|
172
|
+
Args:
|
|
173
|
+
data: Export data dictionary
|
|
174
|
+
from_version: Source schema version
|
|
175
|
+
to_version: Target schema version
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
Migrated export data
|
|
179
|
+
|
|
180
|
+
Note:
|
|
181
|
+
Currently only version 1.0 is supported.
|
|
182
|
+
Migration logic will be added as new versions are introduced.
|
|
183
|
+
"""
|
|
184
|
+
if from_version == to_version:
|
|
185
|
+
return data
|
|
186
|
+
|
|
187
|
+
if from_version == "1.0" and to_version == "1.0":
|
|
188
|
+
return data
|
|
189
|
+
|
|
190
|
+
raise ValueError(
|
|
191
|
+
f"Migration from {from_version} to {to_version} not yet supported"
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
@staticmethod
|
|
195
|
+
def get_latest_version() -> str:
|
|
196
|
+
"""
|
|
197
|
+
Get latest schema version.
|
|
198
|
+
|
|
199
|
+
Returns:
|
|
200
|
+
Latest schema version string
|
|
201
|
+
"""
|
|
202
|
+
return SCHEMA_VERSION
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
"""
|
|
2
|
-
External feedback data models for TappsCodingAgents evaluation.
|
|
3
|
-
|
|
4
|
-
These models define the structure for feedback submitted by external projects
|
|
5
|
-
about TappsCodingAgents performance.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from datetime import datetime, UTC
|
|
9
|
-
from typing import Any
|
|
10
|
-
from uuid import UUID, uuid4
|
|
11
|
-
|
|
12
|
-
from pydantic import BaseModel, Field, field_validator, ConfigDict
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class FeedbackContext(BaseModel):
|
|
16
|
-
"""Optional context information for feedback."""
|
|
17
|
-
|
|
18
|
-
workflow_id: str | None = Field(None, description="Workflow identifier")
|
|
19
|
-
agent_id: str | None = Field(None, description="Agent identifier")
|
|
20
|
-
task_type: str | None = Field(None, description="Task type (e.g., 'code-review')")
|
|
21
|
-
timestamp: datetime | None = Field(None, description="Context timestamp")
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class FeedbackMetrics(BaseModel):
|
|
25
|
-
"""Optional performance metrics."""
|
|
26
|
-
|
|
27
|
-
execution_time_seconds: float | None = Field(None, description="Execution time in seconds")
|
|
28
|
-
quality_score: float | None = Field(None, description="Quality score")
|
|
29
|
-
code_lines_processed: int | None = Field(None, description="Lines of code processed")
|
|
30
|
-
additional: dict[str, Any] | None = Field(None, description="Additional metrics")
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
class ExternalFeedbackData(BaseModel):
|
|
34
|
-
"""External feedback data model for TappsCodingAgents evaluation."""
|
|
35
|
-
|
|
36
|
-
feedback_id: str = Field(
|
|
37
|
-
default_factory=lambda: str(uuid4()),
|
|
38
|
-
description="Unique feedback identifier (UUID)",
|
|
39
|
-
)
|
|
40
|
-
timestamp: datetime = Field(
|
|
41
|
-
default_factory=lambda: datetime.now(UTC),
|
|
42
|
-
description="Feedback submission timestamp",
|
|
43
|
-
)
|
|
44
|
-
performance_ratings: dict[str, float] = Field(
|
|
45
|
-
...,
|
|
46
|
-
min_length=1,
|
|
47
|
-
description="Performance ratings (metric name -> rating, typically 1.0-10.0)",
|
|
48
|
-
)
|
|
49
|
-
suggestions: list[str] = Field(
|
|
50
|
-
...,
|
|
51
|
-
min_length=1,
|
|
52
|
-
description="List of improvement suggestions",
|
|
53
|
-
)
|
|
54
|
-
context: FeedbackContext | None = Field(None, description="Optional context information")
|
|
55
|
-
metrics: FeedbackMetrics | None = Field(None, description="Optional performance metrics")
|
|
56
|
-
project_id: str | None = Field(None, description="Optional project identifier")
|
|
57
|
-
|
|
58
|
-
@field_validator("performance_ratings")
|
|
59
|
-
@classmethod
|
|
60
|
-
def validate_ratings(cls, v: dict[str, float]) -> dict[str, float]:
|
|
61
|
-
"""Validate rating values are in reasonable range."""
|
|
62
|
-
for key, value in v.items():
|
|
63
|
-
if not isinstance(value, (int, float)):
|
|
64
|
-
raise ValueError(f"Rating '{key}' must be numeric, got {type(value).__name__}")
|
|
65
|
-
if value < 0.0 or value > 10.0:
|
|
66
|
-
raise ValueError(f"Rating '{key}' must be between 0.0 and 10.0, got {value}")
|
|
67
|
-
return v
|
|
68
|
-
|
|
69
|
-
@field_validator("suggestions")
|
|
70
|
-
@classmethod
|
|
71
|
-
def validate_suggestions(cls, v: list[str]) -> list[str]:
|
|
72
|
-
"""Validate suggestions are non-empty strings."""
|
|
73
|
-
if not v:
|
|
74
|
-
raise ValueError("At least one suggestion is required")
|
|
75
|
-
for suggestion in v:
|
|
76
|
-
if not isinstance(suggestion, str) or not suggestion.strip():
|
|
77
|
-
raise ValueError("Suggestions must be non-empty strings")
|
|
78
|
-
return v
|
|
79
|
-
|
|
80
|
-
def to_dict(self) -> dict[str, Any]:
|
|
81
|
-
"""Convert to dictionary for JSON serialization."""
|
|
82
|
-
data = self.model_dump(mode="json")
|
|
83
|
-
# Ensure timestamp is ISO format string
|
|
84
|
-
if isinstance(data.get("timestamp"), datetime):
|
|
85
|
-
data["timestamp"] = data["timestamp"].isoformat()
|
|
86
|
-
return data
|
|
87
|
-
|
|
88
|
-
@classmethod
|
|
89
|
-
def from_dict(cls, data: dict[str, Any]) -> "ExternalFeedbackData":
|
|
90
|
-
"""Create from dictionary (handles timestamp conversion)."""
|
|
91
|
-
# Convert timestamp string to datetime if needed
|
|
92
|
-
if "timestamp" in data and isinstance(data["timestamp"], str):
|
|
93
|
-
try:
|
|
94
|
-
data["timestamp"] = datetime.fromisoformat(data["timestamp"].replace("Z", "+00:00"))
|
|
95
|
-
except ValueError:
|
|
96
|
-
# Fallback: use current time
|
|
97
|
-
data["timestamp"] = datetime.now(UTC)
|
|
98
|
-
return cls(**data)
|
|
99
|
-
|
|
100
|
-
model_config = ConfigDict(
|
|
101
|
-
# JSON serialization handled by to_dict() method
|
|
102
|
-
)
|
|
1
|
+
"""
|
|
2
|
+
External feedback data models for TappsCodingAgents evaluation.
|
|
3
|
+
|
|
4
|
+
These models define the structure for feedback submitted by external projects
|
|
5
|
+
about TappsCodingAgents performance.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from datetime import datetime, UTC
|
|
9
|
+
from typing import Any
|
|
10
|
+
from uuid import UUID, uuid4
|
|
11
|
+
|
|
12
|
+
from pydantic import BaseModel, Field, field_validator, ConfigDict
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class FeedbackContext(BaseModel):
|
|
16
|
+
"""Optional context information for feedback."""
|
|
17
|
+
|
|
18
|
+
workflow_id: str | None = Field(None, description="Workflow identifier")
|
|
19
|
+
agent_id: str | None = Field(None, description="Agent identifier")
|
|
20
|
+
task_type: str | None = Field(None, description="Task type (e.g., 'code-review')")
|
|
21
|
+
timestamp: datetime | None = Field(None, description="Context timestamp")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class FeedbackMetrics(BaseModel):
|
|
25
|
+
"""Optional performance metrics."""
|
|
26
|
+
|
|
27
|
+
execution_time_seconds: float | None = Field(None, description="Execution time in seconds")
|
|
28
|
+
quality_score: float | None = Field(None, description="Quality score")
|
|
29
|
+
code_lines_processed: int | None = Field(None, description="Lines of code processed")
|
|
30
|
+
additional: dict[str, Any] | None = Field(None, description="Additional metrics")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class ExternalFeedbackData(BaseModel):
|
|
34
|
+
"""External feedback data model for TappsCodingAgents evaluation."""
|
|
35
|
+
|
|
36
|
+
feedback_id: str = Field(
|
|
37
|
+
default_factory=lambda: str(uuid4()),
|
|
38
|
+
description="Unique feedback identifier (UUID)",
|
|
39
|
+
)
|
|
40
|
+
timestamp: datetime = Field(
|
|
41
|
+
default_factory=lambda: datetime.now(UTC),
|
|
42
|
+
description="Feedback submission timestamp",
|
|
43
|
+
)
|
|
44
|
+
performance_ratings: dict[str, float] = Field(
|
|
45
|
+
...,
|
|
46
|
+
min_length=1,
|
|
47
|
+
description="Performance ratings (metric name -> rating, typically 1.0-10.0)",
|
|
48
|
+
)
|
|
49
|
+
suggestions: list[str] = Field(
|
|
50
|
+
...,
|
|
51
|
+
min_length=1,
|
|
52
|
+
description="List of improvement suggestions",
|
|
53
|
+
)
|
|
54
|
+
context: FeedbackContext | None = Field(None, description="Optional context information")
|
|
55
|
+
metrics: FeedbackMetrics | None = Field(None, description="Optional performance metrics")
|
|
56
|
+
project_id: str | None = Field(None, description="Optional project identifier")
|
|
57
|
+
|
|
58
|
+
@field_validator("performance_ratings")
|
|
59
|
+
@classmethod
|
|
60
|
+
def validate_ratings(cls, v: dict[str, float]) -> dict[str, float]:
|
|
61
|
+
"""Validate rating values are in reasonable range."""
|
|
62
|
+
for key, value in v.items():
|
|
63
|
+
if not isinstance(value, (int, float)):
|
|
64
|
+
raise ValueError(f"Rating '{key}' must be numeric, got {type(value).__name__}")
|
|
65
|
+
if value < 0.0 or value > 10.0:
|
|
66
|
+
raise ValueError(f"Rating '{key}' must be between 0.0 and 10.0, got {value}")
|
|
67
|
+
return v
|
|
68
|
+
|
|
69
|
+
@field_validator("suggestions")
|
|
70
|
+
@classmethod
|
|
71
|
+
def validate_suggestions(cls, v: list[str]) -> list[str]:
|
|
72
|
+
"""Validate suggestions are non-empty strings."""
|
|
73
|
+
if not v:
|
|
74
|
+
raise ValueError("At least one suggestion is required")
|
|
75
|
+
for suggestion in v:
|
|
76
|
+
if not isinstance(suggestion, str) or not suggestion.strip():
|
|
77
|
+
raise ValueError("Suggestions must be non-empty strings")
|
|
78
|
+
return v
|
|
79
|
+
|
|
80
|
+
def to_dict(self) -> dict[str, Any]:
|
|
81
|
+
"""Convert to dictionary for JSON serialization."""
|
|
82
|
+
data = self.model_dump(mode="json")
|
|
83
|
+
# Ensure timestamp is ISO format string
|
|
84
|
+
if isinstance(data.get("timestamp"), datetime):
|
|
85
|
+
data["timestamp"] = data["timestamp"].isoformat()
|
|
86
|
+
return data
|
|
87
|
+
|
|
88
|
+
@classmethod
|
|
89
|
+
def from_dict(cls, data: dict[str, Any]) -> "ExternalFeedbackData":
|
|
90
|
+
"""Create from dictionary (handles timestamp conversion)."""
|
|
91
|
+
# Convert timestamp string to datetime if needed
|
|
92
|
+
if "timestamp" in data and isinstance(data["timestamp"], str):
|
|
93
|
+
try:
|
|
94
|
+
data["timestamp"] = datetime.fromisoformat(data["timestamp"].replace("Z", "+00:00"))
|
|
95
|
+
except ValueError:
|
|
96
|
+
# Fallback: use current time
|
|
97
|
+
data["timestamp"] = datetime.now(UTC)
|
|
98
|
+
return cls(**data)
|
|
99
|
+
|
|
100
|
+
model_config = ConfigDict(
|
|
101
|
+
# JSON serialization handled by to_dict() method
|
|
102
|
+
)
|