tapps-agents 3.6.0__py3-none-any.whl → 3.6.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tapps_agents/__init__.py +2 -2
- tapps_agents/agents/__init__.py +22 -22
- tapps_agents/agents/analyst/__init__.py +5 -5
- tapps_agents/agents/architect/__init__.py +5 -5
- tapps_agents/agents/architect/agent.py +1033 -1033
- tapps_agents/agents/architect/pattern_detector.py +75 -75
- tapps_agents/agents/cleanup/__init__.py +7 -7
- tapps_agents/agents/cleanup/agent.py +445 -445
- tapps_agents/agents/debugger/__init__.py +7 -7
- tapps_agents/agents/debugger/agent.py +310 -310
- tapps_agents/agents/debugger/error_analyzer.py +437 -437
- tapps_agents/agents/designer/__init__.py +5 -5
- tapps_agents/agents/designer/agent.py +786 -786
- tapps_agents/agents/designer/visual_designer.py +638 -638
- tapps_agents/agents/documenter/__init__.py +7 -7
- tapps_agents/agents/documenter/agent.py +531 -531
- tapps_agents/agents/documenter/doc_generator.py +472 -472
- tapps_agents/agents/documenter/doc_validator.py +393 -393
- tapps_agents/agents/documenter/framework_doc_updater.py +493 -493
- tapps_agents/agents/enhancer/__init__.py +7 -7
- tapps_agents/agents/evaluator/__init__.py +7 -7
- tapps_agents/agents/evaluator/agent.py +443 -443
- tapps_agents/agents/evaluator/priority_evaluator.py +641 -641
- tapps_agents/agents/evaluator/quality_analyzer.py +147 -147
- tapps_agents/agents/evaluator/report_generator.py +344 -344
- tapps_agents/agents/evaluator/usage_analyzer.py +192 -192
- tapps_agents/agents/evaluator/workflow_analyzer.py +189 -189
- tapps_agents/agents/implementer/__init__.py +7 -7
- tapps_agents/agents/implementer/agent.py +798 -798
- tapps_agents/agents/implementer/auto_fix.py +1119 -1119
- tapps_agents/agents/implementer/code_generator.py +73 -73
- tapps_agents/agents/improver/__init__.py +1 -1
- tapps_agents/agents/improver/agent.py +753 -753
- tapps_agents/agents/ops/__init__.py +1 -1
- tapps_agents/agents/ops/agent.py +619 -619
- tapps_agents/agents/ops/dependency_analyzer.py +600 -600
- tapps_agents/agents/orchestrator/__init__.py +5 -5
- tapps_agents/agents/orchestrator/agent.py +522 -522
- tapps_agents/agents/planner/__init__.py +7 -7
- tapps_agents/agents/planner/agent.py +1127 -1127
- tapps_agents/agents/reviewer/__init__.py +24 -24
- tapps_agents/agents/reviewer/agent.py +3513 -3513
- tapps_agents/agents/reviewer/aggregator.py +213 -213
- tapps_agents/agents/reviewer/batch_review.py +448 -448
- tapps_agents/agents/reviewer/cache.py +443 -443
- tapps_agents/agents/reviewer/context7_enhancer.py +630 -630
- tapps_agents/agents/reviewer/context_detector.py +203 -203
- tapps_agents/agents/reviewer/docker_compose_validator.py +158 -158
- tapps_agents/agents/reviewer/dockerfile_validator.py +176 -176
- tapps_agents/agents/reviewer/error_handling.py +126 -126
- tapps_agents/agents/reviewer/feedback_generator.py +490 -490
- tapps_agents/agents/reviewer/influxdb_validator.py +316 -316
- tapps_agents/agents/reviewer/issue_tracking.py +169 -169
- tapps_agents/agents/reviewer/library_detector.py +295 -295
- tapps_agents/agents/reviewer/library_patterns.py +268 -268
- tapps_agents/agents/reviewer/maintainability_scorer.py +593 -593
- tapps_agents/agents/reviewer/metric_strategies.py +276 -276
- tapps_agents/agents/reviewer/mqtt_validator.py +160 -160
- tapps_agents/agents/reviewer/output_enhancer.py +105 -105
- tapps_agents/agents/reviewer/pattern_detector.py +241 -241
- tapps_agents/agents/reviewer/performance_scorer.py +357 -357
- tapps_agents/agents/reviewer/phased_review.py +516 -516
- tapps_agents/agents/reviewer/progressive_review.py +435 -435
- tapps_agents/agents/reviewer/react_scorer.py +331 -331
- tapps_agents/agents/reviewer/score_constants.py +228 -228
- tapps_agents/agents/reviewer/score_validator.py +507 -507
- tapps_agents/agents/reviewer/scorer_registry.py +373 -373
- tapps_agents/agents/reviewer/service_discovery.py +534 -534
- tapps_agents/agents/reviewer/tools/parallel_executor.py +581 -581
- tapps_agents/agents/reviewer/tools/ruff_grouping.py +250 -250
- tapps_agents/agents/reviewer/tools/scoped_mypy.py +284 -284
- tapps_agents/agents/reviewer/typescript_scorer.py +1142 -1142
- tapps_agents/agents/reviewer/validation.py +208 -208
- tapps_agents/agents/reviewer/websocket_validator.py +132 -132
- tapps_agents/agents/tester/__init__.py +7 -7
- tapps_agents/agents/tester/accessibility_auditor.py +309 -309
- tapps_agents/agents/tester/agent.py +1080 -1080
- tapps_agents/agents/tester/batch_generator.py +54 -54
- tapps_agents/agents/tester/context_learner.py +51 -51
- tapps_agents/agents/tester/coverage_analyzer.py +386 -386
- tapps_agents/agents/tester/coverage_test_generator.py +290 -290
- tapps_agents/agents/tester/debug_enhancer.py +238 -238
- tapps_agents/agents/tester/device_emulator.py +241 -241
- tapps_agents/agents/tester/integration_generator.py +62 -62
- tapps_agents/agents/tester/network_recorder.py +300 -300
- tapps_agents/agents/tester/performance_monitor.py +320 -320
- tapps_agents/agents/tester/test_fixer.py +316 -316
- tapps_agents/agents/tester/test_generator.py +632 -632
- tapps_agents/agents/tester/trace_manager.py +234 -234
- tapps_agents/agents/tester/visual_regression.py +291 -291
- tapps_agents/analysis/pattern_detector.py +36 -36
- tapps_agents/beads/hydration.py +213 -213
- tapps_agents/beads/parse.py +32 -32
- tapps_agents/beads/specs.py +206 -206
- tapps_agents/cli/__init__.py +9 -9
- tapps_agents/cli/__main__.py +8 -8
- tapps_agents/cli/base.py +478 -478
- tapps_agents/cli/command_classifier.py +72 -72
- tapps_agents/cli/commands/__init__.py +2 -2
- tapps_agents/cli/commands/analyst.py +173 -173
- tapps_agents/cli/commands/architect.py +109 -109
- tapps_agents/cli/commands/cleanup_agent.py +92 -92
- tapps_agents/cli/commands/common.py +126 -126
- tapps_agents/cli/commands/debugger.py +90 -90
- tapps_agents/cli/commands/designer.py +112 -112
- tapps_agents/cli/commands/documenter.py +136 -136
- tapps_agents/cli/commands/enhancer.py +110 -110
- tapps_agents/cli/commands/evaluator.py +255 -255
- tapps_agents/cli/commands/implementer.py +301 -301
- tapps_agents/cli/commands/improver.py +91 -91
- tapps_agents/cli/commands/knowledge.py +111 -111
- tapps_agents/cli/commands/learning.py +172 -172
- tapps_agents/cli/commands/observability.py +283 -283
- tapps_agents/cli/commands/ops.py +135 -135
- tapps_agents/cli/commands/orchestrator.py +116 -116
- tapps_agents/cli/commands/planner.py +237 -237
- tapps_agents/cli/commands/reviewer.py +1872 -1872
- tapps_agents/cli/commands/status.py +285 -285
- tapps_agents/cli/commands/task.py +227 -227
- tapps_agents/cli/commands/tester.py +191 -191
- tapps_agents/cli/feedback.py +936 -936
- tapps_agents/cli/formatters.py +608 -608
- tapps_agents/cli/help/__init__.py +7 -7
- tapps_agents/cli/help/static_help.py +425 -425
- tapps_agents/cli/network_detection.py +110 -110
- tapps_agents/cli/output_compactor.py +274 -274
- tapps_agents/cli/parsers/__init__.py +2 -2
- tapps_agents/cli/parsers/analyst.py +186 -186
- tapps_agents/cli/parsers/architect.py +167 -167
- tapps_agents/cli/parsers/cleanup_agent.py +228 -228
- tapps_agents/cli/parsers/debugger.py +116 -116
- tapps_agents/cli/parsers/designer.py +182 -182
- tapps_agents/cli/parsers/documenter.py +134 -134
- tapps_agents/cli/parsers/enhancer.py +113 -113
- tapps_agents/cli/parsers/evaluator.py +213 -213
- tapps_agents/cli/parsers/implementer.py +168 -168
- tapps_agents/cli/parsers/improver.py +132 -132
- tapps_agents/cli/parsers/ops.py +159 -159
- tapps_agents/cli/parsers/orchestrator.py +98 -98
- tapps_agents/cli/parsers/planner.py +145 -145
- tapps_agents/cli/parsers/reviewer.py +462 -462
- tapps_agents/cli/parsers/tester.py +124 -124
- tapps_agents/cli/progress_heartbeat.py +254 -254
- tapps_agents/cli/streaming_progress.py +336 -336
- tapps_agents/cli/utils/__init__.py +6 -6
- tapps_agents/cli/utils/agent_lifecycle.py +48 -48
- tapps_agents/cli/utils/error_formatter.py +82 -82
- tapps_agents/cli/utils/error_recovery.py +188 -188
- tapps_agents/cli/utils/output_handler.py +59 -59
- tapps_agents/cli/utils/prompt_enhancer.py +319 -319
- tapps_agents/cli/validators/__init__.py +9 -9
- tapps_agents/cli/validators/command_validator.py +81 -81
- tapps_agents/context7/__init__.py +112 -112
- tapps_agents/context7/agent_integration.py +869 -869
- tapps_agents/context7/analytics.py +382 -382
- tapps_agents/context7/analytics_dashboard.py +299 -299
- tapps_agents/context7/async_cache.py +681 -681
- tapps_agents/context7/backup_client.py +958 -958
- tapps_agents/context7/cache_locking.py +194 -194
- tapps_agents/context7/cache_metadata.py +214 -214
- tapps_agents/context7/cache_prewarm.py +488 -488
- tapps_agents/context7/cache_structure.py +168 -168
- tapps_agents/context7/cache_warming.py +604 -604
- tapps_agents/context7/circuit_breaker.py +376 -376
- tapps_agents/context7/cleanup.py +461 -461
- tapps_agents/context7/commands.py +858 -858
- tapps_agents/context7/credential_validation.py +276 -276
- tapps_agents/context7/cross_reference_resolver.py +168 -168
- tapps_agents/context7/cross_references.py +424 -424
- tapps_agents/context7/doc_manager.py +225 -225
- tapps_agents/context7/fuzzy_matcher.py +369 -369
- tapps_agents/context7/kb_cache.py +404 -404
- tapps_agents/context7/language_detector.py +219 -219
- tapps_agents/context7/library_detector.py +725 -725
- tapps_agents/context7/lookup.py +738 -738
- tapps_agents/context7/metadata.py +258 -258
- tapps_agents/context7/refresh_queue.py +300 -300
- tapps_agents/context7/security.py +373 -373
- tapps_agents/context7/staleness_policies.py +278 -278
- tapps_agents/context7/tiles_integration.py +47 -47
- tapps_agents/continuous_bug_fix/__init__.py +20 -20
- tapps_agents/continuous_bug_fix/bug_finder.py +306 -306
- tapps_agents/continuous_bug_fix/bug_fix_coordinator.py +177 -177
- tapps_agents/continuous_bug_fix/commit_manager.py +178 -178
- tapps_agents/continuous_bug_fix/continuous_bug_fixer.py +322 -322
- tapps_agents/continuous_bug_fix/proactive_bug_finder.py +285 -285
- tapps_agents/core/__init__.py +298 -298
- tapps_agents/core/adaptive_cache_config.py +432 -432
- tapps_agents/core/agent_base.py +647 -647
- tapps_agents/core/agent_cache.py +466 -466
- tapps_agents/core/agent_learning.py +1865 -1865
- tapps_agents/core/analytics_dashboard.py +563 -563
- tapps_agents/core/analytics_enhancements.py +597 -597
- tapps_agents/core/anonymization.py +274 -274
- tapps_agents/core/ast_parser.py +228 -228
- tapps_agents/core/async_file_ops.py +402 -402
- tapps_agents/core/best_practice_consultant.py +299 -299
- tapps_agents/core/brownfield_analyzer.py +299 -299
- tapps_agents/core/brownfield_review.py +541 -541
- tapps_agents/core/browser_controller.py +513 -513
- tapps_agents/core/capability_registry.py +418 -418
- tapps_agents/core/change_impact_analyzer.py +190 -190
- tapps_agents/core/checkpoint_manager.py +377 -377
- tapps_agents/core/code_generator.py +329 -329
- tapps_agents/core/code_validator.py +276 -276
- tapps_agents/core/command_registry.py +327 -327
- tapps_agents/core/context_gathering/__init__.py +2 -2
- tapps_agents/core/context_gathering/repository_explorer.py +28 -28
- tapps_agents/core/context_intelligence/__init__.py +2 -2
- tapps_agents/core/context_intelligence/relevance_scorer.py +24 -24
- tapps_agents/core/context_intelligence/token_budget_manager.py +27 -27
- tapps_agents/core/context_manager.py +240 -240
- tapps_agents/core/cursor_feedback_monitor.py +146 -146
- tapps_agents/core/cursor_verification.py +290 -290
- tapps_agents/core/customization_loader.py +280 -280
- tapps_agents/core/customization_schema.py +260 -260
- tapps_agents/core/customization_template.py +238 -238
- tapps_agents/core/debug_logger.py +124 -124
- tapps_agents/core/design_validator.py +298 -298
- tapps_agents/core/diagram_generator.py +226 -226
- tapps_agents/core/docker_utils.py +232 -232
- tapps_agents/core/document_generator.py +617 -617
- tapps_agents/core/domain_detector.py +30 -30
- tapps_agents/core/error_envelope.py +454 -454
- tapps_agents/core/error_handler.py +270 -270
- tapps_agents/core/estimation_tracker.py +189 -189
- tapps_agents/core/eval_prompt_engine.py +116 -116
- tapps_agents/core/evaluation_base.py +119 -119
- tapps_agents/core/evaluation_models.py +320 -320
- tapps_agents/core/evaluation_orchestrator.py +225 -225
- tapps_agents/core/evaluators/__init__.py +7 -7
- tapps_agents/core/evaluators/architectural_evaluator.py +205 -205
- tapps_agents/core/evaluators/behavioral_evaluator.py +160 -160
- tapps_agents/core/evaluators/performance_profile_evaluator.py +160 -160
- tapps_agents/core/evaluators/security_posture_evaluator.py +148 -148
- tapps_agents/core/evaluators/spec_compliance_evaluator.py +181 -181
- tapps_agents/core/exceptions.py +107 -107
- tapps_agents/core/expert_config_generator.py +293 -293
- tapps_agents/core/export_schema.py +202 -202
- tapps_agents/core/external_feedback_models.py +102 -102
- tapps_agents/core/external_feedback_storage.py +213 -213
- tapps_agents/core/fallback_strategy.py +314 -314
- tapps_agents/core/feedback_analyzer.py +162 -162
- tapps_agents/core/feedback_collector.py +178 -178
- tapps_agents/core/git_operations.py +445 -445
- tapps_agents/core/hardware_profiler.py +151 -151
- tapps_agents/core/instructions.py +324 -324
- tapps_agents/core/io_guardrails.py +69 -69
- tapps_agents/core/issue_manifest.py +249 -249
- tapps_agents/core/issue_schema.py +139 -139
- tapps_agents/core/json_utils.py +128 -128
- tapps_agents/core/knowledge_graph.py +446 -446
- tapps_agents/core/language_detector.py +296 -296
- tapps_agents/core/learning_confidence.py +242 -242
- tapps_agents/core/learning_dashboard.py +246 -246
- tapps_agents/core/learning_decision.py +384 -384
- tapps_agents/core/learning_explainability.py +578 -578
- tapps_agents/core/learning_export.py +287 -287
- tapps_agents/core/learning_integration.py +228 -228
- tapps_agents/core/llm_behavior.py +232 -232
- tapps_agents/core/long_duration_support.py +786 -786
- tapps_agents/core/mcp_setup.py +106 -106
- tapps_agents/core/memory_integration.py +396 -396
- tapps_agents/core/meta_learning.py +666 -666
- tapps_agents/core/module_path_sanitizer.py +199 -199
- tapps_agents/core/multi_agent_orchestrator.py +382 -382
- tapps_agents/core/network_errors.py +125 -125
- tapps_agents/core/nfr_validator.py +336 -336
- tapps_agents/core/offline_mode.py +158 -158
- tapps_agents/core/output_contracts.py +300 -300
- tapps_agents/core/output_formatter.py +300 -300
- tapps_agents/core/path_normalizer.py +174 -174
- tapps_agents/core/path_validator.py +322 -322
- tapps_agents/core/pattern_library.py +250 -250
- tapps_agents/core/performance_benchmark.py +301 -301
- tapps_agents/core/performance_monitor.py +184 -184
- tapps_agents/core/playwright_mcp_controller.py +771 -771
- tapps_agents/core/policy_loader.py +135 -135
- tapps_agents/core/progress.py +166 -166
- tapps_agents/core/project_profile.py +354 -354
- tapps_agents/core/project_type_detector.py +454 -454
- tapps_agents/core/prompt_base.py +223 -223
- tapps_agents/core/prompt_learning/__init__.py +2 -2
- tapps_agents/core/prompt_learning/learning_loop.py +24 -24
- tapps_agents/core/prompt_learning/project_prompt_store.py +25 -25
- tapps_agents/core/prompt_learning/skills_prompt_analyzer.py +35 -35
- tapps_agents/core/prompt_optimization/__init__.py +6 -6
- tapps_agents/core/prompt_optimization/ab_tester.py +114 -114
- tapps_agents/core/prompt_optimization/correlation_analyzer.py +160 -160
- tapps_agents/core/prompt_optimization/progressive_refiner.py +129 -129
- tapps_agents/core/prompt_optimization/prompt_library.py +37 -37
- tapps_agents/core/requirements_evaluator.py +431 -431
- tapps_agents/core/resource_aware_executor.py +449 -449
- tapps_agents/core/resource_monitor.py +343 -343
- tapps_agents/core/resume_handler.py +298 -298
- tapps_agents/core/retry_handler.py +197 -197
- tapps_agents/core/review_checklists.py +479 -479
- tapps_agents/core/role_loader.py +201 -201
- tapps_agents/core/role_template_loader.py +201 -201
- tapps_agents/core/runtime_mode.py +60 -60
- tapps_agents/core/security_scanner.py +342 -342
- tapps_agents/core/skill_agent_registry.py +194 -194
- tapps_agents/core/skill_integration.py +208 -208
- tapps_agents/core/skill_loader.py +492 -492
- tapps_agents/core/skill_template.py +341 -341
- tapps_agents/core/skill_validator.py +478 -478
- tapps_agents/core/stack_analyzer.py +35 -35
- tapps_agents/core/startup.py +174 -174
- tapps_agents/core/storage_manager.py +397 -397
- tapps_agents/core/storage_models.py +166 -166
- tapps_agents/core/story_evaluator.py +410 -410
- tapps_agents/core/subprocess_utils.py +170 -170
- tapps_agents/core/task_duration.py +296 -296
- tapps_agents/core/task_memory.py +582 -582
- tapps_agents/core/task_state.py +226 -226
- tapps_agents/core/tech_stack_priorities.py +208 -208
- tapps_agents/core/temp_directory.py +194 -194
- tapps_agents/core/template_merger.py +600 -600
- tapps_agents/core/template_selector.py +280 -280
- tapps_agents/core/test_generator.py +286 -286
- tapps_agents/core/tiered_context.py +253 -253
- tapps_agents/core/token_monitor.py +345 -345
- tapps_agents/core/traceability.py +254 -254
- tapps_agents/core/trajectory_tracker.py +50 -50
- tapps_agents/core/unicode_safe.py +143 -143
- tapps_agents/core/unified_cache_config.py +170 -170
- tapps_agents/core/unified_state.py +324 -324
- tapps_agents/core/validate_cursor_setup.py +237 -237
- tapps_agents/core/validation_registry.py +136 -136
- tapps_agents/core/validators/__init__.py +4 -4
- tapps_agents/core/validators/python_validator.py +87 -87
- tapps_agents/core/verification_agent.py +90 -90
- tapps_agents/core/visual_feedback.py +644 -644
- tapps_agents/core/workflow_validator.py +197 -197
- tapps_agents/core/worktree.py +367 -367
- tapps_agents/docker/__init__.py +10 -10
- tapps_agents/docker/analyzer.py +186 -186
- tapps_agents/docker/debugger.py +229 -229
- tapps_agents/docker/error_patterns.py +216 -216
- tapps_agents/epic/__init__.py +22 -22
- tapps_agents/epic/beads_sync.py +115 -115
- tapps_agents/epic/markdown_sync.py +105 -105
- tapps_agents/epic/models.py +96 -96
- tapps_agents/experts/__init__.py +163 -163
- tapps_agents/experts/agent_integration.py +243 -243
- tapps_agents/experts/auto_generator.py +331 -331
- tapps_agents/experts/base_expert.py +536 -536
- tapps_agents/experts/builtin_registry.py +261 -261
- tapps_agents/experts/business_metrics.py +565 -565
- tapps_agents/experts/cache.py +266 -266
- tapps_agents/experts/confidence_breakdown.py +306 -306
- tapps_agents/experts/confidence_calculator.py +336 -336
- tapps_agents/experts/confidence_metrics.py +236 -236
- tapps_agents/experts/domain_config.py +311 -311
- tapps_agents/experts/domain_detector.py +550 -550
- tapps_agents/experts/domain_utils.py +84 -84
- tapps_agents/experts/expert_config.py +113 -113
- tapps_agents/experts/expert_engine.py +465 -465
- tapps_agents/experts/expert_registry.py +744 -744
- tapps_agents/experts/expert_synthesizer.py +70 -70
- tapps_agents/experts/governance.py +197 -197
- tapps_agents/experts/history_logger.py +312 -312
- tapps_agents/experts/knowledge/README.md +180 -180
- tapps_agents/experts/knowledge/accessibility/accessible-forms.md +331 -331
- tapps_agents/experts/knowledge/accessibility/aria-patterns.md +344 -344
- tapps_agents/experts/knowledge/accessibility/color-contrast.md +285 -285
- tapps_agents/experts/knowledge/accessibility/keyboard-navigation.md +332 -332
- tapps_agents/experts/knowledge/accessibility/screen-readers.md +282 -282
- tapps_agents/experts/knowledge/accessibility/semantic-html.md +355 -355
- tapps_agents/experts/knowledge/accessibility/testing-accessibility.md +369 -369
- tapps_agents/experts/knowledge/accessibility/wcag-2.1.md +296 -296
- tapps_agents/experts/knowledge/accessibility/wcag-2.2.md +211 -211
- tapps_agents/experts/knowledge/agent-learning/best-practices.md +715 -715
- tapps_agents/experts/knowledge/agent-learning/pattern-extraction.md +282 -282
- tapps_agents/experts/knowledge/agent-learning/prompt-optimization.md +320 -320
- tapps_agents/experts/knowledge/ai-frameworks/model-optimization.md +90 -90
- tapps_agents/experts/knowledge/ai-frameworks/openvino-patterns.md +260 -260
- tapps_agents/experts/knowledge/api-design-integration/api-gateway-patterns.md +309 -309
- tapps_agents/experts/knowledge/api-design-integration/api-security-patterns.md +521 -521
- tapps_agents/experts/knowledge/api-design-integration/api-versioning.md +421 -421
- tapps_agents/experts/knowledge/api-design-integration/async-protocol-patterns.md +61 -61
- tapps_agents/experts/knowledge/api-design-integration/contract-testing.md +221 -221
- tapps_agents/experts/knowledge/api-design-integration/external-api-integration.md +489 -489
- tapps_agents/experts/knowledge/api-design-integration/fastapi-patterns.md +360 -360
- tapps_agents/experts/knowledge/api-design-integration/fastapi-testing.md +262 -262
- tapps_agents/experts/knowledge/api-design-integration/graphql-patterns.md +582 -582
- tapps_agents/experts/knowledge/api-design-integration/grpc-best-practices.md +499 -499
- tapps_agents/experts/knowledge/api-design-integration/mqtt-patterns.md +455 -455
- tapps_agents/experts/knowledge/api-design-integration/rate-limiting.md +507 -507
- tapps_agents/experts/knowledge/api-design-integration/restful-api-design.md +618 -618
- tapps_agents/experts/knowledge/api-design-integration/websocket-patterns.md +480 -480
- tapps_agents/experts/knowledge/cloud-infrastructure/cloud-native-patterns.md +175 -175
- tapps_agents/experts/knowledge/cloud-infrastructure/container-health-checks.md +261 -261
- tapps_agents/experts/knowledge/cloud-infrastructure/containerization.md +222 -222
- tapps_agents/experts/knowledge/cloud-infrastructure/cost-optimization.md +122 -122
- tapps_agents/experts/knowledge/cloud-infrastructure/disaster-recovery.md +153 -153
- tapps_agents/experts/knowledge/cloud-infrastructure/dockerfile-patterns.md +285 -285
- tapps_agents/experts/knowledge/cloud-infrastructure/infrastructure-as-code.md +187 -187
- tapps_agents/experts/knowledge/cloud-infrastructure/kubernetes-patterns.md +253 -253
- tapps_agents/experts/knowledge/cloud-infrastructure/multi-cloud-strategies.md +155 -155
- tapps_agents/experts/knowledge/cloud-infrastructure/serverless-architecture.md +200 -200
- tapps_agents/experts/knowledge/code-quality-analysis/README.md +16 -16
- tapps_agents/experts/knowledge/code-quality-analysis/code-metrics.md +137 -137
- tapps_agents/experts/knowledge/code-quality-analysis/complexity-analysis.md +181 -181
- tapps_agents/experts/knowledge/code-quality-analysis/technical-debt-patterns.md +191 -191
- tapps_agents/experts/knowledge/data-privacy-compliance/anonymization.md +313 -313
- tapps_agents/experts/knowledge/data-privacy-compliance/ccpa.md +255 -255
- tapps_agents/experts/knowledge/data-privacy-compliance/consent-management.md +282 -282
- tapps_agents/experts/knowledge/data-privacy-compliance/data-minimization.md +275 -275
- tapps_agents/experts/knowledge/data-privacy-compliance/data-retention.md +297 -297
- tapps_agents/experts/knowledge/data-privacy-compliance/data-subject-rights.md +383 -383
- tapps_agents/experts/knowledge/data-privacy-compliance/encryption-privacy.md +285 -285
- tapps_agents/experts/knowledge/data-privacy-compliance/gdpr.md +344 -344
- tapps_agents/experts/knowledge/data-privacy-compliance/hipaa.md +385 -385
- tapps_agents/experts/knowledge/data-privacy-compliance/privacy-by-design.md +280 -280
- tapps_agents/experts/knowledge/database-data-management/acid-vs-cap.md +164 -164
- tapps_agents/experts/knowledge/database-data-management/backup-and-recovery.md +182 -182
- tapps_agents/experts/knowledge/database-data-management/data-modeling.md +172 -172
- tapps_agents/experts/knowledge/database-data-management/database-design.md +187 -187
- tapps_agents/experts/knowledge/database-data-management/flux-query-optimization.md +342 -342
- tapps_agents/experts/knowledge/database-data-management/influxdb-connection-patterns.md +432 -432
- tapps_agents/experts/knowledge/database-data-management/influxdb-patterns.md +442 -442
- tapps_agents/experts/knowledge/database-data-management/migration-strategies.md +216 -216
- tapps_agents/experts/knowledge/database-data-management/nosql-patterns.md +259 -259
- tapps_agents/experts/knowledge/database-data-management/scalability-patterns.md +184 -184
- tapps_agents/experts/knowledge/database-data-management/sql-optimization.md +175 -175
- tapps_agents/experts/knowledge/database-data-management/time-series-modeling.md +444 -444
- tapps_agents/experts/knowledge/development-workflow/README.md +16 -16
- tapps_agents/experts/knowledge/development-workflow/automation-best-practices.md +216 -216
- tapps_agents/experts/knowledge/development-workflow/build-strategies.md +198 -198
- tapps_agents/experts/knowledge/development-workflow/deployment-patterns.md +205 -205
- tapps_agents/experts/knowledge/development-workflow/git-workflows.md +205 -205
- tapps_agents/experts/knowledge/documentation-knowledge-management/README.md +16 -16
- tapps_agents/experts/knowledge/documentation-knowledge-management/api-documentation-patterns.md +231 -231
- tapps_agents/experts/knowledge/documentation-knowledge-management/documentation-standards.md +191 -191
- tapps_agents/experts/knowledge/documentation-knowledge-management/knowledge-management.md +171 -171
- tapps_agents/experts/knowledge/documentation-knowledge-management/technical-writing-guide.md +192 -192
- tapps_agents/experts/knowledge/observability-monitoring/alerting-patterns.md +461 -461
- tapps_agents/experts/knowledge/observability-monitoring/apm-tools.md +459 -459
- tapps_agents/experts/knowledge/observability-monitoring/distributed-tracing.md +367 -367
- tapps_agents/experts/knowledge/observability-monitoring/logging-strategies.md +478 -478
- tapps_agents/experts/knowledge/observability-monitoring/metrics-and-monitoring.md +510 -510
- tapps_agents/experts/knowledge/observability-monitoring/observability-best-practices.md +492 -492
- tapps_agents/experts/knowledge/observability-monitoring/open-telemetry.md +573 -573
- tapps_agents/experts/knowledge/observability-monitoring/slo-sli-sla.md +419 -419
- tapps_agents/experts/knowledge/performance/anti-patterns.md +284 -284
- tapps_agents/experts/knowledge/performance/api-performance.md +256 -256
- tapps_agents/experts/knowledge/performance/caching.md +327 -327
- tapps_agents/experts/knowledge/performance/database-performance.md +252 -252
- tapps_agents/experts/knowledge/performance/optimization-patterns.md +327 -327
- tapps_agents/experts/knowledge/performance/profiling.md +297 -297
- tapps_agents/experts/knowledge/performance/resource-management.md +293 -293
- tapps_agents/experts/knowledge/performance/scalability.md +306 -306
- tapps_agents/experts/knowledge/security/owasp-top10.md +209 -209
- tapps_agents/experts/knowledge/security/secure-coding-practices.md +207 -207
- tapps_agents/experts/knowledge/security/threat-modeling.md +220 -220
- tapps_agents/experts/knowledge/security/vulnerability-patterns.md +342 -342
- tapps_agents/experts/knowledge/software-architecture/docker-compose-patterns.md +314 -314
- tapps_agents/experts/knowledge/software-architecture/microservices-patterns.md +379 -379
- tapps_agents/experts/knowledge/software-architecture/service-communication.md +316 -316
- tapps_agents/experts/knowledge/testing/best-practices.md +310 -310
- tapps_agents/experts/knowledge/testing/coverage-analysis.md +293 -293
- tapps_agents/experts/knowledge/testing/mocking.md +256 -256
- tapps_agents/experts/knowledge/testing/test-automation.md +276 -276
- tapps_agents/experts/knowledge/testing/test-data.md +271 -271
- tapps_agents/experts/knowledge/testing/test-design-patterns.md +280 -280
- tapps_agents/experts/knowledge/testing/test-maintenance.md +236 -236
- tapps_agents/experts/knowledge/testing/test-strategies.md +311 -311
- tapps_agents/experts/knowledge/user-experience/information-architecture.md +325 -325
- tapps_agents/experts/knowledge/user-experience/interaction-design.md +363 -363
- tapps_agents/experts/knowledge/user-experience/prototyping.md +293 -293
- tapps_agents/experts/knowledge/user-experience/usability-heuristics.md +337 -337
- tapps_agents/experts/knowledge/user-experience/usability-testing.md +311 -311
- tapps_agents/experts/knowledge/user-experience/user-journeys.md +296 -296
- tapps_agents/experts/knowledge/user-experience/user-research.md +373 -373
- tapps_agents/experts/knowledge/user-experience/ux-principles.md +340 -340
- tapps_agents/experts/knowledge_freshness.py +321 -321
- tapps_agents/experts/knowledge_ingestion.py +438 -438
- tapps_agents/experts/knowledge_need_detector.py +93 -93
- tapps_agents/experts/knowledge_validator.py +382 -382
- tapps_agents/experts/observability.py +440 -440
- tapps_agents/experts/passive_notifier.py +238 -238
- tapps_agents/experts/proactive_orchestrator.py +32 -32
- tapps_agents/experts/rag_chunker.py +205 -205
- tapps_agents/experts/rag_embedder.py +152 -152
- tapps_agents/experts/rag_evaluation.py +299 -299
- tapps_agents/experts/rag_index.py +303 -303
- tapps_agents/experts/rag_metrics.py +293 -293
- tapps_agents/experts/rag_safety.py +263 -263
- tapps_agents/experts/report_generator.py +296 -296
- tapps_agents/experts/setup_wizard.py +441 -441
- tapps_agents/experts/simple_rag.py +431 -431
- tapps_agents/experts/vector_rag.py +354 -354
- tapps_agents/experts/weight_distributor.py +304 -304
- tapps_agents/health/__init__.py +24 -24
- tapps_agents/health/base.py +75 -75
- tapps_agents/health/checks/__init__.py +22 -22
- tapps_agents/health/checks/automation.py +127 -127
- tapps_agents/health/checks/context7_cache.py +210 -210
- tapps_agents/health/checks/environment.py +116 -116
- tapps_agents/health/checks/execution.py +170 -170
- tapps_agents/health/checks/knowledge_base.py +187 -187
- tapps_agents/health/checks/outcomes.backup_20260204_064058.py +324 -0
- tapps_agents/health/checks/outcomes.backup_20260204_064256.py +324 -0
- tapps_agents/health/checks/outcomes.backup_20260204_064600.py +324 -0
- tapps_agents/health/checks/outcomes.py +324 -324
- tapps_agents/health/collector.py +280 -280
- tapps_agents/health/dashboard.py +137 -137
- tapps_agents/health/metrics.py +151 -151
- tapps_agents/health/registry.py +166 -166
- tapps_agents/hooks/__init__.py +33 -33
- tapps_agents/hooks/config.py +140 -140
- tapps_agents/hooks/events.py +135 -135
- tapps_agents/hooks/executor.py +128 -128
- tapps_agents/hooks/manager.py +143 -143
- tapps_agents/integration/__init__.py +8 -8
- tapps_agents/integration/service_integrator.py +121 -121
- tapps_agents/integrations/__init__.py +10 -10
- tapps_agents/integrations/clawdbot.py +525 -525
- tapps_agents/integrations/memory_bridge.py +356 -356
- tapps_agents/mcp/__init__.py +18 -18
- tapps_agents/mcp/gateway.py +112 -112
- tapps_agents/mcp/servers/__init__.py +13 -13
- tapps_agents/mcp/servers/analysis.py +204 -204
- tapps_agents/mcp/servers/context7.py +198 -198
- tapps_agents/mcp/servers/filesystem.py +218 -218
- tapps_agents/mcp/servers/git.py +201 -201
- tapps_agents/mcp/tool_registry.py +115 -115
- tapps_agents/quality/__init__.py +54 -54
- tapps_agents/quality/coverage_analyzer.py +379 -379
- tapps_agents/quality/enforcement.py +82 -82
- tapps_agents/quality/gates/__init__.py +37 -37
- tapps_agents/quality/gates/approval_gate.py +255 -255
- tapps_agents/quality/gates/base.py +84 -84
- tapps_agents/quality/gates/exceptions.py +43 -43
- tapps_agents/quality/gates/policy_gate.py +195 -195
- tapps_agents/quality/gates/registry.py +239 -239
- tapps_agents/quality/gates/security_gate.py +156 -156
- tapps_agents/quality/quality_gates.py +369 -369
- tapps_agents/quality/secret_scanner.py +335 -335
- tapps_agents/resources/__init__.py +5 -0
- tapps_agents/resources/claude/__init__.py +1 -0
- tapps_agents/resources/claude/commands/README.md +156 -0
- tapps_agents/resources/claude/commands/__init__.py +1 -0
- tapps_agents/resources/claude/commands/build-fix.md +22 -0
- tapps_agents/resources/claude/commands/build.md +77 -0
- tapps_agents/resources/claude/commands/debug.md +53 -0
- tapps_agents/resources/claude/commands/design.md +68 -0
- tapps_agents/resources/claude/commands/docs.md +53 -0
- tapps_agents/resources/claude/commands/e2e.md +22 -0
- tapps_agents/resources/claude/commands/fix.md +54 -0
- tapps_agents/resources/claude/commands/implement.md +53 -0
- tapps_agents/resources/claude/commands/improve.md +53 -0
- tapps_agents/resources/claude/commands/library-docs.md +64 -0
- tapps_agents/resources/claude/commands/lint.md +52 -0
- tapps_agents/resources/claude/commands/plan.md +65 -0
- tapps_agents/resources/claude/commands/refactor-clean.md +21 -0
- tapps_agents/resources/claude/commands/refactor.md +55 -0
- tapps_agents/resources/claude/commands/review.md +67 -0
- tapps_agents/resources/claude/commands/score.md +60 -0
- tapps_agents/resources/claude/commands/security-review.md +22 -0
- tapps_agents/resources/claude/commands/security-scan.md +54 -0
- tapps_agents/resources/claude/commands/tdd.md +24 -0
- tapps_agents/resources/claude/commands/test-coverage.md +21 -0
- tapps_agents/resources/claude/commands/test.md +54 -0
- tapps_agents/resources/claude/commands/update-codemaps.md +20 -0
- tapps_agents/resources/claude/commands/update-docs.md +21 -0
- tapps_agents/resources/claude/skills/__init__.py +1 -0
- tapps_agents/resources/claude/skills/analyst/SKILL.md +272 -0
- tapps_agents/resources/claude/skills/analyst/__init__.py +1 -0
- tapps_agents/resources/claude/skills/architect/SKILL.md +282 -0
- tapps_agents/resources/claude/skills/architect/__init__.py +1 -0
- tapps_agents/resources/claude/skills/backend-patterns/SKILL.md +30 -0
- tapps_agents/resources/claude/skills/backend-patterns/__init__.py +1 -0
- tapps_agents/resources/claude/skills/coding-standards/SKILL.md +29 -0
- tapps_agents/resources/claude/skills/coding-standards/__init__.py +1 -0
- tapps_agents/resources/claude/skills/debugger/SKILL.md +203 -0
- tapps_agents/resources/claude/skills/debugger/__init__.py +1 -0
- tapps_agents/resources/claude/skills/designer/SKILL.md +243 -0
- tapps_agents/resources/claude/skills/designer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/documenter/SKILL.md +252 -0
- tapps_agents/resources/claude/skills/documenter/__init__.py +1 -0
- tapps_agents/resources/claude/skills/enhancer/SKILL.md +307 -0
- tapps_agents/resources/claude/skills/enhancer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/evaluator/SKILL.md +204 -0
- tapps_agents/resources/claude/skills/evaluator/__init__.py +1 -0
- tapps_agents/resources/claude/skills/frontend-patterns/SKILL.md +29 -0
- tapps_agents/resources/claude/skills/frontend-patterns/__init__.py +1 -0
- tapps_agents/resources/claude/skills/implementer/SKILL.md +188 -0
- tapps_agents/resources/claude/skills/implementer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/improver/SKILL.md +218 -0
- tapps_agents/resources/claude/skills/improver/__init__.py +1 -0
- tapps_agents/resources/claude/skills/ops/SKILL.md +281 -0
- tapps_agents/resources/claude/skills/ops/__init__.py +1 -0
- tapps_agents/resources/claude/skills/orchestrator/SKILL.md +390 -0
- tapps_agents/resources/claude/skills/orchestrator/__init__.py +1 -0
- tapps_agents/resources/claude/skills/planner/SKILL.md +254 -0
- tapps_agents/resources/claude/skills/planner/__init__.py +1 -0
- tapps_agents/resources/claude/skills/reviewer/SKILL.md +434 -0
- tapps_agents/resources/claude/skills/reviewer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/security-review/SKILL.md +31 -0
- tapps_agents/resources/claude/skills/security-review/__init__.py +1 -0
- tapps_agents/resources/claude/skills/simple-mode/SKILL.md +695 -0
- tapps_agents/resources/claude/skills/simple-mode/__init__.py +1 -0
- tapps_agents/resources/claude/skills/tester/SKILL.md +219 -0
- tapps_agents/resources/claude/skills/tester/__init__.py +1 -0
- tapps_agents/resources/cursor/.cursorignore +35 -0
- tapps_agents/resources/cursor/__init__.py +1 -0
- tapps_agents/resources/cursor/commands/__init__.py +1 -0
- tapps_agents/resources/cursor/commands/build-fix.md +11 -0
- tapps_agents/resources/cursor/commands/build.md +11 -0
- tapps_agents/resources/cursor/commands/e2e.md +11 -0
- tapps_agents/resources/cursor/commands/fix.md +11 -0
- tapps_agents/resources/cursor/commands/refactor-clean.md +11 -0
- tapps_agents/resources/cursor/commands/review.md +11 -0
- tapps_agents/resources/cursor/commands/security-review.md +11 -0
- tapps_agents/resources/cursor/commands/tdd.md +11 -0
- tapps_agents/resources/cursor/commands/test-coverage.md +11 -0
- tapps_agents/resources/cursor/commands/test.md +11 -0
- tapps_agents/resources/cursor/commands/update-codemaps.md +10 -0
- tapps_agents/resources/cursor/commands/update-docs.md +11 -0
- tapps_agents/resources/cursor/rules/__init__.py +1 -0
- tapps_agents/resources/cursor/rules/agent-capabilities.mdc +687 -0
- tapps_agents/resources/cursor/rules/coding-style.mdc +31 -0
- tapps_agents/resources/cursor/rules/command-reference.mdc +2081 -0
- tapps_agents/resources/cursor/rules/cursor-mode-usage.mdc +125 -0
- tapps_agents/resources/cursor/rules/git-workflow.mdc +29 -0
- tapps_agents/resources/cursor/rules/performance.mdc +29 -0
- tapps_agents/resources/cursor/rules/project-context.mdc +163 -0
- tapps_agents/resources/cursor/rules/project-profiling.mdc +197 -0
- tapps_agents/resources/cursor/rules/quick-reference.mdc +630 -0
- tapps_agents/resources/cursor/rules/security.mdc +32 -0
- tapps_agents/resources/cursor/rules/simple-mode.mdc +500 -0
- tapps_agents/resources/cursor/rules/testing.mdc +31 -0
- tapps_agents/resources/cursor/rules/when-to-use.mdc +156 -0
- tapps_agents/resources/cursor/rules/workflow-presets.mdc +179 -0
- tapps_agents/resources/customizations/__init__.py +1 -0
- tapps_agents/resources/customizations/example-custom.yaml +83 -0
- tapps_agents/resources/hooks/__init__.py +1 -0
- tapps_agents/resources/hooks/templates/README.md +5 -0
- tapps_agents/resources/hooks/templates/__init__.py +1 -0
- tapps_agents/resources/hooks/templates/add-project-context.yaml +8 -0
- tapps_agents/resources/hooks/templates/auto-format-js.yaml +10 -0
- tapps_agents/resources/hooks/templates/auto-format-python.yaml +10 -0
- tapps_agents/resources/hooks/templates/git-commit-check.yaml +7 -0
- tapps_agents/resources/hooks/templates/notify-on-complete.yaml +8 -0
- tapps_agents/resources/hooks/templates/quality-gate.yaml +8 -0
- tapps_agents/resources/hooks/templates/security-scan-on-edit.yaml +10 -0
- tapps_agents/resources/hooks/templates/session-end-log.yaml +7 -0
- tapps_agents/resources/hooks/templates/show-beads-ready.yaml +8 -0
- tapps_agents/resources/hooks/templates/test-on-edit.yaml +10 -0
- tapps_agents/resources/hooks/templates/update-docs-on-complete.yaml +8 -0
- tapps_agents/resources/hooks/templates/user-prompt-log.yaml +7 -0
- tapps_agents/resources/scripts/__init__.py +1 -0
- tapps_agents/resources/scripts/set_bd_path.ps1 +51 -0
- tapps_agents/resources/workflows/__init__.py +1 -0
- tapps_agents/resources/workflows/presets/__init__.py +1 -0
- tapps_agents/resources/workflows/presets/brownfield-analysis.yaml +235 -0
- tapps_agents/resources/workflows/presets/fix.yaml +78 -0
- tapps_agents/resources/workflows/presets/full-sdlc.yaml +122 -0
- tapps_agents/resources/workflows/presets/quality.yaml +82 -0
- tapps_agents/resources/workflows/presets/rapid-dev.yaml +84 -0
- tapps_agents/session/__init__.py +19 -19
- tapps_agents/session/manager.py +256 -256
- tapps_agents/simple_mode/__init__.py +66 -66
- tapps_agents/simple_mode/agent_contracts.py +357 -357
- tapps_agents/simple_mode/beads_hooks.py +151 -151
- tapps_agents/simple_mode/code_snippet_handler.py +382 -382
- tapps_agents/simple_mode/documentation_manager.py +395 -395
- tapps_agents/simple_mode/documentation_reader.py +187 -187
- tapps_agents/simple_mode/file_inference.py +292 -292
- tapps_agents/simple_mode/framework_change_detector.py +268 -268
- tapps_agents/simple_mode/intent_parser.py +510 -510
- tapps_agents/simple_mode/learning_progression.py +358 -358
- tapps_agents/simple_mode/nl_handler.py +700 -700
- tapps_agents/simple_mode/onboarding.py +253 -253
- tapps_agents/simple_mode/orchestrators/__init__.py +38 -38
- tapps_agents/simple_mode/orchestrators/breakdown_orchestrator.py +49 -49
- tapps_agents/simple_mode/orchestrators/brownfield_orchestrator.py +135 -135
- tapps_agents/simple_mode/orchestrators/deliverable_checklist.py +349 -349
- tapps_agents/simple_mode/orchestrators/enhance_orchestrator.py +53 -53
- tapps_agents/simple_mode/orchestrators/epic_orchestrator.py +122 -122
- tapps_agents/simple_mode/orchestrators/explore_orchestrator.py +184 -184
- tapps_agents/simple_mode/orchestrators/plan_analysis_orchestrator.py +206 -206
- tapps_agents/simple_mode/orchestrators/pr_orchestrator.py +237 -237
- tapps_agents/simple_mode/orchestrators/refactor_orchestrator.py +222 -222
- tapps_agents/simple_mode/orchestrators/requirements_tracer.py +262 -262
- tapps_agents/simple_mode/orchestrators/resume_orchestrator.py +210 -210
- tapps_agents/simple_mode/orchestrators/review_orchestrator.py +161 -161
- tapps_agents/simple_mode/orchestrators/test_orchestrator.py +82 -82
- tapps_agents/simple_mode/output_aggregator.py +340 -340
- tapps_agents/simple_mode/result_formatters.py +598 -598
- tapps_agents/simple_mode/step_dependencies.py +382 -382
- tapps_agents/simple_mode/step_results.py +276 -276
- tapps_agents/simple_mode/streaming.py +388 -388
- tapps_agents/simple_mode/variations.py +129 -129
- tapps_agents/simple_mode/visual_feedback.py +238 -238
- tapps_agents/simple_mode/zero_config.py +274 -274
- tapps_agents/suggestions/__init__.py +8 -8
- tapps_agents/suggestions/inline_suggester.py +52 -52
- tapps_agents/templates/__init__.py +8 -8
- tapps_agents/templates/microservice_generator.py +274 -274
- tapps_agents/utils/env_validator.py +291 -291
- tapps_agents/workflow/__init__.py +171 -171
- tapps_agents/workflow/acceptance_verifier.py +132 -132
- tapps_agents/workflow/agent_handlers/__init__.py +41 -41
- tapps_agents/workflow/agent_handlers/analyst_handler.py +75 -75
- tapps_agents/workflow/agent_handlers/architect_handler.py +107 -107
- tapps_agents/workflow/agent_handlers/base.py +84 -84
- tapps_agents/workflow/agent_handlers/debugger_handler.py +100 -100
- tapps_agents/workflow/agent_handlers/designer_handler.py +110 -110
- tapps_agents/workflow/agent_handlers/documenter_handler.py +94 -94
- tapps_agents/workflow/agent_handlers/implementer_handler.py +235 -235
- tapps_agents/workflow/agent_handlers/ops_handler.py +62 -62
- tapps_agents/workflow/agent_handlers/orchestrator_handler.py +43 -43
- tapps_agents/workflow/agent_handlers/planner_handler.py +98 -98
- tapps_agents/workflow/agent_handlers/registry.py +119 -119
- tapps_agents/workflow/agent_handlers/reviewer_handler.py +119 -119
- tapps_agents/workflow/agent_handlers/tester_handler.py +69 -69
- tapps_agents/workflow/analytics_accessor.py +337 -337
- tapps_agents/workflow/analytics_alerts.py +416 -416
- tapps_agents/workflow/analytics_dashboard_cursor.py +281 -281
- tapps_agents/workflow/analytics_dual_write.py +103 -103
- tapps_agents/workflow/analytics_integration.py +119 -119
- tapps_agents/workflow/analytics_query_parser.py +278 -278
- tapps_agents/workflow/analytics_visualizer.py +259 -259
- tapps_agents/workflow/artifact_helper.py +204 -204
- tapps_agents/workflow/audit_logger.py +263 -263
- tapps_agents/workflow/auto_execution_config.py +340 -340
- tapps_agents/workflow/auto_progression.py +586 -586
- tapps_agents/workflow/branch_cleanup.py +349 -349
- tapps_agents/workflow/checkpoint.py +256 -256
- tapps_agents/workflow/checkpoint_manager.py +178 -178
- tapps_agents/workflow/code_artifact.py +179 -179
- tapps_agents/workflow/common_enums.py +96 -96
- tapps_agents/workflow/confirmation_handler.py +130 -130
- tapps_agents/workflow/context_analyzer.py +222 -222
- tapps_agents/workflow/context_artifact.py +230 -230
- tapps_agents/workflow/cursor_chat.py +94 -94
- tapps_agents/workflow/cursor_skill_helper.py +516 -516
- tapps_agents/workflow/dependency_resolver.py +244 -244
- tapps_agents/workflow/design_artifact.py +156 -156
- tapps_agents/workflow/detector.py +751 -751
- tapps_agents/workflow/direct_execution_fallback.py +301 -301
- tapps_agents/workflow/docs_artifact.py +168 -168
- tapps_agents/workflow/enforcer.py +389 -389
- tapps_agents/workflow/enhancement_artifact.py +142 -142
- tapps_agents/workflow/error_recovery.py +806 -806
- tapps_agents/workflow/event_bus.py +183 -183
- tapps_agents/workflow/event_log.py +612 -612
- tapps_agents/workflow/events.py +63 -63
- tapps_agents/workflow/exceptions.py +43 -43
- tapps_agents/workflow/execution_graph.py +498 -498
- tapps_agents/workflow/execution_plan.py +126 -126
- tapps_agents/workflow/file_utils.py +186 -186
- tapps_agents/workflow/gate_evaluator.py +182 -182
- tapps_agents/workflow/gate_integration.py +200 -200
- tapps_agents/workflow/graph_visualizer.py +130 -130
- tapps_agents/workflow/health_checker.py +206 -206
- tapps_agents/workflow/logging_helper.py +243 -243
- tapps_agents/workflow/manifest.py +582 -582
- tapps_agents/workflow/marker_writer.py +250 -250
- tapps_agents/workflow/messaging.py +325 -325
- tapps_agents/workflow/metadata_models.py +91 -91
- tapps_agents/workflow/metrics_integration.py +226 -226
- tapps_agents/workflow/migration_utils.py +116 -116
- tapps_agents/workflow/models.py +148 -148
- tapps_agents/workflow/nlp_config.py +198 -198
- tapps_agents/workflow/nlp_error_handler.py +207 -207
- tapps_agents/workflow/nlp_executor.py +163 -163
- tapps_agents/workflow/nlp_parser.py +528 -528
- tapps_agents/workflow/observability_dashboard.py +451 -451
- tapps_agents/workflow/observer.py +170 -170
- tapps_agents/workflow/ops_artifact.py +257 -257
- tapps_agents/workflow/output_passing.py +214 -214
- tapps_agents/workflow/parallel_executor.py +463 -463
- tapps_agents/workflow/planning_artifact.py +179 -179
- tapps_agents/workflow/preset_loader.py +285 -285
- tapps_agents/workflow/preset_recommender.py +270 -270
- tapps_agents/workflow/progress_logger.py +145 -145
- tapps_agents/workflow/progress_manager.py +303 -303
- tapps_agents/workflow/progress_monitor.py +186 -186
- tapps_agents/workflow/progress_updates.py +423 -423
- tapps_agents/workflow/quality_artifact.py +158 -158
- tapps_agents/workflow/quality_loopback.py +101 -101
- tapps_agents/workflow/recommender.py +387 -387
- tapps_agents/workflow/remediation_loop.py +166 -166
- tapps_agents/workflow/result_aggregator.py +300 -300
- tapps_agents/workflow/review_artifact.py +185 -185
- tapps_agents/workflow/schema_validator.py +522 -522
- tapps_agents/workflow/session_handoff.py +178 -178
- tapps_agents/workflow/skill_invoker.py +648 -648
- tapps_agents/workflow/state_manager.py +756 -756
- tapps_agents/workflow/state_persistence_config.py +331 -331
- tapps_agents/workflow/status_monitor.py +449 -449
- tapps_agents/workflow/step_checkpoint.py +314 -314
- tapps_agents/workflow/step_details.py +201 -201
- tapps_agents/workflow/story_models.py +147 -147
- tapps_agents/workflow/streaming.py +416 -416
- tapps_agents/workflow/suggestion_engine.py +552 -552
- tapps_agents/workflow/testing_artifact.py +186 -186
- tapps_agents/workflow/timeline.py +158 -158
- tapps_agents/workflow/token_integration.py +209 -209
- tapps_agents/workflow/validation.py +217 -217
- tapps_agents/workflow/visual_feedback.py +391 -391
- tapps_agents/workflow/workflow_chain.py +95 -95
- tapps_agents/workflow/workflow_summary.py +219 -219
- tapps_agents/workflow/worktree_manager.py +724 -724
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/METADATA +672 -672
- tapps_agents-3.6.1.dist-info/RECORD +883 -0
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/licenses/LICENSE +22 -22
- tapps_agents-3.6.0.dist-info/RECORD +0 -758
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/WHEEL +0 -0
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/entry_points.txt +0 -0
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/top_level.txt +0 -0
|
@@ -1,316 +1,316 @@
|
|
|
1
|
-
"""
|
|
2
|
-
InfluxDB Validator - Validates InfluxDB queries and patterns
|
|
3
|
-
|
|
4
|
-
Phase 1.2: InfluxDB & Time-Series Support for HomeIQ
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import re
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
from typing import Any
|
|
10
|
-
|
|
11
|
-
from ...core.language_detector import Language
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class InfluxDBValidator:
|
|
15
|
-
"""
|
|
16
|
-
Validates InfluxDB queries and connection patterns.
|
|
17
|
-
|
|
18
|
-
Checks for:
|
|
19
|
-
- Flux query syntax and patterns
|
|
20
|
-
- Query optimization opportunities
|
|
21
|
-
- Connection pattern best practices
|
|
22
|
-
- Time-series data modeling issues
|
|
23
|
-
"""
|
|
24
|
-
|
|
25
|
-
def __init__(self):
|
|
26
|
-
"""Initialize InfluxDB validator."""
|
|
27
|
-
self.flux_query_pattern = re.compile(
|
|
28
|
-
r'from\(bucket:\s*["\']([^"\']+)["\']\)',
|
|
29
|
-
re.IGNORECASE
|
|
30
|
-
)
|
|
31
|
-
self.range_pattern = re.compile(
|
|
32
|
-
r'range\(start:\s*([^)]+)\)',
|
|
33
|
-
re.IGNORECASE
|
|
34
|
-
)
|
|
35
|
-
self.filter_pattern = re.compile(
|
|
36
|
-
r'filter\(fn:\s*\(r\)\s*=>\s*([^)]+)\)',
|
|
37
|
-
re.IGNORECASE
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
def validate_flux_query(self, query: str) -> dict[str, Any]:
|
|
41
|
-
"""
|
|
42
|
-
Validate Flux query syntax and patterns.
|
|
43
|
-
|
|
44
|
-
Args:
|
|
45
|
-
query: Flux query string
|
|
46
|
-
|
|
47
|
-
Returns:
|
|
48
|
-
Dictionary with validation results:
|
|
49
|
-
{
|
|
50
|
-
"valid": bool,
|
|
51
|
-
"issues": list[str],
|
|
52
|
-
"suggestions": list[str],
|
|
53
|
-
"optimization_opportunities": list[str]
|
|
54
|
-
}
|
|
55
|
-
"""
|
|
56
|
-
issues = []
|
|
57
|
-
suggestions = []
|
|
58
|
-
optimizations = []
|
|
59
|
-
|
|
60
|
-
# Check for time range
|
|
61
|
-
if not self.range_pattern.search(query):
|
|
62
|
-
issues.append("Missing time range - always specify range() after from()")
|
|
63
|
-
suggestions.append("Add |> range(start: -1h) after from()")
|
|
64
|
-
|
|
65
|
-
# Check for bucket specification
|
|
66
|
-
if not self.flux_query_pattern.search(query):
|
|
67
|
-
issues.append("Missing or invalid bucket specification in from()")
|
|
68
|
-
suggestions.append("Use: from(bucket: \"bucket_name\")")
|
|
69
|
-
|
|
70
|
-
# Check query order (range should be early)
|
|
71
|
-
range_match = self.range_pattern.search(query)
|
|
72
|
-
filter_matches = list(self.filter_pattern.finditer(query))
|
|
73
|
-
|
|
74
|
-
if range_match and filter_matches:
|
|
75
|
-
range_pos = range_match.start()
|
|
76
|
-
first_filter_pos = filter_matches[0].start() if filter_matches else -1
|
|
77
|
-
|
|
78
|
-
# Check if filters come before range (bad pattern)
|
|
79
|
-
if first_filter_pos != -1 and first_filter_pos < range_pos:
|
|
80
|
-
issues.append("Filters appear before range() - range should come first")
|
|
81
|
-
suggestions.append("Move |> range(start: ...) before filter() operations")
|
|
82
|
-
|
|
83
|
-
# Check for common anti-patterns
|
|
84
|
-
if "aggregateWindow" in query and "filter" in query:
|
|
85
|
-
# Check if aggregation comes before filtering
|
|
86
|
-
agg_pos = query.find("aggregateWindow")
|
|
87
|
-
filter_pos = query.find("filter")
|
|
88
|
-
|
|
89
|
-
if agg_pos != -1 and filter_pos != -1 and agg_pos < filter_pos:
|
|
90
|
-
optimizations.append(
|
|
91
|
-
"Consider filtering before aggregating to reduce data processed"
|
|
92
|
-
)
|
|
93
|
-
|
|
94
|
-
# Check for missing createEmpty parameter
|
|
95
|
-
if "aggregateWindow" in query and "createEmpty: false" not in query:
|
|
96
|
-
suggestions.append(
|
|
97
|
-
"Add createEmpty: false to aggregateWindow() to skip empty windows"
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
# Check for limit() usage
|
|
101
|
-
if "limit(" not in query and len(query) > 500:
|
|
102
|
-
suggestions.append(
|
|
103
|
-
"Consider adding limit() for large result sets to improve performance"
|
|
104
|
-
)
|
|
105
|
-
|
|
106
|
-
# Check for tag vs field filtering order
|
|
107
|
-
# This is a heuristic - tags are typically in filter conditions with ==
|
|
108
|
-
# Fields are typically in filter conditions with >, <, >=, <=
|
|
109
|
-
tag_filters = re.findall(r'filter\(fn:\s*\(r\)\s*=>\s*r\["([^"]+)"\]\s*==', query)
|
|
110
|
-
field_filters = re.findall(r'filter\(fn:\s*\(r\)\s*=>\s*r\["([^"]+)"\]\s*[><=]', query)
|
|
111
|
-
|
|
112
|
-
if tag_filters and field_filters:
|
|
113
|
-
# Check if field filters come before tag filters
|
|
114
|
-
for field_filter in field_filters:
|
|
115
|
-
field_pos = query.find(f'r["{field_filter}"]')
|
|
116
|
-
for tag_filter in tag_filters:
|
|
117
|
-
tag_pos = query.find(f'r["{tag_filter}"]')
|
|
118
|
-
if field_pos != -1 and tag_pos != -1 and field_pos < tag_pos:
|
|
119
|
-
optimizations.append(
|
|
120
|
-
f"Consider filtering by tag '{tag_filter}' before field '{field_filter}' "
|
|
121
|
-
"(tags are indexed, fields are not)"
|
|
122
|
-
)
|
|
123
|
-
|
|
124
|
-
return {
|
|
125
|
-
"valid": len(issues) == 0,
|
|
126
|
-
"issues": issues,
|
|
127
|
-
"suggestions": suggestions,
|
|
128
|
-
"optimization_opportunities": optimizations
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
def validate_connection_pattern(self, code: str) -> dict[str, Any]:
|
|
132
|
-
"""
|
|
133
|
-
Validate InfluxDB connection patterns.
|
|
134
|
-
|
|
135
|
-
Args:
|
|
136
|
-
code: Python code containing InfluxDB client usage
|
|
137
|
-
|
|
138
|
-
Returns:
|
|
139
|
-
Dictionary with validation results:
|
|
140
|
-
{
|
|
141
|
-
"valid": bool,
|
|
142
|
-
"issues": list[str],
|
|
143
|
-
"suggestions": list[str]
|
|
144
|
-
}
|
|
145
|
-
"""
|
|
146
|
-
issues = []
|
|
147
|
-
suggestions = []
|
|
148
|
-
|
|
149
|
-
# Check for client creation
|
|
150
|
-
if "InfluxDBClient" not in code:
|
|
151
|
-
return {
|
|
152
|
-
"valid": True,
|
|
153
|
-
"issues": [],
|
|
154
|
-
"suggestions": []
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
# Check for context manager usage
|
|
158
|
-
if "InfluxDBClient" in code and "with" not in code:
|
|
159
|
-
suggestions.append(
|
|
160
|
-
"Consider using context manager (with statement) for automatic cleanup"
|
|
161
|
-
)
|
|
162
|
-
|
|
163
|
-
# Check for connection pooling/reuse
|
|
164
|
-
if code.count("InfluxDBClient(") > 1:
|
|
165
|
-
issues.append("Multiple InfluxDBClient instances - consider connection pooling")
|
|
166
|
-
suggestions.append("Reuse a single client instance or use connection pooling")
|
|
167
|
-
|
|
168
|
-
# Check for error handling
|
|
169
|
-
if "InfluxDBClient" in code and "except" not in code:
|
|
170
|
-
suggestions.append("Add error handling for InfluxDB operations")
|
|
171
|
-
|
|
172
|
-
# Check for retry logic
|
|
173
|
-
if "InfluxDBClient" in code and "retry" not in code.lower():
|
|
174
|
-
suggestions.append("Consider adding retry logic for network operations")
|
|
175
|
-
|
|
176
|
-
# Check for batch writes
|
|
177
|
-
if "write_api.write" in code:
|
|
178
|
-
write_calls = code.count("write_api.write")
|
|
179
|
-
if write_calls > 5:
|
|
180
|
-
suggestions.append(
|
|
181
|
-
"Consider batching multiple writes into a single write_api.write() call"
|
|
182
|
-
)
|
|
183
|
-
|
|
184
|
-
# Check for async patterns
|
|
185
|
-
if "InfluxDBClient" in code and "async" in code:
|
|
186
|
-
if "await" not in code:
|
|
187
|
-
issues.append("Async function defined but await not used")
|
|
188
|
-
|
|
189
|
-
return {
|
|
190
|
-
"valid": len(issues) == 0,
|
|
191
|
-
"issues": issues,
|
|
192
|
-
"suggestions": suggestions
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
def validate_data_modeling(self, code: str) -> dict[str, Any]:
|
|
196
|
-
"""
|
|
197
|
-
Validate time-series data modeling patterns.
|
|
198
|
-
|
|
199
|
-
Args:
|
|
200
|
-
code: Code containing InfluxDB data point creation
|
|
201
|
-
|
|
202
|
-
Returns:
|
|
203
|
-
Dictionary with validation results:
|
|
204
|
-
{
|
|
205
|
-
"valid": bool,
|
|
206
|
-
"issues": list[str],
|
|
207
|
-
"suggestions": list[str]
|
|
208
|
-
}
|
|
209
|
-
"""
|
|
210
|
-
issues = []
|
|
211
|
-
suggestions = []
|
|
212
|
-
|
|
213
|
-
# Check for Point creation
|
|
214
|
-
if "Point(" not in code:
|
|
215
|
-
return {
|
|
216
|
-
"valid": True,
|
|
217
|
-
"issues": [],
|
|
218
|
-
"suggestions": []
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
# Check for tag vs field usage
|
|
222
|
-
if ".tag(" in code and ".field(" in code:
|
|
223
|
-
# Check if high-cardinality data is used as tag
|
|
224
|
-
# This is a heuristic - timestamps, unique IDs as tags are problematic
|
|
225
|
-
if re.search(r'\.tag\([^)]*timestamp', code, re.IGNORECASE):
|
|
226
|
-
issues.append("Timestamp used as tag - timestamps are automatic, don't duplicate")
|
|
227
|
-
suggestions.append("Remove timestamp from tags, use time parameter instead")
|
|
228
|
-
|
|
229
|
-
# Check for measurement naming
|
|
230
|
-
point_creations = re.findall(r'Point\(["\']([^"\']+)["\']\)', code)
|
|
231
|
-
for measurement in point_creations:
|
|
232
|
-
if len(measurement) > 50:
|
|
233
|
-
suggestions.append(
|
|
234
|
-
f"Measurement name '{measurement}' is long - consider shorter names"
|
|
235
|
-
)
|
|
236
|
-
|
|
237
|
-
# Check for proper field types
|
|
238
|
-
if ".field(" in code:
|
|
239
|
-
# Check for string fields that should be numeric
|
|
240
|
-
if re.search(r'\.field\([^,]+,\s*["\']\d+\.?\d*["\']', code):
|
|
241
|
-
suggestions.append(
|
|
242
|
-
"Numeric values in quotes - ensure proper field types (float vs string)"
|
|
243
|
-
)
|
|
244
|
-
|
|
245
|
-
return {
|
|
246
|
-
"valid": len(issues) == 0,
|
|
247
|
-
"issues": issues,
|
|
248
|
-
"suggestions": suggestions
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
def review_file(self, file_path: Path, code: str) -> dict[str, Any]:
|
|
252
|
-
"""
|
|
253
|
-
Review a file for InfluxDB patterns.
|
|
254
|
-
|
|
255
|
-
Args:
|
|
256
|
-
file_path: Path to the file
|
|
257
|
-
code: File content
|
|
258
|
-
|
|
259
|
-
Returns:
|
|
260
|
-
Dictionary with review results:
|
|
261
|
-
{
|
|
262
|
-
"has_influxdb": bool,
|
|
263
|
-
"flux_queries": list[dict],
|
|
264
|
-
"connection_issues": list[str],
|
|
265
|
-
"data_modeling_issues": list[str],
|
|
266
|
-
"suggestions": list[str]
|
|
267
|
-
}
|
|
268
|
-
"""
|
|
269
|
-
results = {
|
|
270
|
-
"has_influxdb": False,
|
|
271
|
-
"flux_queries": [],
|
|
272
|
-
"connection_issues": [],
|
|
273
|
-
"data_modeling_issues": [],
|
|
274
|
-
"suggestions": []
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
# Check if file contains InfluxDB code
|
|
278
|
-
has_influxdb = (
|
|
279
|
-
"InfluxDBClient" in code or
|
|
280
|
-
"influxdb" in code.lower() or
|
|
281
|
-
"from(bucket:" in code or
|
|
282
|
-
"Point(" in code
|
|
283
|
-
)
|
|
284
|
-
|
|
285
|
-
if not has_influxdb:
|
|
286
|
-
return results
|
|
287
|
-
|
|
288
|
-
results["has_influxdb"] = True
|
|
289
|
-
|
|
290
|
-
# Extract and validate Flux queries
|
|
291
|
-
flux_queries = re.findall(
|
|
292
|
-
r'from\(bucket:[^}]+',
|
|
293
|
-
code,
|
|
294
|
-
re.DOTALL | re.IGNORECASE
|
|
295
|
-
)
|
|
296
|
-
|
|
297
|
-
for query in flux_queries:
|
|
298
|
-
validation = self.validate_flux_query(query)
|
|
299
|
-
results["flux_queries"].append({
|
|
300
|
-
"query": query[:100] + "..." if len(query) > 100 else query,
|
|
301
|
-
"validation": validation
|
|
302
|
-
})
|
|
303
|
-
results["suggestions"].extend(validation.get("suggestions", []))
|
|
304
|
-
|
|
305
|
-
# Validate connection patterns
|
|
306
|
-
connection_validation = self.validate_connection_pattern(code)
|
|
307
|
-
results["connection_issues"].extend(connection_validation.get("issues", []))
|
|
308
|
-
results["suggestions"].extend(connection_validation.get("suggestions", []))
|
|
309
|
-
|
|
310
|
-
# Validate data modeling
|
|
311
|
-
modeling_validation = self.validate_data_modeling(code)
|
|
312
|
-
results["data_modeling_issues"].extend(modeling_validation.get("issues", []))
|
|
313
|
-
results["suggestions"].extend(modeling_validation.get("suggestions", []))
|
|
314
|
-
|
|
315
|
-
return results
|
|
316
|
-
|
|
1
|
+
"""
|
|
2
|
+
InfluxDB Validator - Validates InfluxDB queries and patterns
|
|
3
|
+
|
|
4
|
+
Phase 1.2: InfluxDB & Time-Series Support for HomeIQ
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import re
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
from ...core.language_detector import Language
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class InfluxDBValidator:
|
|
15
|
+
"""
|
|
16
|
+
Validates InfluxDB queries and connection patterns.
|
|
17
|
+
|
|
18
|
+
Checks for:
|
|
19
|
+
- Flux query syntax and patterns
|
|
20
|
+
- Query optimization opportunities
|
|
21
|
+
- Connection pattern best practices
|
|
22
|
+
- Time-series data modeling issues
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def __init__(self):
|
|
26
|
+
"""Initialize InfluxDB validator."""
|
|
27
|
+
self.flux_query_pattern = re.compile(
|
|
28
|
+
r'from\(bucket:\s*["\']([^"\']+)["\']\)',
|
|
29
|
+
re.IGNORECASE
|
|
30
|
+
)
|
|
31
|
+
self.range_pattern = re.compile(
|
|
32
|
+
r'range\(start:\s*([^)]+)\)',
|
|
33
|
+
re.IGNORECASE
|
|
34
|
+
)
|
|
35
|
+
self.filter_pattern = re.compile(
|
|
36
|
+
r'filter\(fn:\s*\(r\)\s*=>\s*([^)]+)\)',
|
|
37
|
+
re.IGNORECASE
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
def validate_flux_query(self, query: str) -> dict[str, Any]:
|
|
41
|
+
"""
|
|
42
|
+
Validate Flux query syntax and patterns.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
query: Flux query string
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
Dictionary with validation results:
|
|
49
|
+
{
|
|
50
|
+
"valid": bool,
|
|
51
|
+
"issues": list[str],
|
|
52
|
+
"suggestions": list[str],
|
|
53
|
+
"optimization_opportunities": list[str]
|
|
54
|
+
}
|
|
55
|
+
"""
|
|
56
|
+
issues = []
|
|
57
|
+
suggestions = []
|
|
58
|
+
optimizations = []
|
|
59
|
+
|
|
60
|
+
# Check for time range
|
|
61
|
+
if not self.range_pattern.search(query):
|
|
62
|
+
issues.append("Missing time range - always specify range() after from()")
|
|
63
|
+
suggestions.append("Add |> range(start: -1h) after from()")
|
|
64
|
+
|
|
65
|
+
# Check for bucket specification
|
|
66
|
+
if not self.flux_query_pattern.search(query):
|
|
67
|
+
issues.append("Missing or invalid bucket specification in from()")
|
|
68
|
+
suggestions.append("Use: from(bucket: \"bucket_name\")")
|
|
69
|
+
|
|
70
|
+
# Check query order (range should be early)
|
|
71
|
+
range_match = self.range_pattern.search(query)
|
|
72
|
+
filter_matches = list(self.filter_pattern.finditer(query))
|
|
73
|
+
|
|
74
|
+
if range_match and filter_matches:
|
|
75
|
+
range_pos = range_match.start()
|
|
76
|
+
first_filter_pos = filter_matches[0].start() if filter_matches else -1
|
|
77
|
+
|
|
78
|
+
# Check if filters come before range (bad pattern)
|
|
79
|
+
if first_filter_pos != -1 and first_filter_pos < range_pos:
|
|
80
|
+
issues.append("Filters appear before range() - range should come first")
|
|
81
|
+
suggestions.append("Move |> range(start: ...) before filter() operations")
|
|
82
|
+
|
|
83
|
+
# Check for common anti-patterns
|
|
84
|
+
if "aggregateWindow" in query and "filter" in query:
|
|
85
|
+
# Check if aggregation comes before filtering
|
|
86
|
+
agg_pos = query.find("aggregateWindow")
|
|
87
|
+
filter_pos = query.find("filter")
|
|
88
|
+
|
|
89
|
+
if agg_pos != -1 and filter_pos != -1 and agg_pos < filter_pos:
|
|
90
|
+
optimizations.append(
|
|
91
|
+
"Consider filtering before aggregating to reduce data processed"
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
# Check for missing createEmpty parameter
|
|
95
|
+
if "aggregateWindow" in query and "createEmpty: false" not in query:
|
|
96
|
+
suggestions.append(
|
|
97
|
+
"Add createEmpty: false to aggregateWindow() to skip empty windows"
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
# Check for limit() usage
|
|
101
|
+
if "limit(" not in query and len(query) > 500:
|
|
102
|
+
suggestions.append(
|
|
103
|
+
"Consider adding limit() for large result sets to improve performance"
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
# Check for tag vs field filtering order
|
|
107
|
+
# This is a heuristic - tags are typically in filter conditions with ==
|
|
108
|
+
# Fields are typically in filter conditions with >, <, >=, <=
|
|
109
|
+
tag_filters = re.findall(r'filter\(fn:\s*\(r\)\s*=>\s*r\["([^"]+)"\]\s*==', query)
|
|
110
|
+
field_filters = re.findall(r'filter\(fn:\s*\(r\)\s*=>\s*r\["([^"]+)"\]\s*[><=]', query)
|
|
111
|
+
|
|
112
|
+
if tag_filters and field_filters:
|
|
113
|
+
# Check if field filters come before tag filters
|
|
114
|
+
for field_filter in field_filters:
|
|
115
|
+
field_pos = query.find(f'r["{field_filter}"]')
|
|
116
|
+
for tag_filter in tag_filters:
|
|
117
|
+
tag_pos = query.find(f'r["{tag_filter}"]')
|
|
118
|
+
if field_pos != -1 and tag_pos != -1 and field_pos < tag_pos:
|
|
119
|
+
optimizations.append(
|
|
120
|
+
f"Consider filtering by tag '{tag_filter}' before field '{field_filter}' "
|
|
121
|
+
"(tags are indexed, fields are not)"
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
return {
|
|
125
|
+
"valid": len(issues) == 0,
|
|
126
|
+
"issues": issues,
|
|
127
|
+
"suggestions": suggestions,
|
|
128
|
+
"optimization_opportunities": optimizations
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
def validate_connection_pattern(self, code: str) -> dict[str, Any]:
|
|
132
|
+
"""
|
|
133
|
+
Validate InfluxDB connection patterns.
|
|
134
|
+
|
|
135
|
+
Args:
|
|
136
|
+
code: Python code containing InfluxDB client usage
|
|
137
|
+
|
|
138
|
+
Returns:
|
|
139
|
+
Dictionary with validation results:
|
|
140
|
+
{
|
|
141
|
+
"valid": bool,
|
|
142
|
+
"issues": list[str],
|
|
143
|
+
"suggestions": list[str]
|
|
144
|
+
}
|
|
145
|
+
"""
|
|
146
|
+
issues = []
|
|
147
|
+
suggestions = []
|
|
148
|
+
|
|
149
|
+
# Check for client creation
|
|
150
|
+
if "InfluxDBClient" not in code:
|
|
151
|
+
return {
|
|
152
|
+
"valid": True,
|
|
153
|
+
"issues": [],
|
|
154
|
+
"suggestions": []
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
# Check for context manager usage
|
|
158
|
+
if "InfluxDBClient" in code and "with" not in code:
|
|
159
|
+
suggestions.append(
|
|
160
|
+
"Consider using context manager (with statement) for automatic cleanup"
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
# Check for connection pooling/reuse
|
|
164
|
+
if code.count("InfluxDBClient(") > 1:
|
|
165
|
+
issues.append("Multiple InfluxDBClient instances - consider connection pooling")
|
|
166
|
+
suggestions.append("Reuse a single client instance or use connection pooling")
|
|
167
|
+
|
|
168
|
+
# Check for error handling
|
|
169
|
+
if "InfluxDBClient" in code and "except" not in code:
|
|
170
|
+
suggestions.append("Add error handling for InfluxDB operations")
|
|
171
|
+
|
|
172
|
+
# Check for retry logic
|
|
173
|
+
if "InfluxDBClient" in code and "retry" not in code.lower():
|
|
174
|
+
suggestions.append("Consider adding retry logic for network operations")
|
|
175
|
+
|
|
176
|
+
# Check for batch writes
|
|
177
|
+
if "write_api.write" in code:
|
|
178
|
+
write_calls = code.count("write_api.write")
|
|
179
|
+
if write_calls > 5:
|
|
180
|
+
suggestions.append(
|
|
181
|
+
"Consider batching multiple writes into a single write_api.write() call"
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
# Check for async patterns
|
|
185
|
+
if "InfluxDBClient" in code and "async" in code:
|
|
186
|
+
if "await" not in code:
|
|
187
|
+
issues.append("Async function defined but await not used")
|
|
188
|
+
|
|
189
|
+
return {
|
|
190
|
+
"valid": len(issues) == 0,
|
|
191
|
+
"issues": issues,
|
|
192
|
+
"suggestions": suggestions
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
def validate_data_modeling(self, code: str) -> dict[str, Any]:
|
|
196
|
+
"""
|
|
197
|
+
Validate time-series data modeling patterns.
|
|
198
|
+
|
|
199
|
+
Args:
|
|
200
|
+
code: Code containing InfluxDB data point creation
|
|
201
|
+
|
|
202
|
+
Returns:
|
|
203
|
+
Dictionary with validation results:
|
|
204
|
+
{
|
|
205
|
+
"valid": bool,
|
|
206
|
+
"issues": list[str],
|
|
207
|
+
"suggestions": list[str]
|
|
208
|
+
}
|
|
209
|
+
"""
|
|
210
|
+
issues = []
|
|
211
|
+
suggestions = []
|
|
212
|
+
|
|
213
|
+
# Check for Point creation
|
|
214
|
+
if "Point(" not in code:
|
|
215
|
+
return {
|
|
216
|
+
"valid": True,
|
|
217
|
+
"issues": [],
|
|
218
|
+
"suggestions": []
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
# Check for tag vs field usage
|
|
222
|
+
if ".tag(" in code and ".field(" in code:
|
|
223
|
+
# Check if high-cardinality data is used as tag
|
|
224
|
+
# This is a heuristic - timestamps, unique IDs as tags are problematic
|
|
225
|
+
if re.search(r'\.tag\([^)]*timestamp', code, re.IGNORECASE):
|
|
226
|
+
issues.append("Timestamp used as tag - timestamps are automatic, don't duplicate")
|
|
227
|
+
suggestions.append("Remove timestamp from tags, use time parameter instead")
|
|
228
|
+
|
|
229
|
+
# Check for measurement naming
|
|
230
|
+
point_creations = re.findall(r'Point\(["\']([^"\']+)["\']\)', code)
|
|
231
|
+
for measurement in point_creations:
|
|
232
|
+
if len(measurement) > 50:
|
|
233
|
+
suggestions.append(
|
|
234
|
+
f"Measurement name '{measurement}' is long - consider shorter names"
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
# Check for proper field types
|
|
238
|
+
if ".field(" in code:
|
|
239
|
+
# Check for string fields that should be numeric
|
|
240
|
+
if re.search(r'\.field\([^,]+,\s*["\']\d+\.?\d*["\']', code):
|
|
241
|
+
suggestions.append(
|
|
242
|
+
"Numeric values in quotes - ensure proper field types (float vs string)"
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
return {
|
|
246
|
+
"valid": len(issues) == 0,
|
|
247
|
+
"issues": issues,
|
|
248
|
+
"suggestions": suggestions
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
def review_file(self, file_path: Path, code: str) -> dict[str, Any]:
|
|
252
|
+
"""
|
|
253
|
+
Review a file for InfluxDB patterns.
|
|
254
|
+
|
|
255
|
+
Args:
|
|
256
|
+
file_path: Path to the file
|
|
257
|
+
code: File content
|
|
258
|
+
|
|
259
|
+
Returns:
|
|
260
|
+
Dictionary with review results:
|
|
261
|
+
{
|
|
262
|
+
"has_influxdb": bool,
|
|
263
|
+
"flux_queries": list[dict],
|
|
264
|
+
"connection_issues": list[str],
|
|
265
|
+
"data_modeling_issues": list[str],
|
|
266
|
+
"suggestions": list[str]
|
|
267
|
+
}
|
|
268
|
+
"""
|
|
269
|
+
results = {
|
|
270
|
+
"has_influxdb": False,
|
|
271
|
+
"flux_queries": [],
|
|
272
|
+
"connection_issues": [],
|
|
273
|
+
"data_modeling_issues": [],
|
|
274
|
+
"suggestions": []
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
# Check if file contains InfluxDB code
|
|
278
|
+
has_influxdb = (
|
|
279
|
+
"InfluxDBClient" in code or
|
|
280
|
+
"influxdb" in code.lower() or
|
|
281
|
+
"from(bucket:" in code or
|
|
282
|
+
"Point(" in code
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
if not has_influxdb:
|
|
286
|
+
return results
|
|
287
|
+
|
|
288
|
+
results["has_influxdb"] = True
|
|
289
|
+
|
|
290
|
+
# Extract and validate Flux queries
|
|
291
|
+
flux_queries = re.findall(
|
|
292
|
+
r'from\(bucket:[^}]+',
|
|
293
|
+
code,
|
|
294
|
+
re.DOTALL | re.IGNORECASE
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
for query in flux_queries:
|
|
298
|
+
validation = self.validate_flux_query(query)
|
|
299
|
+
results["flux_queries"].append({
|
|
300
|
+
"query": query[:100] + "..." if len(query) > 100 else query,
|
|
301
|
+
"validation": validation
|
|
302
|
+
})
|
|
303
|
+
results["suggestions"].extend(validation.get("suggestions", []))
|
|
304
|
+
|
|
305
|
+
# Validate connection patterns
|
|
306
|
+
connection_validation = self.validate_connection_pattern(code)
|
|
307
|
+
results["connection_issues"].extend(connection_validation.get("issues", []))
|
|
308
|
+
results["suggestions"].extend(connection_validation.get("suggestions", []))
|
|
309
|
+
|
|
310
|
+
# Validate data modeling
|
|
311
|
+
modeling_validation = self.validate_data_modeling(code)
|
|
312
|
+
results["data_modeling_issues"].extend(modeling_validation.get("issues", []))
|
|
313
|
+
results["suggestions"].extend(modeling_validation.get("suggestions", []))
|
|
314
|
+
|
|
315
|
+
return results
|
|
316
|
+
|