tapps-agents 3.5.40__py3-none-any.whl → 3.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tapps_agents/__init__.py +2 -2
- tapps_agents/agents/__init__.py +22 -22
- tapps_agents/agents/analyst/__init__.py +5 -5
- tapps_agents/agents/architect/__init__.py +5 -5
- tapps_agents/agents/architect/agent.py +1033 -1033
- tapps_agents/agents/architect/pattern_detector.py +75 -75
- tapps_agents/agents/cleanup/__init__.py +7 -7
- tapps_agents/agents/cleanup/agent.py +445 -445
- tapps_agents/agents/debugger/__init__.py +7 -7
- tapps_agents/agents/debugger/agent.py +310 -310
- tapps_agents/agents/debugger/error_analyzer.py +437 -437
- tapps_agents/agents/designer/__init__.py +5 -5
- tapps_agents/agents/designer/agent.py +786 -786
- tapps_agents/agents/designer/visual_designer.py +638 -638
- tapps_agents/agents/documenter/__init__.py +7 -7
- tapps_agents/agents/documenter/agent.py +531 -531
- tapps_agents/agents/documenter/doc_generator.py +472 -472
- tapps_agents/agents/documenter/doc_validator.py +393 -393
- tapps_agents/agents/documenter/framework_doc_updater.py +493 -493
- tapps_agents/agents/enhancer/__init__.py +7 -7
- tapps_agents/agents/evaluator/__init__.py +7 -7
- tapps_agents/agents/evaluator/agent.py +443 -443
- tapps_agents/agents/evaluator/priority_evaluator.py +641 -641
- tapps_agents/agents/evaluator/quality_analyzer.py +147 -147
- tapps_agents/agents/evaluator/report_generator.py +344 -344
- tapps_agents/agents/evaluator/usage_analyzer.py +192 -192
- tapps_agents/agents/evaluator/workflow_analyzer.py +189 -189
- tapps_agents/agents/implementer/__init__.py +7 -7
- tapps_agents/agents/implementer/agent.py +798 -798
- tapps_agents/agents/implementer/auto_fix.py +1119 -1119
- tapps_agents/agents/implementer/code_generator.py +73 -73
- tapps_agents/agents/improver/__init__.py +1 -1
- tapps_agents/agents/improver/agent.py +753 -753
- tapps_agents/agents/ops/__init__.py +1 -1
- tapps_agents/agents/ops/agent.py +619 -619
- tapps_agents/agents/ops/dependency_analyzer.py +600 -600
- tapps_agents/agents/orchestrator/__init__.py +5 -5
- tapps_agents/agents/orchestrator/agent.py +522 -522
- tapps_agents/agents/planner/__init__.py +7 -7
- tapps_agents/agents/planner/agent.py +1127 -1127
- tapps_agents/agents/reviewer/__init__.py +24 -24
- tapps_agents/agents/reviewer/agent.py +3513 -3513
- tapps_agents/agents/reviewer/aggregator.py +213 -213
- tapps_agents/agents/reviewer/batch_review.py +448 -448
- tapps_agents/agents/reviewer/cache.py +443 -443
- tapps_agents/agents/reviewer/context7_enhancer.py +630 -630
- tapps_agents/agents/reviewer/context_detector.py +203 -203
- tapps_agents/agents/reviewer/docker_compose_validator.py +158 -158
- tapps_agents/agents/reviewer/dockerfile_validator.py +176 -176
- tapps_agents/agents/reviewer/error_handling.py +126 -126
- tapps_agents/agents/reviewer/feedback_generator.py +490 -490
- tapps_agents/agents/reviewer/influxdb_validator.py +316 -316
- tapps_agents/agents/reviewer/issue_tracking.py +169 -169
- tapps_agents/agents/reviewer/library_detector.py +295 -295
- tapps_agents/agents/reviewer/library_patterns.py +268 -268
- tapps_agents/agents/reviewer/maintainability_scorer.py +593 -593
- tapps_agents/agents/reviewer/metric_strategies.py +276 -276
- tapps_agents/agents/reviewer/mqtt_validator.py +160 -160
- tapps_agents/agents/reviewer/output_enhancer.py +105 -105
- tapps_agents/agents/reviewer/pattern_detector.py +241 -241
- tapps_agents/agents/reviewer/performance_scorer.py +357 -357
- tapps_agents/agents/reviewer/phased_review.py +516 -516
- tapps_agents/agents/reviewer/progressive_review.py +435 -435
- tapps_agents/agents/reviewer/react_scorer.py +331 -331
- tapps_agents/agents/reviewer/score_constants.py +228 -228
- tapps_agents/agents/reviewer/score_validator.py +507 -507
- tapps_agents/agents/reviewer/scorer_registry.py +373 -373
- tapps_agents/agents/reviewer/scoring.py +1566 -1566
- tapps_agents/agents/reviewer/service_discovery.py +534 -534
- tapps_agents/agents/reviewer/tools/__init__.py +41 -41
- tapps_agents/agents/reviewer/tools/parallel_executor.py +581 -581
- tapps_agents/agents/reviewer/tools/ruff_grouping.py +250 -250
- tapps_agents/agents/reviewer/tools/scoped_mypy.py +284 -284
- tapps_agents/agents/reviewer/typescript_scorer.py +1142 -1142
- tapps_agents/agents/reviewer/validation.py +208 -208
- tapps_agents/agents/reviewer/websocket_validator.py +132 -132
- tapps_agents/agents/tester/__init__.py +7 -7
- tapps_agents/agents/tester/accessibility_auditor.py +309 -309
- tapps_agents/agents/tester/agent.py +1080 -1080
- tapps_agents/agents/tester/batch_generator.py +54 -54
- tapps_agents/agents/tester/context_learner.py +51 -51
- tapps_agents/agents/tester/coverage_analyzer.py +386 -386
- tapps_agents/agents/tester/coverage_test_generator.py +290 -290
- tapps_agents/agents/tester/debug_enhancer.py +238 -238
- tapps_agents/agents/tester/device_emulator.py +241 -241
- tapps_agents/agents/tester/integration_generator.py +62 -62
- tapps_agents/agents/tester/network_recorder.py +300 -300
- tapps_agents/agents/tester/performance_monitor.py +320 -320
- tapps_agents/agents/tester/test_fixer.py +316 -316
- tapps_agents/agents/tester/test_generator.py +632 -632
- tapps_agents/agents/tester/trace_manager.py +234 -234
- tapps_agents/agents/tester/visual_regression.py +291 -291
- tapps_agents/analysis/pattern_detector.py +36 -36
- tapps_agents/beads/hydration.py +213 -213
- tapps_agents/beads/parse.py +32 -32
- tapps_agents/beads/specs.py +206 -206
- tapps_agents/cli/__init__.py +9 -9
- tapps_agents/cli/__main__.py +8 -8
- tapps_agents/cli/base.py +478 -478
- tapps_agents/cli/command_classifier.py +72 -72
- tapps_agents/cli/commands/__init__.py +2 -2
- tapps_agents/cli/commands/analyst.py +173 -173
- tapps_agents/cli/commands/architect.py +109 -109
- tapps_agents/cli/commands/cleanup_agent.py +92 -92
- tapps_agents/cli/commands/common.py +126 -126
- tapps_agents/cli/commands/debugger.py +90 -90
- tapps_agents/cli/commands/designer.py +112 -112
- tapps_agents/cli/commands/documenter.py +136 -136
- tapps_agents/cli/commands/enhancer.py +110 -110
- tapps_agents/cli/commands/evaluator.py +255 -255
- tapps_agents/cli/commands/health.py +665 -665
- tapps_agents/cli/commands/implementer.py +301 -301
- tapps_agents/cli/commands/improver.py +91 -91
- tapps_agents/cli/commands/knowledge.py +111 -111
- tapps_agents/cli/commands/learning.py +172 -172
- tapps_agents/cli/commands/observability.py +283 -283
- tapps_agents/cli/commands/ops.py +135 -135
- tapps_agents/cli/commands/orchestrator.py +116 -116
- tapps_agents/cli/commands/planner.py +237 -237
- tapps_agents/cli/commands/reviewer.py +1872 -1872
- tapps_agents/cli/commands/status.py +285 -285
- tapps_agents/cli/commands/task.py +227 -219
- tapps_agents/cli/commands/tester.py +191 -191
- tapps_agents/cli/commands/top_level.py +3586 -3586
- tapps_agents/cli/feedback.py +936 -936
- tapps_agents/cli/formatters.py +608 -608
- tapps_agents/cli/help/__init__.py +7 -7
- tapps_agents/cli/help/static_help.py +425 -425
- tapps_agents/cli/network_detection.py +110 -110
- tapps_agents/cli/output_compactor.py +274 -274
- tapps_agents/cli/parsers/__init__.py +2 -2
- tapps_agents/cli/parsers/analyst.py +186 -186
- tapps_agents/cli/parsers/architect.py +167 -167
- tapps_agents/cli/parsers/cleanup_agent.py +228 -228
- tapps_agents/cli/parsers/debugger.py +116 -116
- tapps_agents/cli/parsers/designer.py +182 -182
- tapps_agents/cli/parsers/documenter.py +134 -134
- tapps_agents/cli/parsers/enhancer.py +113 -113
- tapps_agents/cli/parsers/evaluator.py +213 -213
- tapps_agents/cli/parsers/implementer.py +168 -168
- tapps_agents/cli/parsers/improver.py +132 -132
- tapps_agents/cli/parsers/ops.py +159 -159
- tapps_agents/cli/parsers/orchestrator.py +98 -98
- tapps_agents/cli/parsers/planner.py +145 -145
- tapps_agents/cli/parsers/reviewer.py +462 -462
- tapps_agents/cli/parsers/tester.py +124 -124
- tapps_agents/cli/progress_heartbeat.py +254 -254
- tapps_agents/cli/streaming_progress.py +336 -336
- tapps_agents/cli/utils/__init__.py +6 -6
- tapps_agents/cli/utils/agent_lifecycle.py +48 -48
- tapps_agents/cli/utils/error_formatter.py +82 -82
- tapps_agents/cli/utils/error_recovery.py +188 -188
- tapps_agents/cli/utils/output_handler.py +59 -59
- tapps_agents/cli/utils/prompt_enhancer.py +319 -319
- tapps_agents/cli/validators/__init__.py +9 -9
- tapps_agents/cli/validators/command_validator.py +81 -81
- tapps_agents/context7/__init__.py +112 -112
- tapps_agents/context7/agent_integration.py +869 -869
- tapps_agents/context7/analytics.py +382 -382
- tapps_agents/context7/analytics_dashboard.py +299 -299
- tapps_agents/context7/async_cache.py +681 -681
- tapps_agents/context7/backup_client.py +958 -958
- tapps_agents/context7/cache_locking.py +194 -194
- tapps_agents/context7/cache_metadata.py +214 -214
- tapps_agents/context7/cache_prewarm.py +488 -488
- tapps_agents/context7/cache_structure.py +168 -168
- tapps_agents/context7/cache_warming.py +604 -604
- tapps_agents/context7/circuit_breaker.py +376 -376
- tapps_agents/context7/cleanup.py +461 -461
- tapps_agents/context7/commands.py +858 -858
- tapps_agents/context7/credential_validation.py +276 -276
- tapps_agents/context7/cross_reference_resolver.py +168 -168
- tapps_agents/context7/cross_references.py +424 -424
- tapps_agents/context7/doc_manager.py +225 -225
- tapps_agents/context7/fuzzy_matcher.py +369 -369
- tapps_agents/context7/kb_cache.py +404 -404
- tapps_agents/context7/language_detector.py +219 -219
- tapps_agents/context7/library_detector.py +725 -725
- tapps_agents/context7/lookup.py +738 -738
- tapps_agents/context7/metadata.py +258 -258
- tapps_agents/context7/refresh_queue.py +300 -300
- tapps_agents/context7/security.py +373 -373
- tapps_agents/context7/staleness_policies.py +278 -278
- tapps_agents/context7/tiles_integration.py +47 -47
- tapps_agents/continuous_bug_fix/__init__.py +20 -20
- tapps_agents/continuous_bug_fix/bug_finder.py +306 -306
- tapps_agents/continuous_bug_fix/bug_fix_coordinator.py +177 -177
- tapps_agents/continuous_bug_fix/commit_manager.py +178 -178
- tapps_agents/continuous_bug_fix/continuous_bug_fixer.py +322 -322
- tapps_agents/continuous_bug_fix/proactive_bug_finder.py +285 -285
- tapps_agents/core/__init__.py +298 -298
- tapps_agents/core/adaptive_cache_config.py +432 -432
- tapps_agents/core/agent_base.py +647 -647
- tapps_agents/core/agent_cache.py +466 -466
- tapps_agents/core/agent_learning.py +1865 -1865
- tapps_agents/core/analytics_dashboard.py +563 -563
- tapps_agents/core/analytics_enhancements.py +597 -597
- tapps_agents/core/anonymization.py +274 -274
- tapps_agents/core/artifact_context_builder.py +293 -0
- tapps_agents/core/ast_parser.py +228 -228
- tapps_agents/core/async_file_ops.py +402 -402
- tapps_agents/core/best_practice_consultant.py +299 -299
- tapps_agents/core/brownfield_analyzer.py +299 -299
- tapps_agents/core/brownfield_review.py +541 -541
- tapps_agents/core/browser_controller.py +513 -513
- tapps_agents/core/capability_registry.py +418 -418
- tapps_agents/core/change_impact_analyzer.py +190 -190
- tapps_agents/core/checkpoint_manager.py +377 -377
- tapps_agents/core/code_generator.py +329 -329
- tapps_agents/core/code_validator.py +276 -276
- tapps_agents/core/command_registry.py +327 -327
- tapps_agents/core/config.py +33 -0
- tapps_agents/core/context_gathering/__init__.py +2 -2
- tapps_agents/core/context_gathering/repository_explorer.py +28 -28
- tapps_agents/core/context_intelligence/__init__.py +2 -2
- tapps_agents/core/context_intelligence/relevance_scorer.py +24 -24
- tapps_agents/core/context_intelligence/token_budget_manager.py +27 -27
- tapps_agents/core/context_manager.py +240 -240
- tapps_agents/core/cursor_feedback_monitor.py +146 -146
- tapps_agents/core/cursor_verification.py +290 -290
- tapps_agents/core/customization_loader.py +280 -280
- tapps_agents/core/customization_schema.py +260 -260
- tapps_agents/core/customization_template.py +238 -238
- tapps_agents/core/debug_logger.py +124 -124
- tapps_agents/core/design_validator.py +298 -298
- tapps_agents/core/diagram_generator.py +226 -226
- tapps_agents/core/docker_utils.py +232 -232
- tapps_agents/core/document_generator.py +617 -617
- tapps_agents/core/domain_detector.py +30 -30
- tapps_agents/core/error_envelope.py +454 -454
- tapps_agents/core/error_handler.py +270 -270
- tapps_agents/core/estimation_tracker.py +189 -189
- tapps_agents/core/eval_prompt_engine.py +116 -116
- tapps_agents/core/evaluation_base.py +119 -119
- tapps_agents/core/evaluation_models.py +320 -320
- tapps_agents/core/evaluation_orchestrator.py +225 -225
- tapps_agents/core/evaluators/__init__.py +7 -7
- tapps_agents/core/evaluators/architectural_evaluator.py +205 -205
- tapps_agents/core/evaluators/behavioral_evaluator.py +160 -160
- tapps_agents/core/evaluators/performance_profile_evaluator.py +160 -160
- tapps_agents/core/evaluators/security_posture_evaluator.py +148 -148
- tapps_agents/core/evaluators/spec_compliance_evaluator.py +181 -181
- tapps_agents/core/exceptions.py +107 -107
- tapps_agents/core/expert_config_generator.py +293 -293
- tapps_agents/core/export_schema.py +202 -202
- tapps_agents/core/external_feedback_models.py +102 -102
- tapps_agents/core/external_feedback_storage.py +213 -213
- tapps_agents/core/fallback_strategy.py +314 -314
- tapps_agents/core/feedback_analyzer.py +162 -162
- tapps_agents/core/feedback_collector.py +178 -178
- tapps_agents/core/git_operations.py +445 -445
- tapps_agents/core/hardware_profiler.py +151 -151
- tapps_agents/core/instructions.py +324 -324
- tapps_agents/core/io_guardrails.py +69 -69
- tapps_agents/core/issue_manifest.py +249 -249
- tapps_agents/core/issue_schema.py +139 -139
- tapps_agents/core/json_utils.py +128 -128
- tapps_agents/core/knowledge_graph.py +446 -446
- tapps_agents/core/language_detector.py +296 -296
- tapps_agents/core/learning_confidence.py +242 -242
- tapps_agents/core/learning_dashboard.py +246 -246
- tapps_agents/core/learning_decision.py +384 -384
- tapps_agents/core/learning_explainability.py +578 -578
- tapps_agents/core/learning_export.py +287 -287
- tapps_agents/core/learning_integration.py +228 -228
- tapps_agents/core/llm_behavior.py +232 -232
- tapps_agents/core/long_duration_support.py +786 -786
- tapps_agents/core/mcp_setup.py +106 -106
- tapps_agents/core/memory_integration.py +396 -396
- tapps_agents/core/meta_learning.py +666 -666
- tapps_agents/core/module_path_sanitizer.py +199 -199
- tapps_agents/core/multi_agent_orchestrator.py +382 -382
- tapps_agents/core/network_errors.py +125 -125
- tapps_agents/core/nfr_validator.py +336 -336
- tapps_agents/core/offline_mode.py +158 -158
- tapps_agents/core/output_contracts.py +300 -300
- tapps_agents/core/output_formatter.py +300 -300
- tapps_agents/core/path_normalizer.py +174 -174
- tapps_agents/core/path_validator.py +322 -322
- tapps_agents/core/pattern_library.py +250 -250
- tapps_agents/core/performance_benchmark.py +301 -301
- tapps_agents/core/performance_monitor.py +184 -184
- tapps_agents/core/playwright_mcp_controller.py +771 -771
- tapps_agents/core/policy_loader.py +135 -135
- tapps_agents/core/progress.py +166 -166
- tapps_agents/core/project_profile.py +354 -354
- tapps_agents/core/project_type_detector.py +454 -454
- tapps_agents/core/prompt_base.py +223 -223
- tapps_agents/core/prompt_learning/__init__.py +2 -2
- tapps_agents/core/prompt_learning/learning_loop.py +24 -24
- tapps_agents/core/prompt_learning/project_prompt_store.py +25 -25
- tapps_agents/core/prompt_learning/skills_prompt_analyzer.py +35 -35
- tapps_agents/core/prompt_optimization/__init__.py +6 -6
- tapps_agents/core/prompt_optimization/ab_tester.py +114 -114
- tapps_agents/core/prompt_optimization/correlation_analyzer.py +160 -160
- tapps_agents/core/prompt_optimization/progressive_refiner.py +129 -129
- tapps_agents/core/prompt_optimization/prompt_library.py +37 -37
- tapps_agents/core/requirements_evaluator.py +431 -431
- tapps_agents/core/resource_aware_executor.py +449 -449
- tapps_agents/core/resource_monitor.py +343 -343
- tapps_agents/core/resume_handler.py +298 -298
- tapps_agents/core/retry_handler.py +197 -197
- tapps_agents/core/review_checklists.py +479 -479
- tapps_agents/core/role_loader.py +201 -201
- tapps_agents/core/role_template_loader.py +201 -201
- tapps_agents/core/runtime_mode.py +60 -60
- tapps_agents/core/security_scanner.py +342 -342
- tapps_agents/core/skill_agent_registry.py +194 -194
- tapps_agents/core/skill_integration.py +208 -208
- tapps_agents/core/skill_loader.py +492 -492
- tapps_agents/core/skill_template.py +341 -341
- tapps_agents/core/skill_validator.py +478 -478
- tapps_agents/core/stack_analyzer.py +35 -35
- tapps_agents/core/startup.py +174 -174
- tapps_agents/core/storage_manager.py +397 -397
- tapps_agents/core/storage_models.py +166 -166
- tapps_agents/core/story_evaluator.py +410 -410
- tapps_agents/core/subprocess_utils.py +170 -170
- tapps_agents/core/task_duration.py +296 -296
- tapps_agents/core/task_memory.py +582 -582
- tapps_agents/core/task_state.py +226 -226
- tapps_agents/core/tech_stack_priorities.py +208 -208
- tapps_agents/core/temp_directory.py +194 -194
- tapps_agents/core/template_merger.py +600 -600
- tapps_agents/core/template_selector.py +280 -280
- tapps_agents/core/test_generator.py +286 -286
- tapps_agents/core/tiered_context.py +253 -253
- tapps_agents/core/token_monitor.py +345 -345
- tapps_agents/core/traceability.py +254 -254
- tapps_agents/core/trajectory_tracker.py +50 -50
- tapps_agents/core/unicode_safe.py +143 -143
- tapps_agents/core/unified_cache_config.py +170 -170
- tapps_agents/core/unified_state.py +324 -324
- tapps_agents/core/validate_cursor_setup.py +237 -237
- tapps_agents/core/validation_registry.py +136 -136
- tapps_agents/core/validators/__init__.py +4 -4
- tapps_agents/core/validators/python_validator.py +87 -87
- tapps_agents/core/verification_agent.py +90 -90
- tapps_agents/core/visual_feedback.py +644 -644
- tapps_agents/core/workflow_validator.py +197 -197
- tapps_agents/core/worktree.py +367 -367
- tapps_agents/docker/__init__.py +10 -10
- tapps_agents/docker/analyzer.py +186 -186
- tapps_agents/docker/debugger.py +229 -229
- tapps_agents/docker/error_patterns.py +216 -216
- tapps_agents/epic/__init__.py +22 -22
- tapps_agents/epic/beads_sync.py +115 -115
- tapps_agents/epic/markdown_sync.py +105 -105
- tapps_agents/epic/models.py +96 -96
- tapps_agents/experts/__init__.py +163 -163
- tapps_agents/experts/agent_integration.py +243 -243
- tapps_agents/experts/auto_generator.py +331 -331
- tapps_agents/experts/base_expert.py +536 -536
- tapps_agents/experts/builtin_registry.py +261 -261
- tapps_agents/experts/business_metrics.py +565 -565
- tapps_agents/experts/cache.py +266 -266
- tapps_agents/experts/confidence_breakdown.py +306 -306
- tapps_agents/experts/confidence_calculator.py +336 -336
- tapps_agents/experts/confidence_metrics.py +236 -236
- tapps_agents/experts/domain_config.py +311 -311
- tapps_agents/experts/domain_detector.py +550 -550
- tapps_agents/experts/domain_utils.py +84 -84
- tapps_agents/experts/expert_config.py +113 -113
- tapps_agents/experts/expert_engine.py +465 -465
- tapps_agents/experts/expert_registry.py +744 -744
- tapps_agents/experts/expert_synthesizer.py +70 -70
- tapps_agents/experts/governance.py +197 -197
- tapps_agents/experts/history_logger.py +312 -312
- tapps_agents/experts/knowledge/README.md +180 -180
- tapps_agents/experts/knowledge/accessibility/accessible-forms.md +331 -331
- tapps_agents/experts/knowledge/accessibility/aria-patterns.md +344 -344
- tapps_agents/experts/knowledge/accessibility/color-contrast.md +285 -285
- tapps_agents/experts/knowledge/accessibility/keyboard-navigation.md +332 -332
- tapps_agents/experts/knowledge/accessibility/screen-readers.md +282 -282
- tapps_agents/experts/knowledge/accessibility/semantic-html.md +355 -355
- tapps_agents/experts/knowledge/accessibility/testing-accessibility.md +369 -369
- tapps_agents/experts/knowledge/accessibility/wcag-2.1.md +296 -296
- tapps_agents/experts/knowledge/accessibility/wcag-2.2.md +211 -211
- tapps_agents/experts/knowledge/agent-learning/best-practices.md +715 -715
- tapps_agents/experts/knowledge/agent-learning/pattern-extraction.md +282 -282
- tapps_agents/experts/knowledge/agent-learning/prompt-optimization.md +320 -320
- tapps_agents/experts/knowledge/ai-frameworks/model-optimization.md +90 -90
- tapps_agents/experts/knowledge/ai-frameworks/openvino-patterns.md +260 -260
- tapps_agents/experts/knowledge/api-design-integration/api-gateway-patterns.md +309 -309
- tapps_agents/experts/knowledge/api-design-integration/api-security-patterns.md +521 -521
- tapps_agents/experts/knowledge/api-design-integration/api-versioning.md +421 -421
- tapps_agents/experts/knowledge/api-design-integration/async-protocol-patterns.md +61 -61
- tapps_agents/experts/knowledge/api-design-integration/contract-testing.md +221 -221
- tapps_agents/experts/knowledge/api-design-integration/external-api-integration.md +489 -489
- tapps_agents/experts/knowledge/api-design-integration/fastapi-patterns.md +360 -360
- tapps_agents/experts/knowledge/api-design-integration/fastapi-testing.md +262 -262
- tapps_agents/experts/knowledge/api-design-integration/graphql-patterns.md +582 -582
- tapps_agents/experts/knowledge/api-design-integration/grpc-best-practices.md +499 -499
- tapps_agents/experts/knowledge/api-design-integration/mqtt-patterns.md +455 -455
- tapps_agents/experts/knowledge/api-design-integration/rate-limiting.md +507 -507
- tapps_agents/experts/knowledge/api-design-integration/restful-api-design.md +618 -618
- tapps_agents/experts/knowledge/api-design-integration/websocket-patterns.md +480 -480
- tapps_agents/experts/knowledge/cloud-infrastructure/cloud-native-patterns.md +175 -175
- tapps_agents/experts/knowledge/cloud-infrastructure/container-health-checks.md +261 -261
- tapps_agents/experts/knowledge/cloud-infrastructure/containerization.md +222 -222
- tapps_agents/experts/knowledge/cloud-infrastructure/cost-optimization.md +122 -122
- tapps_agents/experts/knowledge/cloud-infrastructure/disaster-recovery.md +153 -153
- tapps_agents/experts/knowledge/cloud-infrastructure/dockerfile-patterns.md +285 -285
- tapps_agents/experts/knowledge/cloud-infrastructure/infrastructure-as-code.md +187 -187
- tapps_agents/experts/knowledge/cloud-infrastructure/kubernetes-patterns.md +253 -253
- tapps_agents/experts/knowledge/cloud-infrastructure/multi-cloud-strategies.md +155 -155
- tapps_agents/experts/knowledge/cloud-infrastructure/serverless-architecture.md +200 -200
- tapps_agents/experts/knowledge/code-quality-analysis/README.md +16 -16
- tapps_agents/experts/knowledge/code-quality-analysis/code-metrics.md +137 -137
- tapps_agents/experts/knowledge/code-quality-analysis/complexity-analysis.md +181 -181
- tapps_agents/experts/knowledge/code-quality-analysis/technical-debt-patterns.md +191 -191
- tapps_agents/experts/knowledge/data-privacy-compliance/anonymization.md +313 -313
- tapps_agents/experts/knowledge/data-privacy-compliance/ccpa.md +255 -255
- tapps_agents/experts/knowledge/data-privacy-compliance/consent-management.md +282 -282
- tapps_agents/experts/knowledge/data-privacy-compliance/data-minimization.md +275 -275
- tapps_agents/experts/knowledge/data-privacy-compliance/data-retention.md +297 -297
- tapps_agents/experts/knowledge/data-privacy-compliance/data-subject-rights.md +383 -383
- tapps_agents/experts/knowledge/data-privacy-compliance/encryption-privacy.md +285 -285
- tapps_agents/experts/knowledge/data-privacy-compliance/gdpr.md +344 -344
- tapps_agents/experts/knowledge/data-privacy-compliance/hipaa.md +385 -385
- tapps_agents/experts/knowledge/data-privacy-compliance/privacy-by-design.md +280 -280
- tapps_agents/experts/knowledge/database-data-management/acid-vs-cap.md +164 -164
- tapps_agents/experts/knowledge/database-data-management/backup-and-recovery.md +182 -182
- tapps_agents/experts/knowledge/database-data-management/data-modeling.md +172 -172
- tapps_agents/experts/knowledge/database-data-management/database-design.md +187 -187
- tapps_agents/experts/knowledge/database-data-management/flux-query-optimization.md +342 -342
- tapps_agents/experts/knowledge/database-data-management/influxdb-connection-patterns.md +432 -432
- tapps_agents/experts/knowledge/database-data-management/influxdb-patterns.md +442 -442
- tapps_agents/experts/knowledge/database-data-management/migration-strategies.md +216 -216
- tapps_agents/experts/knowledge/database-data-management/nosql-patterns.md +259 -259
- tapps_agents/experts/knowledge/database-data-management/scalability-patterns.md +184 -184
- tapps_agents/experts/knowledge/database-data-management/sql-optimization.md +175 -175
- tapps_agents/experts/knowledge/database-data-management/time-series-modeling.md +444 -444
- tapps_agents/experts/knowledge/development-workflow/README.md +16 -16
- tapps_agents/experts/knowledge/development-workflow/automation-best-practices.md +216 -216
- tapps_agents/experts/knowledge/development-workflow/build-strategies.md +198 -198
- tapps_agents/experts/knowledge/development-workflow/deployment-patterns.md +205 -205
- tapps_agents/experts/knowledge/development-workflow/git-workflows.md +205 -205
- tapps_agents/experts/knowledge/documentation-knowledge-management/README.md +16 -16
- tapps_agents/experts/knowledge/documentation-knowledge-management/api-documentation-patterns.md +231 -231
- tapps_agents/experts/knowledge/documentation-knowledge-management/documentation-standards.md +191 -191
- tapps_agents/experts/knowledge/documentation-knowledge-management/knowledge-management.md +171 -171
- tapps_agents/experts/knowledge/documentation-knowledge-management/technical-writing-guide.md +192 -192
- tapps_agents/experts/knowledge/observability-monitoring/alerting-patterns.md +461 -461
- tapps_agents/experts/knowledge/observability-monitoring/apm-tools.md +459 -459
- tapps_agents/experts/knowledge/observability-monitoring/distributed-tracing.md +367 -367
- tapps_agents/experts/knowledge/observability-monitoring/logging-strategies.md +478 -478
- tapps_agents/experts/knowledge/observability-monitoring/metrics-and-monitoring.md +510 -510
- tapps_agents/experts/knowledge/observability-monitoring/observability-best-practices.md +492 -492
- tapps_agents/experts/knowledge/observability-monitoring/open-telemetry.md +573 -573
- tapps_agents/experts/knowledge/observability-monitoring/slo-sli-sla.md +419 -419
- tapps_agents/experts/knowledge/performance/anti-patterns.md +284 -284
- tapps_agents/experts/knowledge/performance/api-performance.md +256 -256
- tapps_agents/experts/knowledge/performance/caching.md +327 -327
- tapps_agents/experts/knowledge/performance/database-performance.md +252 -252
- tapps_agents/experts/knowledge/performance/optimization-patterns.md +327 -327
- tapps_agents/experts/knowledge/performance/profiling.md +297 -297
- tapps_agents/experts/knowledge/performance/resource-management.md +293 -293
- tapps_agents/experts/knowledge/performance/scalability.md +306 -306
- tapps_agents/experts/knowledge/security/owasp-top10.md +209 -209
- tapps_agents/experts/knowledge/security/secure-coding-practices.md +207 -207
- tapps_agents/experts/knowledge/security/threat-modeling.md +220 -220
- tapps_agents/experts/knowledge/security/vulnerability-patterns.md +342 -342
- tapps_agents/experts/knowledge/software-architecture/docker-compose-patterns.md +314 -314
- tapps_agents/experts/knowledge/software-architecture/microservices-patterns.md +379 -379
- tapps_agents/experts/knowledge/software-architecture/service-communication.md +316 -316
- tapps_agents/experts/knowledge/testing/best-practices.md +310 -310
- tapps_agents/experts/knowledge/testing/coverage-analysis.md +293 -293
- tapps_agents/experts/knowledge/testing/mocking.md +256 -256
- tapps_agents/experts/knowledge/testing/test-automation.md +276 -276
- tapps_agents/experts/knowledge/testing/test-data.md +271 -271
- tapps_agents/experts/knowledge/testing/test-design-patterns.md +280 -280
- tapps_agents/experts/knowledge/testing/test-maintenance.md +236 -236
- tapps_agents/experts/knowledge/testing/test-strategies.md +311 -311
- tapps_agents/experts/knowledge/user-experience/information-architecture.md +325 -325
- tapps_agents/experts/knowledge/user-experience/interaction-design.md +363 -363
- tapps_agents/experts/knowledge/user-experience/prototyping.md +293 -293
- tapps_agents/experts/knowledge/user-experience/usability-heuristics.md +337 -337
- tapps_agents/experts/knowledge/user-experience/usability-testing.md +311 -311
- tapps_agents/experts/knowledge/user-experience/user-journeys.md +296 -296
- tapps_agents/experts/knowledge/user-experience/user-research.md +373 -373
- tapps_agents/experts/knowledge/user-experience/ux-principles.md +340 -340
- tapps_agents/experts/knowledge_freshness.py +321 -321
- tapps_agents/experts/knowledge_ingestion.py +438 -438
- tapps_agents/experts/knowledge_need_detector.py +93 -93
- tapps_agents/experts/knowledge_validator.py +382 -382
- tapps_agents/experts/observability.py +440 -440
- tapps_agents/experts/passive_notifier.py +238 -238
- tapps_agents/experts/proactive_orchestrator.py +32 -32
- tapps_agents/experts/rag_chunker.py +205 -205
- tapps_agents/experts/rag_embedder.py +152 -152
- tapps_agents/experts/rag_evaluation.py +299 -299
- tapps_agents/experts/rag_index.py +303 -303
- tapps_agents/experts/rag_metrics.py +293 -293
- tapps_agents/experts/rag_safety.py +263 -263
- tapps_agents/experts/report_generator.py +296 -296
- tapps_agents/experts/setup_wizard.py +441 -441
- tapps_agents/experts/simple_rag.py +431 -431
- tapps_agents/experts/vector_rag.py +354 -354
- tapps_agents/experts/weight_distributor.py +304 -304
- tapps_agents/health/__init__.py +24 -24
- tapps_agents/health/base.py +75 -75
- tapps_agents/health/checks/__init__.py +22 -22
- tapps_agents/health/checks/automation.py +127 -127
- tapps_agents/health/checks/context7_cache.py +210 -210
- tapps_agents/health/checks/environment.py +116 -116
- tapps_agents/health/checks/execution.py +170 -170
- tapps_agents/health/checks/knowledge_base.py +187 -187
- tapps_agents/health/checks/outcomes.py +324 -324
- tapps_agents/health/collector.py +280 -280
- tapps_agents/health/dashboard.py +137 -137
- tapps_agents/health/metrics.py +151 -151
- tapps_agents/health/orchestrator.py +271 -271
- tapps_agents/health/registry.py +166 -166
- tapps_agents/hooks/__init__.py +33 -33
- tapps_agents/hooks/config.py +140 -140
- tapps_agents/hooks/events.py +135 -135
- tapps_agents/hooks/executor.py +128 -128
- tapps_agents/hooks/manager.py +143 -143
- tapps_agents/integration/__init__.py +8 -8
- tapps_agents/integration/service_integrator.py +121 -121
- tapps_agents/integrations/__init__.py +10 -10
- tapps_agents/integrations/clawdbot.py +525 -525
- tapps_agents/integrations/memory_bridge.py +356 -356
- tapps_agents/mcp/__init__.py +18 -18
- tapps_agents/mcp/gateway.py +112 -112
- tapps_agents/mcp/servers/__init__.py +13 -13
- tapps_agents/mcp/servers/analysis.py +204 -204
- tapps_agents/mcp/servers/context7.py +198 -198
- tapps_agents/mcp/servers/filesystem.py +218 -218
- tapps_agents/mcp/servers/git.py +201 -201
- tapps_agents/mcp/tool_registry.py +115 -115
- tapps_agents/quality/__init__.py +54 -54
- tapps_agents/quality/coverage_analyzer.py +379 -379
- tapps_agents/quality/enforcement.py +82 -82
- tapps_agents/quality/gates/__init__.py +37 -37
- tapps_agents/quality/gates/approval_gate.py +255 -255
- tapps_agents/quality/gates/base.py +84 -84
- tapps_agents/quality/gates/exceptions.py +43 -43
- tapps_agents/quality/gates/policy_gate.py +195 -195
- tapps_agents/quality/gates/registry.py +239 -239
- tapps_agents/quality/gates/security_gate.py +156 -156
- tapps_agents/quality/quality_gates.py +369 -369
- tapps_agents/quality/secret_scanner.py +335 -335
- tapps_agents/session/__init__.py +19 -19
- tapps_agents/session/manager.py +256 -256
- tapps_agents/simple_mode/__init__.py +66 -66
- tapps_agents/simple_mode/agent_contracts.py +357 -357
- tapps_agents/simple_mode/beads_hooks.py +151 -151
- tapps_agents/simple_mode/code_snippet_handler.py +382 -382
- tapps_agents/simple_mode/documentation_manager.py +395 -395
- tapps_agents/simple_mode/documentation_reader.py +187 -187
- tapps_agents/simple_mode/file_inference.py +292 -292
- tapps_agents/simple_mode/framework_change_detector.py +268 -268
- tapps_agents/simple_mode/intent_parser.py +510 -510
- tapps_agents/simple_mode/learning_progression.py +358 -358
- tapps_agents/simple_mode/nl_handler.py +700 -700
- tapps_agents/simple_mode/onboarding.py +253 -253
- tapps_agents/simple_mode/orchestrators/__init__.py +38 -38
- tapps_agents/simple_mode/orchestrators/base.py +185 -185
- tapps_agents/simple_mode/orchestrators/breakdown_orchestrator.py +49 -49
- tapps_agents/simple_mode/orchestrators/brownfield_orchestrator.py +135 -135
- tapps_agents/simple_mode/orchestrators/build_orchestrator.py +2700 -2667
- tapps_agents/simple_mode/orchestrators/deliverable_checklist.py +349 -349
- tapps_agents/simple_mode/orchestrators/enhance_orchestrator.py +53 -53
- tapps_agents/simple_mode/orchestrators/epic_orchestrator.py +122 -122
- tapps_agents/simple_mode/orchestrators/explore_orchestrator.py +184 -184
- tapps_agents/simple_mode/orchestrators/fix_orchestrator.py +723 -723
- tapps_agents/simple_mode/orchestrators/plan_analysis_orchestrator.py +206 -206
- tapps_agents/simple_mode/orchestrators/pr_orchestrator.py +237 -237
- tapps_agents/simple_mode/orchestrators/refactor_orchestrator.py +222 -222
- tapps_agents/simple_mode/orchestrators/requirements_tracer.py +262 -262
- tapps_agents/simple_mode/orchestrators/resume_orchestrator.py +210 -210
- tapps_agents/simple_mode/orchestrators/review_orchestrator.py +161 -161
- tapps_agents/simple_mode/orchestrators/test_orchestrator.py +82 -82
- tapps_agents/simple_mode/output_aggregator.py +340 -340
- tapps_agents/simple_mode/result_formatters.py +598 -598
- tapps_agents/simple_mode/step_dependencies.py +382 -382
- tapps_agents/simple_mode/step_results.py +276 -276
- tapps_agents/simple_mode/streaming.py +388 -388
- tapps_agents/simple_mode/variations.py +129 -129
- tapps_agents/simple_mode/visual_feedback.py +238 -238
- tapps_agents/simple_mode/zero_config.py +274 -274
- tapps_agents/suggestions/__init__.py +8 -8
- tapps_agents/suggestions/inline_suggester.py +52 -52
- tapps_agents/templates/__init__.py +8 -8
- tapps_agents/templates/microservice_generator.py +274 -274
- tapps_agents/utils/env_validator.py +291 -291
- tapps_agents/workflow/__init__.py +171 -171
- tapps_agents/workflow/acceptance_verifier.py +132 -132
- tapps_agents/workflow/agent_handlers/__init__.py +41 -41
- tapps_agents/workflow/agent_handlers/analyst_handler.py +75 -75
- tapps_agents/workflow/agent_handlers/architect_handler.py +107 -107
- tapps_agents/workflow/agent_handlers/base.py +84 -84
- tapps_agents/workflow/agent_handlers/debugger_handler.py +100 -100
- tapps_agents/workflow/agent_handlers/designer_handler.py +110 -110
- tapps_agents/workflow/agent_handlers/documenter_handler.py +94 -94
- tapps_agents/workflow/agent_handlers/implementer_handler.py +235 -235
- tapps_agents/workflow/agent_handlers/ops_handler.py +62 -62
- tapps_agents/workflow/agent_handlers/orchestrator_handler.py +43 -43
- tapps_agents/workflow/agent_handlers/planner_handler.py +98 -98
- tapps_agents/workflow/agent_handlers/registry.py +119 -119
- tapps_agents/workflow/agent_handlers/reviewer_handler.py +119 -119
- tapps_agents/workflow/agent_handlers/tester_handler.py +69 -69
- tapps_agents/workflow/analytics_accessor.py +337 -337
- tapps_agents/workflow/analytics_alerts.py +416 -416
- tapps_agents/workflow/analytics_dashboard_cursor.py +281 -281
- tapps_agents/workflow/analytics_dual_write.py +103 -103
- tapps_agents/workflow/analytics_integration.py +119 -119
- tapps_agents/workflow/analytics_query_parser.py +278 -278
- tapps_agents/workflow/analytics_visualizer.py +259 -259
- tapps_agents/workflow/artifact_helper.py +204 -204
- tapps_agents/workflow/audit_logger.py +263 -263
- tapps_agents/workflow/auto_execution_config.py +340 -340
- tapps_agents/workflow/auto_progression.py +586 -586
- tapps_agents/workflow/branch_cleanup.py +349 -349
- tapps_agents/workflow/checkpoint.py +256 -256
- tapps_agents/workflow/checkpoint_manager.py +178 -178
- tapps_agents/workflow/code_artifact.py +179 -179
- tapps_agents/workflow/common_enums.py +96 -96
- tapps_agents/workflow/confirmation_handler.py +130 -130
- tapps_agents/workflow/context_analyzer.py +222 -222
- tapps_agents/workflow/context_artifact.py +230 -230
- tapps_agents/workflow/cursor_chat.py +94 -94
- tapps_agents/workflow/cursor_executor.py +2337 -2196
- tapps_agents/workflow/cursor_skill_helper.py +516 -516
- tapps_agents/workflow/dependency_resolver.py +244 -244
- tapps_agents/workflow/design_artifact.py +156 -156
- tapps_agents/workflow/detector.py +751 -751
- tapps_agents/workflow/direct_execution_fallback.py +301 -301
- tapps_agents/workflow/docs_artifact.py +168 -168
- tapps_agents/workflow/enforcer.py +389 -389
- tapps_agents/workflow/enhancement_artifact.py +142 -142
- tapps_agents/workflow/error_recovery.py +806 -806
- tapps_agents/workflow/event_bus.py +183 -183
- tapps_agents/workflow/event_log.py +612 -612
- tapps_agents/workflow/events.py +63 -63
- tapps_agents/workflow/exceptions.py +43 -43
- tapps_agents/workflow/execution_graph.py +498 -498
- tapps_agents/workflow/execution_plan.py +126 -126
- tapps_agents/workflow/file_utils.py +186 -186
- tapps_agents/workflow/gate_evaluator.py +182 -182
- tapps_agents/workflow/gate_integration.py +200 -200
- tapps_agents/workflow/graph_visualizer.py +130 -130
- tapps_agents/workflow/health_checker.py +206 -206
- tapps_agents/workflow/logging_helper.py +243 -243
- tapps_agents/workflow/manifest.py +582 -582
- tapps_agents/workflow/marker_writer.py +250 -250
- tapps_agents/workflow/message_formatter.py +188 -188
- tapps_agents/workflow/messaging.py +325 -325
- tapps_agents/workflow/metadata_models.py +91 -91
- tapps_agents/workflow/metrics_integration.py +226 -226
- tapps_agents/workflow/migration_utils.py +116 -116
- tapps_agents/workflow/models.py +148 -111
- tapps_agents/workflow/nlp_config.py +198 -198
- tapps_agents/workflow/nlp_error_handler.py +207 -207
- tapps_agents/workflow/nlp_executor.py +163 -163
- tapps_agents/workflow/nlp_parser.py +528 -528
- tapps_agents/workflow/observability_dashboard.py +451 -451
- tapps_agents/workflow/observer.py +170 -170
- tapps_agents/workflow/ops_artifact.py +257 -257
- tapps_agents/workflow/output_passing.py +214 -214
- tapps_agents/workflow/parallel_executor.py +463 -463
- tapps_agents/workflow/planning_artifact.py +179 -179
- tapps_agents/workflow/preset_loader.py +285 -285
- tapps_agents/workflow/preset_recommender.py +270 -270
- tapps_agents/workflow/progress_logger.py +145 -145
- tapps_agents/workflow/progress_manager.py +303 -303
- tapps_agents/workflow/progress_monitor.py +186 -186
- tapps_agents/workflow/progress_updates.py +423 -423
- tapps_agents/workflow/quality_artifact.py +158 -158
- tapps_agents/workflow/quality_loopback.py +101 -101
- tapps_agents/workflow/recommender.py +387 -387
- tapps_agents/workflow/remediation_loop.py +166 -166
- tapps_agents/workflow/result_aggregator.py +300 -300
- tapps_agents/workflow/review_artifact.py +185 -185
- tapps_agents/workflow/schema_validator.py +522 -522
- tapps_agents/workflow/session_handoff.py +178 -178
- tapps_agents/workflow/skill_invoker.py +648 -648
- tapps_agents/workflow/state_manager.py +756 -756
- tapps_agents/workflow/state_persistence_config.py +331 -331
- tapps_agents/workflow/status_monitor.py +449 -449
- tapps_agents/workflow/step_checkpoint.py +314 -314
- tapps_agents/workflow/step_details.py +201 -201
- tapps_agents/workflow/story_models.py +147 -147
- tapps_agents/workflow/streaming.py +416 -416
- tapps_agents/workflow/suggestion_engine.py +552 -552
- tapps_agents/workflow/testing_artifact.py +186 -186
- tapps_agents/workflow/timeline.py +158 -158
- tapps_agents/workflow/token_integration.py +209 -209
- tapps_agents/workflow/validation.py +217 -217
- tapps_agents/workflow/visual_feedback.py +391 -391
- tapps_agents/workflow/workflow_chain.py +95 -95
- tapps_agents/workflow/workflow_summary.py +219 -219
- tapps_agents/workflow/worktree_manager.py +724 -724
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/METADATA +672 -672
- tapps_agents-3.6.0.dist-info/RECORD +758 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/licenses/LICENSE +22 -22
- tapps_agents/health/checks/outcomes.backup_20260204_064058.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064256.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064600.py +0 -324
- tapps_agents-3.5.40.dist-info/RECORD +0 -760
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/WHEEL +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/entry_points.txt +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"""Shared utilities for CLI commands."""
|
|
2
|
-
from .agent_lifecycle import safe_close_agent, safe_close_agent_sync
|
|
3
|
-
from .output_handler import write_output
|
|
4
|
-
|
|
5
|
-
__all__ = ["safe_close_agent", "safe_close_agent_sync", "write_output"]
|
|
6
|
-
|
|
1
|
+
"""Shared utilities for CLI commands."""
|
|
2
|
+
from .agent_lifecycle import safe_close_agent, safe_close_agent_sync
|
|
3
|
+
from .output_handler import write_output
|
|
4
|
+
|
|
5
|
+
__all__ = ["safe_close_agent", "safe_close_agent_sync", "write_output"]
|
|
6
|
+
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
"""Shared utilities for agent lifecycle management."""
|
|
2
|
-
import asyncio
|
|
3
|
-
import logging
|
|
4
|
-
from typing import Any
|
|
5
|
-
|
|
6
|
-
logger = logging.getLogger(__name__)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
async def safe_close_agent(agent: Any) -> None:
|
|
10
|
-
"""
|
|
11
|
-
Safely close an agent, handling cases where close() may not exist.
|
|
12
|
-
|
|
13
|
-
Args:
|
|
14
|
-
agent: Agent instance to close
|
|
15
|
-
"""
|
|
16
|
-
if not agent:
|
|
17
|
-
return
|
|
18
|
-
|
|
19
|
-
try:
|
|
20
|
-
if hasattr(agent, 'close') and callable(agent.close):
|
|
21
|
-
if asyncio.iscoroutinefunction(agent.close):
|
|
22
|
-
await agent.close()
|
|
23
|
-
else:
|
|
24
|
-
agent.close()
|
|
25
|
-
except Exception as e:
|
|
26
|
-
# Log but don't fail - cleanup errors shouldn't break commands
|
|
27
|
-
logger.debug(f"Error during agent cleanup: {e}", exc_info=True)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def safe_close_agent_sync(agent: Any) -> None:
|
|
31
|
-
"""
|
|
32
|
-
Synchronous version of safe_close_agent for use in sync contexts.
|
|
33
|
-
|
|
34
|
-
Args:
|
|
35
|
-
agent: Agent instance to close
|
|
36
|
-
"""
|
|
37
|
-
if not agent:
|
|
38
|
-
return
|
|
39
|
-
|
|
40
|
-
try:
|
|
41
|
-
if hasattr(agent, 'close') and callable(agent.close):
|
|
42
|
-
if asyncio.iscoroutinefunction(agent.close):
|
|
43
|
-
asyncio.run(agent.close())
|
|
44
|
-
else:
|
|
45
|
-
agent.close()
|
|
46
|
-
except Exception as e:
|
|
47
|
-
logger.debug(f"Error during agent cleanup: {e}", exc_info=True)
|
|
48
|
-
|
|
1
|
+
"""Shared utilities for agent lifecycle management."""
|
|
2
|
+
import asyncio
|
|
3
|
+
import logging
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
logger = logging.getLogger(__name__)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
async def safe_close_agent(agent: Any) -> None:
|
|
10
|
+
"""
|
|
11
|
+
Safely close an agent, handling cases where close() may not exist.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
agent: Agent instance to close
|
|
15
|
+
"""
|
|
16
|
+
if not agent:
|
|
17
|
+
return
|
|
18
|
+
|
|
19
|
+
try:
|
|
20
|
+
if hasattr(agent, 'close') and callable(agent.close):
|
|
21
|
+
if asyncio.iscoroutinefunction(agent.close):
|
|
22
|
+
await agent.close()
|
|
23
|
+
else:
|
|
24
|
+
agent.close()
|
|
25
|
+
except Exception as e:
|
|
26
|
+
# Log but don't fail - cleanup errors shouldn't break commands
|
|
27
|
+
logger.debug(f"Error during agent cleanup: {e}", exc_info=True)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def safe_close_agent_sync(agent: Any) -> None:
|
|
31
|
+
"""
|
|
32
|
+
Synchronous version of safe_close_agent for use in sync contexts.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
agent: Agent instance to close
|
|
36
|
+
"""
|
|
37
|
+
if not agent:
|
|
38
|
+
return
|
|
39
|
+
|
|
40
|
+
try:
|
|
41
|
+
if hasattr(agent, 'close') and callable(agent.close):
|
|
42
|
+
if asyncio.iscoroutinefunction(agent.close):
|
|
43
|
+
asyncio.run(agent.close())
|
|
44
|
+
else:
|
|
45
|
+
agent.close()
|
|
46
|
+
except Exception as e:
|
|
47
|
+
logger.debug(f"Error during agent cleanup: {e}", exc_info=True)
|
|
48
|
+
|
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Error formatter for CLI commands.
|
|
3
|
-
|
|
4
|
-
Formats errors with structured, actionable messages including context, suggestions, and examples.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from typing import Any
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class ErrorFormatter:
|
|
11
|
-
"""Formats errors with structured, actionable messages."""
|
|
12
|
-
|
|
13
|
-
def format_validation_error(self, result: "ValidationResult") -> str:
|
|
14
|
-
"""
|
|
15
|
-
Format validation errors with structure: Error | Suggestions | Examples.
|
|
16
|
-
|
|
17
|
-
Args:
|
|
18
|
-
result: ValidationResult from command validation
|
|
19
|
-
|
|
20
|
-
Returns:
|
|
21
|
-
Formatted error message string
|
|
22
|
-
"""
|
|
23
|
-
if not result.has_errors():
|
|
24
|
-
return ""
|
|
25
|
-
|
|
26
|
-
error_lines = []
|
|
27
|
-
error_lines.append("Validation Error")
|
|
28
|
-
error_lines.append("=" * 60)
|
|
29
|
-
|
|
30
|
-
error_lines.append("\nErrors:")
|
|
31
|
-
for error in result.errors:
|
|
32
|
-
error_lines.append(f" • {error}")
|
|
33
|
-
|
|
34
|
-
if result.suggestions:
|
|
35
|
-
error_lines.append("\nSuggestions:")
|
|
36
|
-
for suggestion in result.suggestions:
|
|
37
|
-
error_lines.append(f" • {suggestion}")
|
|
38
|
-
|
|
39
|
-
if result.examples:
|
|
40
|
-
error_lines.append("\nExamples:")
|
|
41
|
-
for example in result.examples:
|
|
42
|
-
error_lines.append(f" $ {example}")
|
|
43
|
-
|
|
44
|
-
return "\n".join(error_lines)
|
|
45
|
-
|
|
46
|
-
def format_error(
|
|
47
|
-
self,
|
|
48
|
-
error_message: str,
|
|
49
|
-
error_type: str = "Error",
|
|
50
|
-
context: dict[str, Any] | None = None,
|
|
51
|
-
suggestion: str | None = None,
|
|
52
|
-
example: str | None = None,
|
|
53
|
-
) -> str:
|
|
54
|
-
"""
|
|
55
|
-
Format general error with structure: Error | Context | Suggestion | Example.
|
|
56
|
-
|
|
57
|
-
Args:
|
|
58
|
-
error_message: Main error message
|
|
59
|
-
error_type: Error type/category
|
|
60
|
-
context: Optional context dictionary
|
|
61
|
-
suggestion: Optional suggestion for fixing the error
|
|
62
|
-
example: Optional example command or code
|
|
63
|
-
|
|
64
|
-
Returns:
|
|
65
|
-
Formatted error message string
|
|
66
|
-
"""
|
|
67
|
-
error_lines = []
|
|
68
|
-
error_lines.append(f"{error_type}: {error_message}")
|
|
69
|
-
error_lines.append("=" * 60)
|
|
70
|
-
|
|
71
|
-
if context:
|
|
72
|
-
error_lines.append("\nContext:")
|
|
73
|
-
for key, value in context.items():
|
|
74
|
-
error_lines.append(f" {key}: {value}")
|
|
75
|
-
|
|
76
|
-
if suggestion:
|
|
77
|
-
error_lines.append(f"\nSuggestion: {suggestion}")
|
|
78
|
-
|
|
79
|
-
if example:
|
|
80
|
-
error_lines.append(f"\nExample: {example}")
|
|
81
|
-
|
|
82
|
-
return "\n".join(error_lines)
|
|
1
|
+
"""
|
|
2
|
+
Error formatter for CLI commands.
|
|
3
|
+
|
|
4
|
+
Formats errors with structured, actionable messages including context, suggestions, and examples.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ErrorFormatter:
|
|
11
|
+
"""Formats errors with structured, actionable messages."""
|
|
12
|
+
|
|
13
|
+
def format_validation_error(self, result: "ValidationResult") -> str:
|
|
14
|
+
"""
|
|
15
|
+
Format validation errors with structure: Error | Suggestions | Examples.
|
|
16
|
+
|
|
17
|
+
Args:
|
|
18
|
+
result: ValidationResult from command validation
|
|
19
|
+
|
|
20
|
+
Returns:
|
|
21
|
+
Formatted error message string
|
|
22
|
+
"""
|
|
23
|
+
if not result.has_errors():
|
|
24
|
+
return ""
|
|
25
|
+
|
|
26
|
+
error_lines = []
|
|
27
|
+
error_lines.append("Validation Error")
|
|
28
|
+
error_lines.append("=" * 60)
|
|
29
|
+
|
|
30
|
+
error_lines.append("\nErrors:")
|
|
31
|
+
for error in result.errors:
|
|
32
|
+
error_lines.append(f" • {error}")
|
|
33
|
+
|
|
34
|
+
if result.suggestions:
|
|
35
|
+
error_lines.append("\nSuggestions:")
|
|
36
|
+
for suggestion in result.suggestions:
|
|
37
|
+
error_lines.append(f" • {suggestion}")
|
|
38
|
+
|
|
39
|
+
if result.examples:
|
|
40
|
+
error_lines.append("\nExamples:")
|
|
41
|
+
for example in result.examples:
|
|
42
|
+
error_lines.append(f" $ {example}")
|
|
43
|
+
|
|
44
|
+
return "\n".join(error_lines)
|
|
45
|
+
|
|
46
|
+
def format_error(
|
|
47
|
+
self,
|
|
48
|
+
error_message: str,
|
|
49
|
+
error_type: str = "Error",
|
|
50
|
+
context: dict[str, Any] | None = None,
|
|
51
|
+
suggestion: str | None = None,
|
|
52
|
+
example: str | None = None,
|
|
53
|
+
) -> str:
|
|
54
|
+
"""
|
|
55
|
+
Format general error with structure: Error | Context | Suggestion | Example.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
error_message: Main error message
|
|
59
|
+
error_type: Error type/category
|
|
60
|
+
context: Optional context dictionary
|
|
61
|
+
suggestion: Optional suggestion for fixing the error
|
|
62
|
+
example: Optional example command or code
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
Formatted error message string
|
|
66
|
+
"""
|
|
67
|
+
error_lines = []
|
|
68
|
+
error_lines.append(f"{error_type}: {error_message}")
|
|
69
|
+
error_lines.append("=" * 60)
|
|
70
|
+
|
|
71
|
+
if context:
|
|
72
|
+
error_lines.append("\nContext:")
|
|
73
|
+
for key, value in context.items():
|
|
74
|
+
error_lines.append(f" {key}: {value}")
|
|
75
|
+
|
|
76
|
+
if suggestion:
|
|
77
|
+
error_lines.append(f"\nSuggestion: {suggestion}")
|
|
78
|
+
|
|
79
|
+
if example:
|
|
80
|
+
error_lines.append(f"\nExample: {example}")
|
|
81
|
+
|
|
82
|
+
return "\n".join(error_lines)
|
|
@@ -1,188 +1,188 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Error recovery handler for workflow execution.
|
|
3
|
-
|
|
4
|
-
Provides recovery options when workflow steps fail.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from typing import Any, Callable
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class ErrorRecoveryHandler:
|
|
11
|
-
"""Handles error recovery options for failed workflow steps."""
|
|
12
|
-
|
|
13
|
-
def __init__(self, interactive: bool = False):
|
|
14
|
-
"""
|
|
15
|
-
Initialize error recovery handler.
|
|
16
|
-
|
|
17
|
-
Args:
|
|
18
|
-
interactive: If True, prompt user for recovery action (default: False)
|
|
19
|
-
"""
|
|
20
|
-
self.interactive = interactive
|
|
21
|
-
self.recovery_actions: list[dict[str, Any]] = []
|
|
22
|
-
|
|
23
|
-
def handle_step_error(
|
|
24
|
-
self,
|
|
25
|
-
step_num: int,
|
|
26
|
-
step_name: str,
|
|
27
|
-
error: Exception,
|
|
28
|
-
retry_callback: Callable[[], Any] | None = None,
|
|
29
|
-
skip_callback: Callable[[], Any] | None = None,
|
|
30
|
-
continue_callback: Callable[[], Any] | None = None,
|
|
31
|
-
) -> str:
|
|
32
|
-
"""
|
|
33
|
-
Handle a step error and determine recovery action.
|
|
34
|
-
|
|
35
|
-
Args:
|
|
36
|
-
step_num: Step number that failed
|
|
37
|
-
step_name: Name of the step that failed
|
|
38
|
-
error: Exception that occurred
|
|
39
|
-
retry_callback: Optional callback to retry the step
|
|
40
|
-
skip_callback: Optional callback to skip the step
|
|
41
|
-
continue_callback: Optional callback to continue with degraded functionality
|
|
42
|
-
|
|
43
|
-
Returns:
|
|
44
|
-
Recovery action taken: "retry", "skip", "continue", or "fail"
|
|
45
|
-
"""
|
|
46
|
-
error_info = {
|
|
47
|
-
"step_num": step_num,
|
|
48
|
-
"step_name": step_name,
|
|
49
|
-
"error": str(error),
|
|
50
|
-
"error_type": type(error).__name__,
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
# Determine recovery strategy based on error type
|
|
54
|
-
recovery_action = self._determine_recovery_strategy(error, step_name)
|
|
55
|
-
|
|
56
|
-
if self.interactive:
|
|
57
|
-
# Interactive mode: prompt user
|
|
58
|
-
recovery_action = self._prompt_recovery_action(step_name, error)
|
|
59
|
-
|
|
60
|
-
# Execute recovery action
|
|
61
|
-
if recovery_action == "retry" and retry_callback:
|
|
62
|
-
try:
|
|
63
|
-
retry_callback()
|
|
64
|
-
error_info["recovery_action"] = "retry"
|
|
65
|
-
error_info["recovery_success"] = True
|
|
66
|
-
self.recovery_actions.append(error_info)
|
|
67
|
-
return "retry"
|
|
68
|
-
except Exception as retry_error:
|
|
69
|
-
error_info["recovery_action"] = "retry"
|
|
70
|
-
error_info["recovery_success"] = False
|
|
71
|
-
error_info["retry_error"] = str(retry_error)
|
|
72
|
-
self.recovery_actions.append(error_info)
|
|
73
|
-
return "fail"
|
|
74
|
-
|
|
75
|
-
elif recovery_action == "skip" and skip_callback:
|
|
76
|
-
skip_callback()
|
|
77
|
-
error_info["recovery_action"] = "skip"
|
|
78
|
-
self.recovery_actions.append(error_info)
|
|
79
|
-
return "skip"
|
|
80
|
-
|
|
81
|
-
elif recovery_action == "continue" and continue_callback:
|
|
82
|
-
continue_callback()
|
|
83
|
-
error_info["recovery_action"] = "continue"
|
|
84
|
-
self.recovery_actions.append(error_info)
|
|
85
|
-
return "continue"
|
|
86
|
-
|
|
87
|
-
else:
|
|
88
|
-
# No recovery possible or action is "fail"
|
|
89
|
-
error_info["recovery_action"] = "fail"
|
|
90
|
-
self.recovery_actions.append(error_info)
|
|
91
|
-
return "fail"
|
|
92
|
-
|
|
93
|
-
def _determine_recovery_strategy(self, error: Exception, step_name: str) -> str:
|
|
94
|
-
"""
|
|
95
|
-
Determine recovery strategy based on error type and step.
|
|
96
|
-
|
|
97
|
-
Args:
|
|
98
|
-
error: Exception that occurred
|
|
99
|
-
step_name: Name of the step
|
|
100
|
-
|
|
101
|
-
Returns:
|
|
102
|
-
Recovery strategy: "retry", "skip", "continue", or "fail"
|
|
103
|
-
"""
|
|
104
|
-
error_type = type(error).__name__
|
|
105
|
-
error_str = str(error).lower()
|
|
106
|
-
|
|
107
|
-
# Network/timeout errors: retry
|
|
108
|
-
if "timeout" in error_str or "connection" in error_str or "network" in error_str:
|
|
109
|
-
return "retry"
|
|
110
|
-
|
|
111
|
-
# Validation errors: skip (non-critical steps)
|
|
112
|
-
if "validation" in error_str or "invalid" in error_str:
|
|
113
|
-
step_lower = step_name.lower()
|
|
114
|
-
# Check if step name contains non-critical keywords
|
|
115
|
-
if any(keyword in step_lower for keyword in ["review", "test", "document"]):
|
|
116
|
-
return "skip" # Non-critical steps can be skipped
|
|
117
|
-
return "fail" # Critical steps fail
|
|
118
|
-
|
|
119
|
-
# File not found: continue (may be created later)
|
|
120
|
-
if "not found" in error_str:
|
|
121
|
-
step_lower = step_name.lower()
|
|
122
|
-
# Check if step name contains non-critical keywords
|
|
123
|
-
if any(keyword in step_lower for keyword in ["document", "test"]):
|
|
124
|
-
return "continue" # Can continue without these
|
|
125
|
-
return "fail"
|
|
126
|
-
|
|
127
|
-
# Default: fail for unknown errors
|
|
128
|
-
return "fail"
|
|
129
|
-
|
|
130
|
-
def _prompt_recovery_action(self, step_name: str, error: Exception) -> str:
|
|
131
|
-
"""
|
|
132
|
-
Prompt user for recovery action (interactive mode).
|
|
133
|
-
|
|
134
|
-
Args:
|
|
135
|
-
step_name: Name of the failed step
|
|
136
|
-
error: Exception that occurred
|
|
137
|
-
|
|
138
|
-
Returns:
|
|
139
|
-
User-selected recovery action
|
|
140
|
-
"""
|
|
141
|
-
print(f"\n{'='*60}")
|
|
142
|
-
print(f"Step Failed: {step_name}")
|
|
143
|
-
print(f"{'='*60}")
|
|
144
|
-
print(f"Error: {error}")
|
|
145
|
-
print("\nRecovery Options:")
|
|
146
|
-
print(" 1. Retry step")
|
|
147
|
-
print(" 2. Skip step and continue")
|
|
148
|
-
print(" 3. Continue with degraded functionality")
|
|
149
|
-
print(" 4. Fail workflow")
|
|
150
|
-
|
|
151
|
-
while True:
|
|
152
|
-
try:
|
|
153
|
-
choice = input("\nSelect recovery action (1-4): ").strip()
|
|
154
|
-
if choice == "1":
|
|
155
|
-
return "retry"
|
|
156
|
-
elif choice == "2":
|
|
157
|
-
return "skip"
|
|
158
|
-
elif choice == "3":
|
|
159
|
-
return "continue"
|
|
160
|
-
elif choice == "4":
|
|
161
|
-
return "fail"
|
|
162
|
-
else:
|
|
163
|
-
print("Invalid choice. Please enter 1-4.")
|
|
164
|
-
except (EOFError, KeyboardInterrupt):
|
|
165
|
-
# Non-interactive fallback
|
|
166
|
-
return "fail"
|
|
167
|
-
|
|
168
|
-
def get_recovery_summary(self) -> dict[str, Any]:
|
|
169
|
-
"""
|
|
170
|
-
Get summary of recovery actions taken.
|
|
171
|
-
|
|
172
|
-
Returns:
|
|
173
|
-
Dictionary with recovery summary statistics
|
|
174
|
-
"""
|
|
175
|
-
total = len(self.recovery_actions)
|
|
176
|
-
retries = sum(1 for a in self.recovery_actions if a.get("recovery_action") == "retry")
|
|
177
|
-
skips = sum(1 for a in self.recovery_actions if a.get("recovery_action") == "skip")
|
|
178
|
-
continues = sum(1 for a in self.recovery_actions if a.get("recovery_action") == "continue")
|
|
179
|
-
failures = sum(1 for a in self.recovery_actions if a.get("recovery_action") == "fail")
|
|
180
|
-
|
|
181
|
-
return {
|
|
182
|
-
"total_recoveries": total,
|
|
183
|
-
"retries": retries,
|
|
184
|
-
"skips": skips,
|
|
185
|
-
"continues": continues,
|
|
186
|
-
"failures": failures,
|
|
187
|
-
"actions": self.recovery_actions,
|
|
188
|
-
}
|
|
1
|
+
"""
|
|
2
|
+
Error recovery handler for workflow execution.
|
|
3
|
+
|
|
4
|
+
Provides recovery options when workflow steps fail.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Any, Callable
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ErrorRecoveryHandler:
|
|
11
|
+
"""Handles error recovery options for failed workflow steps."""
|
|
12
|
+
|
|
13
|
+
def __init__(self, interactive: bool = False):
|
|
14
|
+
"""
|
|
15
|
+
Initialize error recovery handler.
|
|
16
|
+
|
|
17
|
+
Args:
|
|
18
|
+
interactive: If True, prompt user for recovery action (default: False)
|
|
19
|
+
"""
|
|
20
|
+
self.interactive = interactive
|
|
21
|
+
self.recovery_actions: list[dict[str, Any]] = []
|
|
22
|
+
|
|
23
|
+
def handle_step_error(
|
|
24
|
+
self,
|
|
25
|
+
step_num: int,
|
|
26
|
+
step_name: str,
|
|
27
|
+
error: Exception,
|
|
28
|
+
retry_callback: Callable[[], Any] | None = None,
|
|
29
|
+
skip_callback: Callable[[], Any] | None = None,
|
|
30
|
+
continue_callback: Callable[[], Any] | None = None,
|
|
31
|
+
) -> str:
|
|
32
|
+
"""
|
|
33
|
+
Handle a step error and determine recovery action.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
step_num: Step number that failed
|
|
37
|
+
step_name: Name of the step that failed
|
|
38
|
+
error: Exception that occurred
|
|
39
|
+
retry_callback: Optional callback to retry the step
|
|
40
|
+
skip_callback: Optional callback to skip the step
|
|
41
|
+
continue_callback: Optional callback to continue with degraded functionality
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
Recovery action taken: "retry", "skip", "continue", or "fail"
|
|
45
|
+
"""
|
|
46
|
+
error_info = {
|
|
47
|
+
"step_num": step_num,
|
|
48
|
+
"step_name": step_name,
|
|
49
|
+
"error": str(error),
|
|
50
|
+
"error_type": type(error).__name__,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
# Determine recovery strategy based on error type
|
|
54
|
+
recovery_action = self._determine_recovery_strategy(error, step_name)
|
|
55
|
+
|
|
56
|
+
if self.interactive:
|
|
57
|
+
# Interactive mode: prompt user
|
|
58
|
+
recovery_action = self._prompt_recovery_action(step_name, error)
|
|
59
|
+
|
|
60
|
+
# Execute recovery action
|
|
61
|
+
if recovery_action == "retry" and retry_callback:
|
|
62
|
+
try:
|
|
63
|
+
retry_callback()
|
|
64
|
+
error_info["recovery_action"] = "retry"
|
|
65
|
+
error_info["recovery_success"] = True
|
|
66
|
+
self.recovery_actions.append(error_info)
|
|
67
|
+
return "retry"
|
|
68
|
+
except Exception as retry_error:
|
|
69
|
+
error_info["recovery_action"] = "retry"
|
|
70
|
+
error_info["recovery_success"] = False
|
|
71
|
+
error_info["retry_error"] = str(retry_error)
|
|
72
|
+
self.recovery_actions.append(error_info)
|
|
73
|
+
return "fail"
|
|
74
|
+
|
|
75
|
+
elif recovery_action == "skip" and skip_callback:
|
|
76
|
+
skip_callback()
|
|
77
|
+
error_info["recovery_action"] = "skip"
|
|
78
|
+
self.recovery_actions.append(error_info)
|
|
79
|
+
return "skip"
|
|
80
|
+
|
|
81
|
+
elif recovery_action == "continue" and continue_callback:
|
|
82
|
+
continue_callback()
|
|
83
|
+
error_info["recovery_action"] = "continue"
|
|
84
|
+
self.recovery_actions.append(error_info)
|
|
85
|
+
return "continue"
|
|
86
|
+
|
|
87
|
+
else:
|
|
88
|
+
# No recovery possible or action is "fail"
|
|
89
|
+
error_info["recovery_action"] = "fail"
|
|
90
|
+
self.recovery_actions.append(error_info)
|
|
91
|
+
return "fail"
|
|
92
|
+
|
|
93
|
+
def _determine_recovery_strategy(self, error: Exception, step_name: str) -> str:
|
|
94
|
+
"""
|
|
95
|
+
Determine recovery strategy based on error type and step.
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
error: Exception that occurred
|
|
99
|
+
step_name: Name of the step
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
Recovery strategy: "retry", "skip", "continue", or "fail"
|
|
103
|
+
"""
|
|
104
|
+
error_type = type(error).__name__
|
|
105
|
+
error_str = str(error).lower()
|
|
106
|
+
|
|
107
|
+
# Network/timeout errors: retry
|
|
108
|
+
if "timeout" in error_str or "connection" in error_str or "network" in error_str:
|
|
109
|
+
return "retry"
|
|
110
|
+
|
|
111
|
+
# Validation errors: skip (non-critical steps)
|
|
112
|
+
if "validation" in error_str or "invalid" in error_str:
|
|
113
|
+
step_lower = step_name.lower()
|
|
114
|
+
# Check if step name contains non-critical keywords
|
|
115
|
+
if any(keyword in step_lower for keyword in ["review", "test", "document"]):
|
|
116
|
+
return "skip" # Non-critical steps can be skipped
|
|
117
|
+
return "fail" # Critical steps fail
|
|
118
|
+
|
|
119
|
+
# File not found: continue (may be created later)
|
|
120
|
+
if "not found" in error_str:
|
|
121
|
+
step_lower = step_name.lower()
|
|
122
|
+
# Check if step name contains non-critical keywords
|
|
123
|
+
if any(keyword in step_lower for keyword in ["document", "test"]):
|
|
124
|
+
return "continue" # Can continue without these
|
|
125
|
+
return "fail"
|
|
126
|
+
|
|
127
|
+
# Default: fail for unknown errors
|
|
128
|
+
return "fail"
|
|
129
|
+
|
|
130
|
+
def _prompt_recovery_action(self, step_name: str, error: Exception) -> str:
|
|
131
|
+
"""
|
|
132
|
+
Prompt user for recovery action (interactive mode).
|
|
133
|
+
|
|
134
|
+
Args:
|
|
135
|
+
step_name: Name of the failed step
|
|
136
|
+
error: Exception that occurred
|
|
137
|
+
|
|
138
|
+
Returns:
|
|
139
|
+
User-selected recovery action
|
|
140
|
+
"""
|
|
141
|
+
print(f"\n{'='*60}")
|
|
142
|
+
print(f"Step Failed: {step_name}")
|
|
143
|
+
print(f"{'='*60}")
|
|
144
|
+
print(f"Error: {error}")
|
|
145
|
+
print("\nRecovery Options:")
|
|
146
|
+
print(" 1. Retry step")
|
|
147
|
+
print(" 2. Skip step and continue")
|
|
148
|
+
print(" 3. Continue with degraded functionality")
|
|
149
|
+
print(" 4. Fail workflow")
|
|
150
|
+
|
|
151
|
+
while True:
|
|
152
|
+
try:
|
|
153
|
+
choice = input("\nSelect recovery action (1-4): ").strip()
|
|
154
|
+
if choice == "1":
|
|
155
|
+
return "retry"
|
|
156
|
+
elif choice == "2":
|
|
157
|
+
return "skip"
|
|
158
|
+
elif choice == "3":
|
|
159
|
+
return "continue"
|
|
160
|
+
elif choice == "4":
|
|
161
|
+
return "fail"
|
|
162
|
+
else:
|
|
163
|
+
print("Invalid choice. Please enter 1-4.")
|
|
164
|
+
except (EOFError, KeyboardInterrupt):
|
|
165
|
+
# Non-interactive fallback
|
|
166
|
+
return "fail"
|
|
167
|
+
|
|
168
|
+
def get_recovery_summary(self) -> dict[str, Any]:
|
|
169
|
+
"""
|
|
170
|
+
Get summary of recovery actions taken.
|
|
171
|
+
|
|
172
|
+
Returns:
|
|
173
|
+
Dictionary with recovery summary statistics
|
|
174
|
+
"""
|
|
175
|
+
total = len(self.recovery_actions)
|
|
176
|
+
retries = sum(1 for a in self.recovery_actions if a.get("recovery_action") == "retry")
|
|
177
|
+
skips = sum(1 for a in self.recovery_actions if a.get("recovery_action") == "skip")
|
|
178
|
+
continues = sum(1 for a in self.recovery_actions if a.get("recovery_action") == "continue")
|
|
179
|
+
failures = sum(1 for a in self.recovery_actions if a.get("recovery_action") == "fail")
|
|
180
|
+
|
|
181
|
+
return {
|
|
182
|
+
"total_recoveries": total,
|
|
183
|
+
"retries": retries,
|
|
184
|
+
"skips": skips,
|
|
185
|
+
"continues": continues,
|
|
186
|
+
"failures": failures,
|
|
187
|
+
"actions": self.recovery_actions,
|
|
188
|
+
}
|