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,437 +1,437 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Error Analyzer - Prepares error analysis instructions for Cursor Skills
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import re
|
|
6
|
-
from pathlib import Path
|
|
7
|
-
from typing import Any
|
|
8
|
-
|
|
9
|
-
from ...core.instructions import ErrorAnalysisInstruction
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class ErrorAnalyzer:
|
|
13
|
-
"""Prepares error analysis instructions for Cursor Skills execution."""
|
|
14
|
-
|
|
15
|
-
def __init__(self):
|
|
16
|
-
"""Initialize error analyzer."""
|
|
17
|
-
pass
|
|
18
|
-
|
|
19
|
-
async def analyze_error(
|
|
20
|
-
self,
|
|
21
|
-
error_message: str,
|
|
22
|
-
stack_trace: str | None = None,
|
|
23
|
-
code_context: str | None = None,
|
|
24
|
-
file_path: Path | None = None,
|
|
25
|
-
) -> dict[str, Any]:
|
|
26
|
-
"""
|
|
27
|
-
Analyze an error and return analysis results.
|
|
28
|
-
|
|
29
|
-
Args:
|
|
30
|
-
error_message: The error message
|
|
31
|
-
stack_trace: Optional stack trace
|
|
32
|
-
code_context: Optional code context around the error
|
|
33
|
-
file_path: Optional file path where error occurred
|
|
34
|
-
|
|
35
|
-
Returns:
|
|
36
|
-
Dictionary with error analysis including suggestions and fix examples
|
|
37
|
-
"""
|
|
38
|
-
# Parse error to extract basic information
|
|
39
|
-
error_info = self._parse_error(error_message, stack_trace)
|
|
40
|
-
|
|
41
|
-
# Generate basic suggestions based on error type
|
|
42
|
-
suggestions = self._generate_suggestions(error_info, error_message, stack_trace)
|
|
43
|
-
|
|
44
|
-
# Generate fix examples based on error type
|
|
45
|
-
fix_examples = self._generate_fix_examples(error_info, error_message)
|
|
46
|
-
|
|
47
|
-
# Determine root cause
|
|
48
|
-
root_cause = self._determine_root_cause(error_info, error_message)
|
|
49
|
-
|
|
50
|
-
return {
|
|
51
|
-
"error_type": error_info.get("type", "Unknown"),
|
|
52
|
-
"error_message": error_message,
|
|
53
|
-
"file_location": error_info.get("file") or (str(file_path) if file_path else None),
|
|
54
|
-
"line_number": error_info.get("line"),
|
|
55
|
-
"root_cause": root_cause,
|
|
56
|
-
"suggestions": suggestions,
|
|
57
|
-
"fix_examples": fix_examples,
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
def prepare_error_analysis(
|
|
61
|
-
self,
|
|
62
|
-
error_message: str,
|
|
63
|
-
stack_trace: str | None = None,
|
|
64
|
-
code_context: str | None = None,
|
|
65
|
-
file_path: Path | None = None,
|
|
66
|
-
) -> ErrorAnalysisInstruction:
|
|
67
|
-
"""
|
|
68
|
-
Prepare error analysis instruction for Cursor Skills.
|
|
69
|
-
|
|
70
|
-
Args:
|
|
71
|
-
error_message: The error message
|
|
72
|
-
stack_trace: Optional stack trace
|
|
73
|
-
code_context: Optional code context around the error
|
|
74
|
-
file_path: Optional file path where error occurred
|
|
75
|
-
|
|
76
|
-
Returns:
|
|
77
|
-
ErrorAnalysisInstruction object for Cursor Skills execution
|
|
78
|
-
"""
|
|
79
|
-
# Extract error info for context lines
|
|
80
|
-
error_info = self._parse_error(error_message, stack_trace)
|
|
81
|
-
context_lines = 50 # Default context lines
|
|
82
|
-
|
|
83
|
-
return ErrorAnalysisInstruction(
|
|
84
|
-
error_message=error_message,
|
|
85
|
-
stack_trace=stack_trace,
|
|
86
|
-
context_lines=context_lines,
|
|
87
|
-
)
|
|
88
|
-
|
|
89
|
-
def prepare_code_trace(
|
|
90
|
-
self,
|
|
91
|
-
file_path: Path,
|
|
92
|
-
function_name: str | None = None,
|
|
93
|
-
line_number: int | None = None,
|
|
94
|
-
) -> ErrorAnalysisInstruction:
|
|
95
|
-
"""
|
|
96
|
-
Prepare code trace instruction for Cursor Skills.
|
|
97
|
-
|
|
98
|
-
Args:
|
|
99
|
-
file_path: Path to the file
|
|
100
|
-
function_name: Optional function name to trace
|
|
101
|
-
line_number: Optional line number to trace from
|
|
102
|
-
|
|
103
|
-
Returns:
|
|
104
|
-
ErrorAnalysisInstruction object for Cursor Skills execution
|
|
105
|
-
"""
|
|
106
|
-
error_message = f"Trace code path in {file_path}"
|
|
107
|
-
if function_name:
|
|
108
|
-
error_message += f" starting from function {function_name}"
|
|
109
|
-
if line_number:
|
|
110
|
-
error_message += f" at line {line_number}"
|
|
111
|
-
|
|
112
|
-
return ErrorAnalysisInstruction(
|
|
113
|
-
error_message=error_message,
|
|
114
|
-
stack_trace=None,
|
|
115
|
-
context_lines=100, # More context for tracing
|
|
116
|
-
)
|
|
117
|
-
|
|
118
|
-
def _parse_error(
|
|
119
|
-
self, error_message: str, stack_trace: str | None = None
|
|
120
|
-
) -> dict[str, Any]:
|
|
121
|
-
"""Parse error message and stack trace to extract information."""
|
|
122
|
-
error_info: dict[str, Any] = {
|
|
123
|
-
"type": "Unknown",
|
|
124
|
-
"message": error_message,
|
|
125
|
-
"file": None,
|
|
126
|
-
"line": None,
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
# Extract error type (e.g., "ValueError", "AttributeError")
|
|
130
|
-
type_match = re.search(r"^(\w+Error):", error_message, re.MULTILINE)
|
|
131
|
-
if type_match:
|
|
132
|
-
error_info["type"] = type_match.group(1)
|
|
133
|
-
|
|
134
|
-
# Parse stack trace if provided
|
|
135
|
-
if stack_trace:
|
|
136
|
-
# Extract file and line from stack trace
|
|
137
|
-
# Format: File "path/to/file.py", line X, in function_name
|
|
138
|
-
file_match = re.search(r'File "([^"]+)", line (\d+)', stack_trace)
|
|
139
|
-
if file_match:
|
|
140
|
-
error_info["file"] = file_match.group(1)
|
|
141
|
-
error_info["line"] = int(file_match.group(2))
|
|
142
|
-
|
|
143
|
-
return error_info
|
|
144
|
-
|
|
145
|
-
def _analyze_code_structure(self, code: str) -> dict[str, Any]:
|
|
146
|
-
"""Analyze code structure for tracing."""
|
|
147
|
-
import ast
|
|
148
|
-
|
|
149
|
-
functions: list[dict[str, Any]] = []
|
|
150
|
-
classes: list[dict[str, Any]] = []
|
|
151
|
-
imports: list[str] = []
|
|
152
|
-
calls: list[dict[str, Any]] = []
|
|
153
|
-
structure: dict[str, Any] = {
|
|
154
|
-
"functions": functions,
|
|
155
|
-
"classes": classes,
|
|
156
|
-
"imports": imports,
|
|
157
|
-
"calls": calls,
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
try:
|
|
161
|
-
tree = ast.parse(code)
|
|
162
|
-
|
|
163
|
-
for node in ast.walk(tree):
|
|
164
|
-
if isinstance(node, ast.FunctionDef):
|
|
165
|
-
functions.append(
|
|
166
|
-
{
|
|
167
|
-
"name": node.name,
|
|
168
|
-
"line": node.lineno,
|
|
169
|
-
"args": [arg.arg for arg in node.args.args],
|
|
170
|
-
}
|
|
171
|
-
)
|
|
172
|
-
elif isinstance(node, ast.ClassDef):
|
|
173
|
-
classes.append({"name": node.name, "line": node.lineno})
|
|
174
|
-
elif isinstance(node, ast.Call):
|
|
175
|
-
if isinstance(node.func, ast.Name):
|
|
176
|
-
calls.append({"function": node.func.id, "line": node.lineno})
|
|
177
|
-
except SyntaxError:
|
|
178
|
-
pass
|
|
179
|
-
|
|
180
|
-
return structure
|
|
181
|
-
|
|
182
|
-
def _build_analysis_prompt(
|
|
183
|
-
self,
|
|
184
|
-
error_message: str,
|
|
185
|
-
stack_trace: str | None,
|
|
186
|
-
code_context: str | None,
|
|
187
|
-
file_path: Path | None,
|
|
188
|
-
) -> str:
|
|
189
|
-
"""Build prompt for error analysis."""
|
|
190
|
-
prompt_parts = [
|
|
191
|
-
"Analyze the following error and provide:",
|
|
192
|
-
"1. Root cause of the error",
|
|
193
|
-
"2. Specific issue explanation",
|
|
194
|
-
"3. Step-by-step fix suggestions",
|
|
195
|
-
"4. Code examples for the fix",
|
|
196
|
-
"",
|
|
197
|
-
f"Error: {error_message}",
|
|
198
|
-
"",
|
|
199
|
-
]
|
|
200
|
-
|
|
201
|
-
if stack_trace:
|
|
202
|
-
prompt_parts.append("Stack trace:")
|
|
203
|
-
prompt_parts.append(stack_trace)
|
|
204
|
-
prompt_parts.append("")
|
|
205
|
-
|
|
206
|
-
if file_path:
|
|
207
|
-
prompt_parts.append(f"File: {file_path}")
|
|
208
|
-
prompt_parts.append("")
|
|
209
|
-
|
|
210
|
-
if code_context:
|
|
211
|
-
prompt_parts.append("Code context:")
|
|
212
|
-
prompt_parts.append("```python")
|
|
213
|
-
prompt_parts.append(code_context[:2000]) # Limit context size
|
|
214
|
-
prompt_parts.append("```")
|
|
215
|
-
prompt_parts.append("")
|
|
216
|
-
|
|
217
|
-
prompt_parts.extend(
|
|
218
|
-
[
|
|
219
|
-
"Provide analysis in the following format:",
|
|
220
|
-
"ROOT_CAUSE: <explanation>",
|
|
221
|
-
"ISSUE: <specific issue>",
|
|
222
|
-
"SUGGESTIONS:",
|
|
223
|
-
"1. <first suggestion>",
|
|
224
|
-
"2. <second suggestion>",
|
|
225
|
-
"FIX_EXAMPLES:",
|
|
226
|
-
"```python",
|
|
227
|
-
"<code example>",
|
|
228
|
-
"```",
|
|
229
|
-
]
|
|
230
|
-
)
|
|
231
|
-
|
|
232
|
-
return "\n".join(prompt_parts)
|
|
233
|
-
|
|
234
|
-
def _build_trace_prompt(
|
|
235
|
-
self,
|
|
236
|
-
code: str,
|
|
237
|
-
function_name: str | None,
|
|
238
|
-
line_number: int | None,
|
|
239
|
-
structure: dict[str, Any],
|
|
240
|
-
) -> str:
|
|
241
|
-
"""Build prompt for code path tracing."""
|
|
242
|
-
prompt_parts = ["Trace the execution path of this code:", ""]
|
|
243
|
-
|
|
244
|
-
if function_name:
|
|
245
|
-
prompt_parts.append(f"Starting from function: {function_name}")
|
|
246
|
-
if line_number:
|
|
247
|
-
prompt_parts.append(f"Starting from line: {line_number}")
|
|
248
|
-
|
|
249
|
-
prompt_parts.append("")
|
|
250
|
-
prompt_parts.append("Code structure:")
|
|
251
|
-
prompt_parts.append(
|
|
252
|
-
f"- Functions: {', '.join([f['name'] for f in structure['functions']])}"
|
|
253
|
-
)
|
|
254
|
-
prompt_parts.append(
|
|
255
|
-
f"- Classes: {', '.join([c['name'] for c in structure['classes']])}"
|
|
256
|
-
)
|
|
257
|
-
prompt_parts.append("")
|
|
258
|
-
prompt_parts.append("Code:")
|
|
259
|
-
prompt_parts.append("```python")
|
|
260
|
-
prompt_parts.append(code[:3000]) # Limit code size
|
|
261
|
-
prompt_parts.append("```")
|
|
262
|
-
prompt_parts.append("")
|
|
263
|
-
prompt_parts.append("Provide execution path analysis:")
|
|
264
|
-
|
|
265
|
-
return "\n".join(prompt_parts)
|
|
266
|
-
|
|
267
|
-
def _parse_llm_analysis(self, analysis_text: str) -> dict[str, Any]:
|
|
268
|
-
"""Parse LLM analysis response."""
|
|
269
|
-
parsed = {"root_cause": "", "issue": "", "suggestions": [], "fix_examples": []}
|
|
270
|
-
|
|
271
|
-
# Extract root cause
|
|
272
|
-
root_cause_match = re.search(
|
|
273
|
-
r"ROOT_CAUSE:\s*(.+?)(?=\n[A-Z_]+:|$)", analysis_text, re.DOTALL
|
|
274
|
-
)
|
|
275
|
-
if root_cause_match:
|
|
276
|
-
parsed["root_cause"] = root_cause_match.group(1).strip()
|
|
277
|
-
|
|
278
|
-
# Extract issue
|
|
279
|
-
issue_match = re.search(
|
|
280
|
-
r"ISSUE:\s*(.+?)(?=\n[A-Z_]+:|$)", analysis_text, re.DOTALL
|
|
281
|
-
)
|
|
282
|
-
if issue_match:
|
|
283
|
-
parsed["issue"] = issue_match.group(1).strip()
|
|
284
|
-
|
|
285
|
-
# Extract suggestions
|
|
286
|
-
suggestions_match = re.search(
|
|
287
|
-
r"SUGGESTIONS:\s*(.+?)(?=\n[A-Z_]+:|$)", analysis_text, re.DOTALL
|
|
288
|
-
)
|
|
289
|
-
if suggestions_match:
|
|
290
|
-
suggestions_text = suggestions_match.group(1)
|
|
291
|
-
# Extract numbered suggestions
|
|
292
|
-
suggestion_lines = re.findall(
|
|
293
|
-
r"\d+\.\s*(.+?)(?=\n\d+\.|$)", suggestions_text, re.DOTALL
|
|
294
|
-
)
|
|
295
|
-
parsed["suggestions"] = [s.strip() for s in suggestion_lines]
|
|
296
|
-
|
|
297
|
-
# Extract fix examples
|
|
298
|
-
fix_examples_match = re.search(
|
|
299
|
-
r"FIX_EXAMPLES:\s*```python\s*(.+?)```", analysis_text, re.DOTALL
|
|
300
|
-
)
|
|
301
|
-
if fix_examples_match:
|
|
302
|
-
parsed["fix_examples"] = [fix_examples_match.group(1).strip()]
|
|
303
|
-
|
|
304
|
-
return parsed
|
|
305
|
-
|
|
306
|
-
def _parse_execution_path(self, trace_analysis: str) -> list[str]:
|
|
307
|
-
"""Parse execution path from trace analysis."""
|
|
308
|
-
# Simple extraction - look for function calls or line references
|
|
309
|
-
path = []
|
|
310
|
-
|
|
311
|
-
# Look for patterns like "calls function X" or "line Y"
|
|
312
|
-
calls = re.findall(
|
|
313
|
-
r"(?:calls|executes|runs)\s+(\w+)", trace_analysis, re.IGNORECASE
|
|
314
|
-
)
|
|
315
|
-
path.extend(calls)
|
|
316
|
-
|
|
317
|
-
return path if path else ["Execution path extracted from analysis"]
|
|
318
|
-
|
|
319
|
-
def _generate_suggestions(
|
|
320
|
-
self, error_info: dict[str, Any], error_message: str, stack_trace: str | None
|
|
321
|
-
) -> list[str]:
|
|
322
|
-
"""Generate suggestions based on error type and message."""
|
|
323
|
-
suggestions: list[str] = []
|
|
324
|
-
error_type = error_info.get("type", "").lower()
|
|
325
|
-
message_lower = error_message.lower()
|
|
326
|
-
|
|
327
|
-
if "attributeerror" in error_type or "no attribute" in message_lower:
|
|
328
|
-
suggestions.append("Check if the object/class has the attribute being accessed")
|
|
329
|
-
suggestions.append("Verify the attribute name spelling and case sensitivity")
|
|
330
|
-
suggestions.append("Ensure the object is properly initialized before accessing attributes")
|
|
331
|
-
if "'" in error_message:
|
|
332
|
-
attr_match = re.search(r"'(\w+)'", error_message)
|
|
333
|
-
if attr_match:
|
|
334
|
-
attr_name = attr_match.group(1)
|
|
335
|
-
suggestions.append(f"Consider if '{attr_name}' should be '{attr_name}' or a different method name")
|
|
336
|
-
elif "nameerror" in error_type or "not defined" in message_lower:
|
|
337
|
-
suggestions.append("Check if the variable/function is defined before use")
|
|
338
|
-
suggestions.append("Verify import statements if it's a module or function from another file")
|
|
339
|
-
suggestions.append("Check for typos in variable or function names")
|
|
340
|
-
elif "typeerror" in error_type:
|
|
341
|
-
suggestions.append("Verify the types of arguments being passed")
|
|
342
|
-
suggestions.append("Check if None values are being used where a value is expected")
|
|
343
|
-
suggestions.append("Ensure function signatures match the call sites")
|
|
344
|
-
elif "valueerror" in error_type:
|
|
345
|
-
suggestions.append("Check if input values are in the expected format or range")
|
|
346
|
-
suggestions.append("Validate input data before processing")
|
|
347
|
-
elif "keyerror" in error_type:
|
|
348
|
-
suggestions.append("Check if the key exists in the dictionary before accessing")
|
|
349
|
-
suggestions.append("Use .get() method with default values for optional keys")
|
|
350
|
-
elif "indexerror" in error_type:
|
|
351
|
-
suggestions.append("Verify the index is within the bounds of the list/array")
|
|
352
|
-
suggestions.append("Check if the list/array is empty before accessing")
|
|
353
|
-
elif "file not found" in message_lower or "filenotfounderror" in error_type:
|
|
354
|
-
suggestions.append("Verify the file path is correct and the file exists")
|
|
355
|
-
suggestions.append("Check if you need to create the file or directory first")
|
|
356
|
-
suggestions.append("Verify path separators for your operating system")
|
|
357
|
-
elif "permission" in message_lower or "permissiondenied" in error_type:
|
|
358
|
-
suggestions.append("Check file/directory permissions")
|
|
359
|
-
suggestions.append("Verify you have write access if trying to modify files")
|
|
360
|
-
elif "connection" in message_lower or "timeout" in message_lower:
|
|
361
|
-
suggestions.append("Check network connectivity")
|
|
362
|
-
suggestions.append("Verify the service/endpoint is running and accessible")
|
|
363
|
-
suggestions.append("Check firewall settings and ports")
|
|
364
|
-
else:
|
|
365
|
-
suggestions.append("Review the error message and stack trace for context")
|
|
366
|
-
suggestions.append("Check the code around the error location")
|
|
367
|
-
if stack_trace:
|
|
368
|
-
suggestions.append("Examine the stack trace to trace the execution path")
|
|
369
|
-
|
|
370
|
-
return suggestions
|
|
371
|
-
|
|
372
|
-
def _generate_fix_examples(
|
|
373
|
-
self, error_info: dict[str, Any], error_message: str
|
|
374
|
-
) -> list[str]:
|
|
375
|
-
"""Generate fix examples based on error type."""
|
|
376
|
-
fix_examples: list[str] = []
|
|
377
|
-
error_type = error_info.get("type", "").lower()
|
|
378
|
-
message_lower = error_message.lower()
|
|
379
|
-
|
|
380
|
-
if "attributeerror" in error_type or "no attribute" in message_lower:
|
|
381
|
-
attr_match = re.search(r"'(\w+)'", error_message)
|
|
382
|
-
if attr_match:
|
|
383
|
-
attr_name = attr_match.group(1)
|
|
384
|
-
fix_examples.append(
|
|
385
|
-
f"# Instead of: obj.{attr_name}\n"
|
|
386
|
-
f"# Check if attribute exists:\n"
|
|
387
|
-
f"if hasattr(obj, '{attr_name}'):\n"
|
|
388
|
-
f" result = getattr(obj, '{attr_name}')"
|
|
389
|
-
)
|
|
390
|
-
elif "keyerror" in error_type:
|
|
391
|
-
fix_examples.append(
|
|
392
|
-
"# Instead of: value = my_dict['key']\n"
|
|
393
|
-
"# Use: value = my_dict.get('key', default_value)"
|
|
394
|
-
)
|
|
395
|
-
elif "indexerror" in error_type:
|
|
396
|
-
fix_examples.append(
|
|
397
|
-
"# Instead of: item = my_list[index]\n"
|
|
398
|
-
"# Use: \n"
|
|
399
|
-
"if index < len(my_list):\n"
|
|
400
|
-
" item = my_list[index]\n"
|
|
401
|
-
"else:\n"
|
|
402
|
-
" # Handle index out of bounds"
|
|
403
|
-
)
|
|
404
|
-
elif "nameerror" in error_type:
|
|
405
|
-
var_match = re.search(r"'(\w+)'", error_message)
|
|
406
|
-
if var_match:
|
|
407
|
-
var_name = var_match.group(1)
|
|
408
|
-
fix_examples.append(
|
|
409
|
-
f"# Make sure '{var_name}' is defined before use:\n"
|
|
410
|
-
f"{var_name} = ... # Initialize variable"
|
|
411
|
-
)
|
|
412
|
-
|
|
413
|
-
return fix_examples
|
|
414
|
-
|
|
415
|
-
def _determine_root_cause(
|
|
416
|
-
self, error_info: dict[str, Any], error_message: str
|
|
417
|
-
) -> str:
|
|
418
|
-
"""Determine the root cause based on error information."""
|
|
419
|
-
error_type = error_info.get("type", "Unknown")
|
|
420
|
-
message_lower = error_message.lower()
|
|
421
|
-
|
|
422
|
-
if "attributeerror" in error_type.lower():
|
|
423
|
-
return f"The object does not have the attribute being accessed. This often happens when the object type is different than expected or the attribute name is misspelled."
|
|
424
|
-
elif "nameerror" in error_type.lower():
|
|
425
|
-
return f"A variable or function name is being used before it's defined or imported."
|
|
426
|
-
elif "typeerror" in error_type.lower():
|
|
427
|
-
return f"An operation or function is being applied to an object of an inappropriate type."
|
|
428
|
-
elif "keyerror" in error_type.lower():
|
|
429
|
-
return f"A dictionary key is being accessed that doesn't exist in the dictionary."
|
|
430
|
-
elif "indexerror" in error_type.lower():
|
|
431
|
-
return f"A list/array index is out of range, either negative or beyond the length of the sequence."
|
|
432
|
-
elif "file not found" in message_lower:
|
|
433
|
-
return f"The specified file or directory path does not exist or is incorrect."
|
|
434
|
-
elif "connection" in message_lower:
|
|
435
|
-
return f"A network connection cannot be established or has been lost."
|
|
436
|
-
else:
|
|
437
|
-
return f"An error of type {error_type} occurred. Review the error message and stack trace for details."
|
|
1
|
+
"""
|
|
2
|
+
Error Analyzer - Prepares error analysis instructions for Cursor Skills
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import re
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from ...core.instructions import ErrorAnalysisInstruction
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ErrorAnalyzer:
|
|
13
|
+
"""Prepares error analysis instructions for Cursor Skills execution."""
|
|
14
|
+
|
|
15
|
+
def __init__(self):
|
|
16
|
+
"""Initialize error analyzer."""
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
async def analyze_error(
|
|
20
|
+
self,
|
|
21
|
+
error_message: str,
|
|
22
|
+
stack_trace: str | None = None,
|
|
23
|
+
code_context: str | None = None,
|
|
24
|
+
file_path: Path | None = None,
|
|
25
|
+
) -> dict[str, Any]:
|
|
26
|
+
"""
|
|
27
|
+
Analyze an error and return analysis results.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
error_message: The error message
|
|
31
|
+
stack_trace: Optional stack trace
|
|
32
|
+
code_context: Optional code context around the error
|
|
33
|
+
file_path: Optional file path where error occurred
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
Dictionary with error analysis including suggestions and fix examples
|
|
37
|
+
"""
|
|
38
|
+
# Parse error to extract basic information
|
|
39
|
+
error_info = self._parse_error(error_message, stack_trace)
|
|
40
|
+
|
|
41
|
+
# Generate basic suggestions based on error type
|
|
42
|
+
suggestions = self._generate_suggestions(error_info, error_message, stack_trace)
|
|
43
|
+
|
|
44
|
+
# Generate fix examples based on error type
|
|
45
|
+
fix_examples = self._generate_fix_examples(error_info, error_message)
|
|
46
|
+
|
|
47
|
+
# Determine root cause
|
|
48
|
+
root_cause = self._determine_root_cause(error_info, error_message)
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
"error_type": error_info.get("type", "Unknown"),
|
|
52
|
+
"error_message": error_message,
|
|
53
|
+
"file_location": error_info.get("file") or (str(file_path) if file_path else None),
|
|
54
|
+
"line_number": error_info.get("line"),
|
|
55
|
+
"root_cause": root_cause,
|
|
56
|
+
"suggestions": suggestions,
|
|
57
|
+
"fix_examples": fix_examples,
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
def prepare_error_analysis(
|
|
61
|
+
self,
|
|
62
|
+
error_message: str,
|
|
63
|
+
stack_trace: str | None = None,
|
|
64
|
+
code_context: str | None = None,
|
|
65
|
+
file_path: Path | None = None,
|
|
66
|
+
) -> ErrorAnalysisInstruction:
|
|
67
|
+
"""
|
|
68
|
+
Prepare error analysis instruction for Cursor Skills.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
error_message: The error message
|
|
72
|
+
stack_trace: Optional stack trace
|
|
73
|
+
code_context: Optional code context around the error
|
|
74
|
+
file_path: Optional file path where error occurred
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
ErrorAnalysisInstruction object for Cursor Skills execution
|
|
78
|
+
"""
|
|
79
|
+
# Extract error info for context lines
|
|
80
|
+
error_info = self._parse_error(error_message, stack_trace)
|
|
81
|
+
context_lines = 50 # Default context lines
|
|
82
|
+
|
|
83
|
+
return ErrorAnalysisInstruction(
|
|
84
|
+
error_message=error_message,
|
|
85
|
+
stack_trace=stack_trace,
|
|
86
|
+
context_lines=context_lines,
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
def prepare_code_trace(
|
|
90
|
+
self,
|
|
91
|
+
file_path: Path,
|
|
92
|
+
function_name: str | None = None,
|
|
93
|
+
line_number: int | None = None,
|
|
94
|
+
) -> ErrorAnalysisInstruction:
|
|
95
|
+
"""
|
|
96
|
+
Prepare code trace instruction for Cursor Skills.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
file_path: Path to the file
|
|
100
|
+
function_name: Optional function name to trace
|
|
101
|
+
line_number: Optional line number to trace from
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
ErrorAnalysisInstruction object for Cursor Skills execution
|
|
105
|
+
"""
|
|
106
|
+
error_message = f"Trace code path in {file_path}"
|
|
107
|
+
if function_name:
|
|
108
|
+
error_message += f" starting from function {function_name}"
|
|
109
|
+
if line_number:
|
|
110
|
+
error_message += f" at line {line_number}"
|
|
111
|
+
|
|
112
|
+
return ErrorAnalysisInstruction(
|
|
113
|
+
error_message=error_message,
|
|
114
|
+
stack_trace=None,
|
|
115
|
+
context_lines=100, # More context for tracing
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
def _parse_error(
|
|
119
|
+
self, error_message: str, stack_trace: str | None = None
|
|
120
|
+
) -> dict[str, Any]:
|
|
121
|
+
"""Parse error message and stack trace to extract information."""
|
|
122
|
+
error_info: dict[str, Any] = {
|
|
123
|
+
"type": "Unknown",
|
|
124
|
+
"message": error_message,
|
|
125
|
+
"file": None,
|
|
126
|
+
"line": None,
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
# Extract error type (e.g., "ValueError", "AttributeError")
|
|
130
|
+
type_match = re.search(r"^(\w+Error):", error_message, re.MULTILINE)
|
|
131
|
+
if type_match:
|
|
132
|
+
error_info["type"] = type_match.group(1)
|
|
133
|
+
|
|
134
|
+
# Parse stack trace if provided
|
|
135
|
+
if stack_trace:
|
|
136
|
+
# Extract file and line from stack trace
|
|
137
|
+
# Format: File "path/to/file.py", line X, in function_name
|
|
138
|
+
file_match = re.search(r'File "([^"]+)", line (\d+)', stack_trace)
|
|
139
|
+
if file_match:
|
|
140
|
+
error_info["file"] = file_match.group(1)
|
|
141
|
+
error_info["line"] = int(file_match.group(2))
|
|
142
|
+
|
|
143
|
+
return error_info
|
|
144
|
+
|
|
145
|
+
def _analyze_code_structure(self, code: str) -> dict[str, Any]:
|
|
146
|
+
"""Analyze code structure for tracing."""
|
|
147
|
+
import ast
|
|
148
|
+
|
|
149
|
+
functions: list[dict[str, Any]] = []
|
|
150
|
+
classes: list[dict[str, Any]] = []
|
|
151
|
+
imports: list[str] = []
|
|
152
|
+
calls: list[dict[str, Any]] = []
|
|
153
|
+
structure: dict[str, Any] = {
|
|
154
|
+
"functions": functions,
|
|
155
|
+
"classes": classes,
|
|
156
|
+
"imports": imports,
|
|
157
|
+
"calls": calls,
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
try:
|
|
161
|
+
tree = ast.parse(code)
|
|
162
|
+
|
|
163
|
+
for node in ast.walk(tree):
|
|
164
|
+
if isinstance(node, ast.FunctionDef):
|
|
165
|
+
functions.append(
|
|
166
|
+
{
|
|
167
|
+
"name": node.name,
|
|
168
|
+
"line": node.lineno,
|
|
169
|
+
"args": [arg.arg for arg in node.args.args],
|
|
170
|
+
}
|
|
171
|
+
)
|
|
172
|
+
elif isinstance(node, ast.ClassDef):
|
|
173
|
+
classes.append({"name": node.name, "line": node.lineno})
|
|
174
|
+
elif isinstance(node, ast.Call):
|
|
175
|
+
if isinstance(node.func, ast.Name):
|
|
176
|
+
calls.append({"function": node.func.id, "line": node.lineno})
|
|
177
|
+
except SyntaxError:
|
|
178
|
+
pass
|
|
179
|
+
|
|
180
|
+
return structure
|
|
181
|
+
|
|
182
|
+
def _build_analysis_prompt(
|
|
183
|
+
self,
|
|
184
|
+
error_message: str,
|
|
185
|
+
stack_trace: str | None,
|
|
186
|
+
code_context: str | None,
|
|
187
|
+
file_path: Path | None,
|
|
188
|
+
) -> str:
|
|
189
|
+
"""Build prompt for error analysis."""
|
|
190
|
+
prompt_parts = [
|
|
191
|
+
"Analyze the following error and provide:",
|
|
192
|
+
"1. Root cause of the error",
|
|
193
|
+
"2. Specific issue explanation",
|
|
194
|
+
"3. Step-by-step fix suggestions",
|
|
195
|
+
"4. Code examples for the fix",
|
|
196
|
+
"",
|
|
197
|
+
f"Error: {error_message}",
|
|
198
|
+
"",
|
|
199
|
+
]
|
|
200
|
+
|
|
201
|
+
if stack_trace:
|
|
202
|
+
prompt_parts.append("Stack trace:")
|
|
203
|
+
prompt_parts.append(stack_trace)
|
|
204
|
+
prompt_parts.append("")
|
|
205
|
+
|
|
206
|
+
if file_path:
|
|
207
|
+
prompt_parts.append(f"File: {file_path}")
|
|
208
|
+
prompt_parts.append("")
|
|
209
|
+
|
|
210
|
+
if code_context:
|
|
211
|
+
prompt_parts.append("Code context:")
|
|
212
|
+
prompt_parts.append("```python")
|
|
213
|
+
prompt_parts.append(code_context[:2000]) # Limit context size
|
|
214
|
+
prompt_parts.append("```")
|
|
215
|
+
prompt_parts.append("")
|
|
216
|
+
|
|
217
|
+
prompt_parts.extend(
|
|
218
|
+
[
|
|
219
|
+
"Provide analysis in the following format:",
|
|
220
|
+
"ROOT_CAUSE: <explanation>",
|
|
221
|
+
"ISSUE: <specific issue>",
|
|
222
|
+
"SUGGESTIONS:",
|
|
223
|
+
"1. <first suggestion>",
|
|
224
|
+
"2. <second suggestion>",
|
|
225
|
+
"FIX_EXAMPLES:",
|
|
226
|
+
"```python",
|
|
227
|
+
"<code example>",
|
|
228
|
+
"```",
|
|
229
|
+
]
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
return "\n".join(prompt_parts)
|
|
233
|
+
|
|
234
|
+
def _build_trace_prompt(
|
|
235
|
+
self,
|
|
236
|
+
code: str,
|
|
237
|
+
function_name: str | None,
|
|
238
|
+
line_number: int | None,
|
|
239
|
+
structure: dict[str, Any],
|
|
240
|
+
) -> str:
|
|
241
|
+
"""Build prompt for code path tracing."""
|
|
242
|
+
prompt_parts = ["Trace the execution path of this code:", ""]
|
|
243
|
+
|
|
244
|
+
if function_name:
|
|
245
|
+
prompt_parts.append(f"Starting from function: {function_name}")
|
|
246
|
+
if line_number:
|
|
247
|
+
prompt_parts.append(f"Starting from line: {line_number}")
|
|
248
|
+
|
|
249
|
+
prompt_parts.append("")
|
|
250
|
+
prompt_parts.append("Code structure:")
|
|
251
|
+
prompt_parts.append(
|
|
252
|
+
f"- Functions: {', '.join([f['name'] for f in structure['functions']])}"
|
|
253
|
+
)
|
|
254
|
+
prompt_parts.append(
|
|
255
|
+
f"- Classes: {', '.join([c['name'] for c in structure['classes']])}"
|
|
256
|
+
)
|
|
257
|
+
prompt_parts.append("")
|
|
258
|
+
prompt_parts.append("Code:")
|
|
259
|
+
prompt_parts.append("```python")
|
|
260
|
+
prompt_parts.append(code[:3000]) # Limit code size
|
|
261
|
+
prompt_parts.append("```")
|
|
262
|
+
prompt_parts.append("")
|
|
263
|
+
prompt_parts.append("Provide execution path analysis:")
|
|
264
|
+
|
|
265
|
+
return "\n".join(prompt_parts)
|
|
266
|
+
|
|
267
|
+
def _parse_llm_analysis(self, analysis_text: str) -> dict[str, Any]:
|
|
268
|
+
"""Parse LLM analysis response."""
|
|
269
|
+
parsed = {"root_cause": "", "issue": "", "suggestions": [], "fix_examples": []}
|
|
270
|
+
|
|
271
|
+
# Extract root cause
|
|
272
|
+
root_cause_match = re.search(
|
|
273
|
+
r"ROOT_CAUSE:\s*(.+?)(?=\n[A-Z_]+:|$)", analysis_text, re.DOTALL
|
|
274
|
+
)
|
|
275
|
+
if root_cause_match:
|
|
276
|
+
parsed["root_cause"] = root_cause_match.group(1).strip()
|
|
277
|
+
|
|
278
|
+
# Extract issue
|
|
279
|
+
issue_match = re.search(
|
|
280
|
+
r"ISSUE:\s*(.+?)(?=\n[A-Z_]+:|$)", analysis_text, re.DOTALL
|
|
281
|
+
)
|
|
282
|
+
if issue_match:
|
|
283
|
+
parsed["issue"] = issue_match.group(1).strip()
|
|
284
|
+
|
|
285
|
+
# Extract suggestions
|
|
286
|
+
suggestions_match = re.search(
|
|
287
|
+
r"SUGGESTIONS:\s*(.+?)(?=\n[A-Z_]+:|$)", analysis_text, re.DOTALL
|
|
288
|
+
)
|
|
289
|
+
if suggestions_match:
|
|
290
|
+
suggestions_text = suggestions_match.group(1)
|
|
291
|
+
# Extract numbered suggestions
|
|
292
|
+
suggestion_lines = re.findall(
|
|
293
|
+
r"\d+\.\s*(.+?)(?=\n\d+\.|$)", suggestions_text, re.DOTALL
|
|
294
|
+
)
|
|
295
|
+
parsed["suggestions"] = [s.strip() for s in suggestion_lines]
|
|
296
|
+
|
|
297
|
+
# Extract fix examples
|
|
298
|
+
fix_examples_match = re.search(
|
|
299
|
+
r"FIX_EXAMPLES:\s*```python\s*(.+?)```", analysis_text, re.DOTALL
|
|
300
|
+
)
|
|
301
|
+
if fix_examples_match:
|
|
302
|
+
parsed["fix_examples"] = [fix_examples_match.group(1).strip()]
|
|
303
|
+
|
|
304
|
+
return parsed
|
|
305
|
+
|
|
306
|
+
def _parse_execution_path(self, trace_analysis: str) -> list[str]:
|
|
307
|
+
"""Parse execution path from trace analysis."""
|
|
308
|
+
# Simple extraction - look for function calls or line references
|
|
309
|
+
path = []
|
|
310
|
+
|
|
311
|
+
# Look for patterns like "calls function X" or "line Y"
|
|
312
|
+
calls = re.findall(
|
|
313
|
+
r"(?:calls|executes|runs)\s+(\w+)", trace_analysis, re.IGNORECASE
|
|
314
|
+
)
|
|
315
|
+
path.extend(calls)
|
|
316
|
+
|
|
317
|
+
return path if path else ["Execution path extracted from analysis"]
|
|
318
|
+
|
|
319
|
+
def _generate_suggestions(
|
|
320
|
+
self, error_info: dict[str, Any], error_message: str, stack_trace: str | None
|
|
321
|
+
) -> list[str]:
|
|
322
|
+
"""Generate suggestions based on error type and message."""
|
|
323
|
+
suggestions: list[str] = []
|
|
324
|
+
error_type = error_info.get("type", "").lower()
|
|
325
|
+
message_lower = error_message.lower()
|
|
326
|
+
|
|
327
|
+
if "attributeerror" in error_type or "no attribute" in message_lower:
|
|
328
|
+
suggestions.append("Check if the object/class has the attribute being accessed")
|
|
329
|
+
suggestions.append("Verify the attribute name spelling and case sensitivity")
|
|
330
|
+
suggestions.append("Ensure the object is properly initialized before accessing attributes")
|
|
331
|
+
if "'" in error_message:
|
|
332
|
+
attr_match = re.search(r"'(\w+)'", error_message)
|
|
333
|
+
if attr_match:
|
|
334
|
+
attr_name = attr_match.group(1)
|
|
335
|
+
suggestions.append(f"Consider if '{attr_name}' should be '{attr_name}' or a different method name")
|
|
336
|
+
elif "nameerror" in error_type or "not defined" in message_lower:
|
|
337
|
+
suggestions.append("Check if the variable/function is defined before use")
|
|
338
|
+
suggestions.append("Verify import statements if it's a module or function from another file")
|
|
339
|
+
suggestions.append("Check for typos in variable or function names")
|
|
340
|
+
elif "typeerror" in error_type:
|
|
341
|
+
suggestions.append("Verify the types of arguments being passed")
|
|
342
|
+
suggestions.append("Check if None values are being used where a value is expected")
|
|
343
|
+
suggestions.append("Ensure function signatures match the call sites")
|
|
344
|
+
elif "valueerror" in error_type:
|
|
345
|
+
suggestions.append("Check if input values are in the expected format or range")
|
|
346
|
+
suggestions.append("Validate input data before processing")
|
|
347
|
+
elif "keyerror" in error_type:
|
|
348
|
+
suggestions.append("Check if the key exists in the dictionary before accessing")
|
|
349
|
+
suggestions.append("Use .get() method with default values for optional keys")
|
|
350
|
+
elif "indexerror" in error_type:
|
|
351
|
+
suggestions.append("Verify the index is within the bounds of the list/array")
|
|
352
|
+
suggestions.append("Check if the list/array is empty before accessing")
|
|
353
|
+
elif "file not found" in message_lower or "filenotfounderror" in error_type:
|
|
354
|
+
suggestions.append("Verify the file path is correct and the file exists")
|
|
355
|
+
suggestions.append("Check if you need to create the file or directory first")
|
|
356
|
+
suggestions.append("Verify path separators for your operating system")
|
|
357
|
+
elif "permission" in message_lower or "permissiondenied" in error_type:
|
|
358
|
+
suggestions.append("Check file/directory permissions")
|
|
359
|
+
suggestions.append("Verify you have write access if trying to modify files")
|
|
360
|
+
elif "connection" in message_lower or "timeout" in message_lower:
|
|
361
|
+
suggestions.append("Check network connectivity")
|
|
362
|
+
suggestions.append("Verify the service/endpoint is running and accessible")
|
|
363
|
+
suggestions.append("Check firewall settings and ports")
|
|
364
|
+
else:
|
|
365
|
+
suggestions.append("Review the error message and stack trace for context")
|
|
366
|
+
suggestions.append("Check the code around the error location")
|
|
367
|
+
if stack_trace:
|
|
368
|
+
suggestions.append("Examine the stack trace to trace the execution path")
|
|
369
|
+
|
|
370
|
+
return suggestions
|
|
371
|
+
|
|
372
|
+
def _generate_fix_examples(
|
|
373
|
+
self, error_info: dict[str, Any], error_message: str
|
|
374
|
+
) -> list[str]:
|
|
375
|
+
"""Generate fix examples based on error type."""
|
|
376
|
+
fix_examples: list[str] = []
|
|
377
|
+
error_type = error_info.get("type", "").lower()
|
|
378
|
+
message_lower = error_message.lower()
|
|
379
|
+
|
|
380
|
+
if "attributeerror" in error_type or "no attribute" in message_lower:
|
|
381
|
+
attr_match = re.search(r"'(\w+)'", error_message)
|
|
382
|
+
if attr_match:
|
|
383
|
+
attr_name = attr_match.group(1)
|
|
384
|
+
fix_examples.append(
|
|
385
|
+
f"# Instead of: obj.{attr_name}\n"
|
|
386
|
+
f"# Check if attribute exists:\n"
|
|
387
|
+
f"if hasattr(obj, '{attr_name}'):\n"
|
|
388
|
+
f" result = getattr(obj, '{attr_name}')"
|
|
389
|
+
)
|
|
390
|
+
elif "keyerror" in error_type:
|
|
391
|
+
fix_examples.append(
|
|
392
|
+
"# Instead of: value = my_dict['key']\n"
|
|
393
|
+
"# Use: value = my_dict.get('key', default_value)"
|
|
394
|
+
)
|
|
395
|
+
elif "indexerror" in error_type:
|
|
396
|
+
fix_examples.append(
|
|
397
|
+
"# Instead of: item = my_list[index]\n"
|
|
398
|
+
"# Use: \n"
|
|
399
|
+
"if index < len(my_list):\n"
|
|
400
|
+
" item = my_list[index]\n"
|
|
401
|
+
"else:\n"
|
|
402
|
+
" # Handle index out of bounds"
|
|
403
|
+
)
|
|
404
|
+
elif "nameerror" in error_type:
|
|
405
|
+
var_match = re.search(r"'(\w+)'", error_message)
|
|
406
|
+
if var_match:
|
|
407
|
+
var_name = var_match.group(1)
|
|
408
|
+
fix_examples.append(
|
|
409
|
+
f"# Make sure '{var_name}' is defined before use:\n"
|
|
410
|
+
f"{var_name} = ... # Initialize variable"
|
|
411
|
+
)
|
|
412
|
+
|
|
413
|
+
return fix_examples
|
|
414
|
+
|
|
415
|
+
def _determine_root_cause(
|
|
416
|
+
self, error_info: dict[str, Any], error_message: str
|
|
417
|
+
) -> str:
|
|
418
|
+
"""Determine the root cause based on error information."""
|
|
419
|
+
error_type = error_info.get("type", "Unknown")
|
|
420
|
+
message_lower = error_message.lower()
|
|
421
|
+
|
|
422
|
+
if "attributeerror" in error_type.lower():
|
|
423
|
+
return f"The object does not have the attribute being accessed. This often happens when the object type is different than expected or the attribute name is misspelled."
|
|
424
|
+
elif "nameerror" in error_type.lower():
|
|
425
|
+
return f"A variable or function name is being used before it's defined or imported."
|
|
426
|
+
elif "typeerror" in error_type.lower():
|
|
427
|
+
return f"An operation or function is being applied to an object of an inappropriate type."
|
|
428
|
+
elif "keyerror" in error_type.lower():
|
|
429
|
+
return f"A dictionary key is being accessed that doesn't exist in the dictionary."
|
|
430
|
+
elif "indexerror" in error_type.lower():
|
|
431
|
+
return f"A list/array index is out of range, either negative or beyond the length of the sequence."
|
|
432
|
+
elif "file not found" in message_lower:
|
|
433
|
+
return f"The specified file or directory path does not exist or is incorrect."
|
|
434
|
+
elif "connection" in message_lower:
|
|
435
|
+
return f"A network connection cannot be established or has been lost."
|
|
436
|
+
else:
|
|
437
|
+
return f"An error of type {error_type} occurred. Review the error message and stack trace for details."
|