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,316 +1,316 @@
|
|
|
1
|
-
# Service Communication Patterns
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
This guide covers inter-service communication patterns for microservices architectures, including HTTP, gRPC, and event-driven communication.
|
|
6
|
-
|
|
7
|
-
## Communication Styles
|
|
8
|
-
|
|
9
|
-
### Synchronous Communication
|
|
10
|
-
|
|
11
|
-
**HTTP/REST:**
|
|
12
|
-
- Request-response pattern
|
|
13
|
-
- Simple to implement
|
|
14
|
-
- Can cause cascading failures
|
|
15
|
-
- Use for real-time queries
|
|
16
|
-
|
|
17
|
-
**gRPC:**
|
|
18
|
-
- High performance
|
|
19
|
-
- Type-safe
|
|
20
|
-
- Streaming support
|
|
21
|
-
- Use for internal services
|
|
22
|
-
|
|
23
|
-
### Asynchronous Communication
|
|
24
|
-
|
|
25
|
-
**Message Queues:**
|
|
26
|
-
- Decoupled services
|
|
27
|
-
- Better fault tolerance
|
|
28
|
-
- Eventual consistency
|
|
29
|
-
- Use for event processing
|
|
30
|
-
|
|
31
|
-
**Event Streaming:**
|
|
32
|
-
- Real-time event processing
|
|
33
|
-
- High throughput
|
|
34
|
-
- Use for analytics, logging
|
|
35
|
-
|
|
36
|
-
## HTTP/REST Patterns
|
|
37
|
-
|
|
38
|
-
### Pattern 1: Service Client with Retry
|
|
39
|
-
|
|
40
|
-
```python
|
|
41
|
-
import httpx
|
|
42
|
-
from tenacity import retry, stop_after_attempt, wait_exponential
|
|
43
|
-
|
|
44
|
-
class ServiceClient:
|
|
45
|
-
def __init__(self, base_url: str, timeout: float = 30.0):
|
|
46
|
-
self.base_url = base_url
|
|
47
|
-
self.timeout = timeout
|
|
48
|
-
self.client = httpx.AsyncClient(timeout=timeout)
|
|
49
|
-
|
|
50
|
-
@retry(
|
|
51
|
-
stop=stop_after_attempt(3),
|
|
52
|
-
wait=wait_exponential(multiplier=1, min=2, max=10)
|
|
53
|
-
)
|
|
54
|
-
async def get(self, endpoint: str, params: dict = None):
|
|
55
|
-
"""GET request with retry."""
|
|
56
|
-
try:
|
|
57
|
-
response = await self.client.get(
|
|
58
|
-
f"{self.base_url}/{endpoint}",
|
|
59
|
-
params=params
|
|
60
|
-
)
|
|
61
|
-
response.raise_for_status()
|
|
62
|
-
return response.json()
|
|
63
|
-
except httpx.HTTPStatusError as e:
|
|
64
|
-
if e.response.status_code >= 500:
|
|
65
|
-
# Retry on server errors
|
|
66
|
-
raise
|
|
67
|
-
# Don't retry on client errors
|
|
68
|
-
raise
|
|
69
|
-
|
|
70
|
-
async def post(self, endpoint: str, data: dict):
|
|
71
|
-
"""POST request."""
|
|
72
|
-
response = await self.client.post(
|
|
73
|
-
f"{self.base_url}/{endpoint}",
|
|
74
|
-
json=data
|
|
75
|
-
)
|
|
76
|
-
response.raise_for_status()
|
|
77
|
-
return response.json()
|
|
78
|
-
|
|
79
|
-
async def close(self):
|
|
80
|
-
"""Close client."""
|
|
81
|
-
await self.client.aclose()
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### Pattern 2: Service Discovery Integration
|
|
85
|
-
|
|
86
|
-
```python
|
|
87
|
-
class DiscoverableServiceClient:
|
|
88
|
-
def __init__(self, service_name: str, service_discovery):
|
|
89
|
-
self.service_name = service_name
|
|
90
|
-
self.discovery = service_discovery
|
|
91
|
-
self.client = httpx.AsyncClient()
|
|
92
|
-
|
|
93
|
-
async def get_service_url(self) -> str:
|
|
94
|
-
"""Get service URL from discovery."""
|
|
95
|
-
return await self.discovery.get_service_url(self.service_name)
|
|
96
|
-
|
|
97
|
-
async def request(self, method: str, endpoint: str, **kwargs):
|
|
98
|
-
"""Make request with service discovery."""
|
|
99
|
-
base_url = await self.get_service_url()
|
|
100
|
-
response = await self.client.request(
|
|
101
|
-
method,
|
|
102
|
-
f"{base_url}/{endpoint}",
|
|
103
|
-
**kwargs
|
|
104
|
-
)
|
|
105
|
-
response.raise_for_status()
|
|
106
|
-
return response.json()
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### Pattern 3: Circuit Breaker Pattern
|
|
110
|
-
|
|
111
|
-
```python
|
|
112
|
-
from circuitbreaker import circuit
|
|
113
|
-
|
|
114
|
-
class ResilientServiceClient:
|
|
115
|
-
def __init__(self, base_url: str):
|
|
116
|
-
self.base_url = base_url
|
|
117
|
-
self.client = httpx.AsyncClient()
|
|
118
|
-
|
|
119
|
-
@circuit(failure_threshold=5, recovery_timeout=60)
|
|
120
|
-
async def call_service(self, endpoint: str):
|
|
121
|
-
"""Call service with circuit breaker."""
|
|
122
|
-
response = await self.client.get(f"{self.base_url}/{endpoint}")
|
|
123
|
-
response.raise_for_status()
|
|
124
|
-
return response.json()
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
## gRPC Patterns
|
|
128
|
-
|
|
129
|
-
### Pattern 1: gRPC Client
|
|
130
|
-
|
|
131
|
-
```python
|
|
132
|
-
import grpc
|
|
133
|
-
from grpc import aio
|
|
134
|
-
|
|
135
|
-
class GRPCServiceClient:
|
|
136
|
-
def __init__(self, service_stub, server_address: str):
|
|
137
|
-
self.stub = service_stub
|
|
138
|
-
self.server_address = server_address
|
|
139
|
-
self.channel = None
|
|
140
|
-
|
|
141
|
-
async def connect(self):
|
|
142
|
-
"""Connect to gRPC server."""
|
|
143
|
-
self.channel = aio.insecure_channel(self.server_address)
|
|
144
|
-
self.stub = self.stub(self.channel)
|
|
145
|
-
|
|
146
|
-
async def call(self, method_name: str, request):
|
|
147
|
-
"""Call gRPC method."""
|
|
148
|
-
method = getattr(self.stub, method_name)
|
|
149
|
-
response = await method(request)
|
|
150
|
-
return response
|
|
151
|
-
|
|
152
|
-
async def close(self):
|
|
153
|
-
"""Close channel."""
|
|
154
|
-
if self.channel:
|
|
155
|
-
await self.channel.close()
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### Pattern 2: gRPC Streaming
|
|
159
|
-
|
|
160
|
-
```python
|
|
161
|
-
async def stream_data(stub, request):
|
|
162
|
-
"""Stream data from gRPC service."""
|
|
163
|
-
async for response in stub.StreamData(request):
|
|
164
|
-
yield response
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
## Event-Driven Patterns
|
|
168
|
-
|
|
169
|
-
### Pattern 1: Event Publisher
|
|
170
|
-
|
|
171
|
-
```python
|
|
172
|
-
from pydantic import BaseModel
|
|
173
|
-
from typing import Any
|
|
174
|
-
|
|
175
|
-
class Event(BaseModel):
|
|
176
|
-
event_type: str
|
|
177
|
-
data: dict[str, Any]
|
|
178
|
-
timestamp: str
|
|
179
|
-
source: str
|
|
180
|
-
|
|
181
|
-
class EventPublisher:
|
|
182
|
-
def __init__(self, broker):
|
|
183
|
-
self.broker = broker
|
|
184
|
-
|
|
185
|
-
async def publish(self, event_type: str, data: dict, source: str):
|
|
186
|
-
"""Publish event."""
|
|
187
|
-
event = Event(
|
|
188
|
-
event_type=event_type,
|
|
189
|
-
data=data,
|
|
190
|
-
timestamp=datetime.utcnow().isoformat(),
|
|
191
|
-
source=source
|
|
192
|
-
)
|
|
193
|
-
await self.broker.publish(event_type, event.dict())
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### Pattern 2: Event Subscriber
|
|
197
|
-
|
|
198
|
-
```python
|
|
199
|
-
class EventSubscriber:
|
|
200
|
-
def __init__(self, broker):
|
|
201
|
-
self.broker = broker
|
|
202
|
-
self.handlers = {}
|
|
203
|
-
|
|
204
|
-
def register_handler(self, event_type: str, handler):
|
|
205
|
-
"""Register event handler."""
|
|
206
|
-
self.handlers[event_type] = handler
|
|
207
|
-
|
|
208
|
-
async def subscribe(self, event_type: str):
|
|
209
|
-
"""Subscribe to event type."""
|
|
210
|
-
async for event in self.broker.subscribe(event_type):
|
|
211
|
-
if event_type in self.handlers:
|
|
212
|
-
await self.handlers[event_type](event)
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
### Pattern 3: Event Sourcing
|
|
216
|
-
|
|
217
|
-
```python
|
|
218
|
-
class EventStore:
|
|
219
|
-
def __init__(self, storage):
|
|
220
|
-
self.storage = storage
|
|
221
|
-
|
|
222
|
-
async def append(self, stream_id: str, events: list[Event]):
|
|
223
|
-
"""Append events to stream."""
|
|
224
|
-
await self.storage.append(stream_id, events)
|
|
225
|
-
|
|
226
|
-
async def get_stream(self, stream_id: str):
|
|
227
|
-
"""Get event stream."""
|
|
228
|
-
return await self.storage.get_stream(stream_id)
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
## HomeIQ-Specific Patterns
|
|
232
|
-
|
|
233
|
-
### Pattern 1: Sensor Data Pipeline
|
|
234
|
-
|
|
235
|
-
```
|
|
236
|
-
Sensor → WebSocket Service → Event Bus → Processing Services → Storage
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
**Implementation:**
|
|
240
|
-
```python
|
|
241
|
-
# WebSocket service publishes events
|
|
242
|
-
await event_publisher.publish("sensor.data", {
|
|
243
|
-
"device_id": "sensor_001",
|
|
244
|
-
"value": 72.5,
|
|
245
|
-
"timestamp": "2026-01-15T10:30:00Z"
|
|
246
|
-
})
|
|
247
|
-
|
|
248
|
-
# Processing services subscribe
|
|
249
|
-
@event_subscriber.subscribe("sensor.data")
|
|
250
|
-
async def process_sensor_data(event):
|
|
251
|
-
# Process and store
|
|
252
|
-
await storage_service.store(event.data)
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
### Pattern 2: Service-to-Service Calls
|
|
256
|
-
|
|
257
|
-
```python
|
|
258
|
-
# Device service calls user service
|
|
259
|
-
user_client = ServiceClient("http://user-service:8000")
|
|
260
|
-
user = await user_client.get(f"/users/{user_id}")
|
|
261
|
-
|
|
262
|
-
# Device service calls sensor service
|
|
263
|
-
sensor_client = ServiceClient("http://sensor-service:8000")
|
|
264
|
-
sensors = await sensor_client.get(f"/devices/{device_id}/sensors")
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
## Best Practices
|
|
268
|
-
|
|
269
|
-
### 1. Timeout Configuration
|
|
270
|
-
|
|
271
|
-
```python
|
|
272
|
-
# Set appropriate timeouts
|
|
273
|
-
client = httpx.AsyncClient(timeout=30.0) # 30 seconds
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
### 2. Retry Strategy
|
|
277
|
-
|
|
278
|
-
```python
|
|
279
|
-
# Exponential backoff
|
|
280
|
-
@retry(
|
|
281
|
-
stop=stop_after_attempt(3),
|
|
282
|
-
wait=wait_exponential(multiplier=1, min=2, max=10)
|
|
283
|
-
)
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
### 3. Circuit Breaker
|
|
287
|
-
|
|
288
|
-
```python
|
|
289
|
-
# Prevent cascading failures
|
|
290
|
-
@circuit(failure_threshold=5, recovery_timeout=60)
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
### 4. Health Checks
|
|
294
|
-
|
|
295
|
-
```python
|
|
296
|
-
async def health_check(service_url: str) -> bool:
|
|
297
|
-
"""Check service health."""
|
|
298
|
-
try:
|
|
299
|
-
response = await client.get(f"{service_url}/health")
|
|
300
|
-
return response.status_code == 200
|
|
301
|
-
except Exception:
|
|
302
|
-
return False
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
### 5. Service Discovery
|
|
306
|
-
|
|
307
|
-
- Use service registry (Consul, etcd)
|
|
308
|
-
- Implement client-side discovery
|
|
309
|
-
- Cache service locations
|
|
310
|
-
|
|
311
|
-
## References
|
|
312
|
-
|
|
313
|
-
- [gRPC Documentation](https://grpc.io/docs/)
|
|
314
|
-
- [Event-Driven Architecture](https://martinfowler.com/articles/201701-event-driven.html)
|
|
315
|
-
- [Service Communication Patterns](https://microservices.io/patterns/communication-style/)
|
|
316
|
-
|
|
1
|
+
# Service Communication Patterns
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This guide covers inter-service communication patterns for microservices architectures, including HTTP, gRPC, and event-driven communication.
|
|
6
|
+
|
|
7
|
+
## Communication Styles
|
|
8
|
+
|
|
9
|
+
### Synchronous Communication
|
|
10
|
+
|
|
11
|
+
**HTTP/REST:**
|
|
12
|
+
- Request-response pattern
|
|
13
|
+
- Simple to implement
|
|
14
|
+
- Can cause cascading failures
|
|
15
|
+
- Use for real-time queries
|
|
16
|
+
|
|
17
|
+
**gRPC:**
|
|
18
|
+
- High performance
|
|
19
|
+
- Type-safe
|
|
20
|
+
- Streaming support
|
|
21
|
+
- Use for internal services
|
|
22
|
+
|
|
23
|
+
### Asynchronous Communication
|
|
24
|
+
|
|
25
|
+
**Message Queues:**
|
|
26
|
+
- Decoupled services
|
|
27
|
+
- Better fault tolerance
|
|
28
|
+
- Eventual consistency
|
|
29
|
+
- Use for event processing
|
|
30
|
+
|
|
31
|
+
**Event Streaming:**
|
|
32
|
+
- Real-time event processing
|
|
33
|
+
- High throughput
|
|
34
|
+
- Use for analytics, logging
|
|
35
|
+
|
|
36
|
+
## HTTP/REST Patterns
|
|
37
|
+
|
|
38
|
+
### Pattern 1: Service Client with Retry
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
import httpx
|
|
42
|
+
from tenacity import retry, stop_after_attempt, wait_exponential
|
|
43
|
+
|
|
44
|
+
class ServiceClient:
|
|
45
|
+
def __init__(self, base_url: str, timeout: float = 30.0):
|
|
46
|
+
self.base_url = base_url
|
|
47
|
+
self.timeout = timeout
|
|
48
|
+
self.client = httpx.AsyncClient(timeout=timeout)
|
|
49
|
+
|
|
50
|
+
@retry(
|
|
51
|
+
stop=stop_after_attempt(3),
|
|
52
|
+
wait=wait_exponential(multiplier=1, min=2, max=10)
|
|
53
|
+
)
|
|
54
|
+
async def get(self, endpoint: str, params: dict = None):
|
|
55
|
+
"""GET request with retry."""
|
|
56
|
+
try:
|
|
57
|
+
response = await self.client.get(
|
|
58
|
+
f"{self.base_url}/{endpoint}",
|
|
59
|
+
params=params
|
|
60
|
+
)
|
|
61
|
+
response.raise_for_status()
|
|
62
|
+
return response.json()
|
|
63
|
+
except httpx.HTTPStatusError as e:
|
|
64
|
+
if e.response.status_code >= 500:
|
|
65
|
+
# Retry on server errors
|
|
66
|
+
raise
|
|
67
|
+
# Don't retry on client errors
|
|
68
|
+
raise
|
|
69
|
+
|
|
70
|
+
async def post(self, endpoint: str, data: dict):
|
|
71
|
+
"""POST request."""
|
|
72
|
+
response = await self.client.post(
|
|
73
|
+
f"{self.base_url}/{endpoint}",
|
|
74
|
+
json=data
|
|
75
|
+
)
|
|
76
|
+
response.raise_for_status()
|
|
77
|
+
return response.json()
|
|
78
|
+
|
|
79
|
+
async def close(self):
|
|
80
|
+
"""Close client."""
|
|
81
|
+
await self.client.aclose()
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Pattern 2: Service Discovery Integration
|
|
85
|
+
|
|
86
|
+
```python
|
|
87
|
+
class DiscoverableServiceClient:
|
|
88
|
+
def __init__(self, service_name: str, service_discovery):
|
|
89
|
+
self.service_name = service_name
|
|
90
|
+
self.discovery = service_discovery
|
|
91
|
+
self.client = httpx.AsyncClient()
|
|
92
|
+
|
|
93
|
+
async def get_service_url(self) -> str:
|
|
94
|
+
"""Get service URL from discovery."""
|
|
95
|
+
return await self.discovery.get_service_url(self.service_name)
|
|
96
|
+
|
|
97
|
+
async def request(self, method: str, endpoint: str, **kwargs):
|
|
98
|
+
"""Make request with service discovery."""
|
|
99
|
+
base_url = await self.get_service_url()
|
|
100
|
+
response = await self.client.request(
|
|
101
|
+
method,
|
|
102
|
+
f"{base_url}/{endpoint}",
|
|
103
|
+
**kwargs
|
|
104
|
+
)
|
|
105
|
+
response.raise_for_status()
|
|
106
|
+
return response.json()
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Pattern 3: Circuit Breaker Pattern
|
|
110
|
+
|
|
111
|
+
```python
|
|
112
|
+
from circuitbreaker import circuit
|
|
113
|
+
|
|
114
|
+
class ResilientServiceClient:
|
|
115
|
+
def __init__(self, base_url: str):
|
|
116
|
+
self.base_url = base_url
|
|
117
|
+
self.client = httpx.AsyncClient()
|
|
118
|
+
|
|
119
|
+
@circuit(failure_threshold=5, recovery_timeout=60)
|
|
120
|
+
async def call_service(self, endpoint: str):
|
|
121
|
+
"""Call service with circuit breaker."""
|
|
122
|
+
response = await self.client.get(f"{self.base_url}/{endpoint}")
|
|
123
|
+
response.raise_for_status()
|
|
124
|
+
return response.json()
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## gRPC Patterns
|
|
128
|
+
|
|
129
|
+
### Pattern 1: gRPC Client
|
|
130
|
+
|
|
131
|
+
```python
|
|
132
|
+
import grpc
|
|
133
|
+
from grpc import aio
|
|
134
|
+
|
|
135
|
+
class GRPCServiceClient:
|
|
136
|
+
def __init__(self, service_stub, server_address: str):
|
|
137
|
+
self.stub = service_stub
|
|
138
|
+
self.server_address = server_address
|
|
139
|
+
self.channel = None
|
|
140
|
+
|
|
141
|
+
async def connect(self):
|
|
142
|
+
"""Connect to gRPC server."""
|
|
143
|
+
self.channel = aio.insecure_channel(self.server_address)
|
|
144
|
+
self.stub = self.stub(self.channel)
|
|
145
|
+
|
|
146
|
+
async def call(self, method_name: str, request):
|
|
147
|
+
"""Call gRPC method."""
|
|
148
|
+
method = getattr(self.stub, method_name)
|
|
149
|
+
response = await method(request)
|
|
150
|
+
return response
|
|
151
|
+
|
|
152
|
+
async def close(self):
|
|
153
|
+
"""Close channel."""
|
|
154
|
+
if self.channel:
|
|
155
|
+
await self.channel.close()
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Pattern 2: gRPC Streaming
|
|
159
|
+
|
|
160
|
+
```python
|
|
161
|
+
async def stream_data(stub, request):
|
|
162
|
+
"""Stream data from gRPC service."""
|
|
163
|
+
async for response in stub.StreamData(request):
|
|
164
|
+
yield response
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Event-Driven Patterns
|
|
168
|
+
|
|
169
|
+
### Pattern 1: Event Publisher
|
|
170
|
+
|
|
171
|
+
```python
|
|
172
|
+
from pydantic import BaseModel
|
|
173
|
+
from typing import Any
|
|
174
|
+
|
|
175
|
+
class Event(BaseModel):
|
|
176
|
+
event_type: str
|
|
177
|
+
data: dict[str, Any]
|
|
178
|
+
timestamp: str
|
|
179
|
+
source: str
|
|
180
|
+
|
|
181
|
+
class EventPublisher:
|
|
182
|
+
def __init__(self, broker):
|
|
183
|
+
self.broker = broker
|
|
184
|
+
|
|
185
|
+
async def publish(self, event_type: str, data: dict, source: str):
|
|
186
|
+
"""Publish event."""
|
|
187
|
+
event = Event(
|
|
188
|
+
event_type=event_type,
|
|
189
|
+
data=data,
|
|
190
|
+
timestamp=datetime.utcnow().isoformat(),
|
|
191
|
+
source=source
|
|
192
|
+
)
|
|
193
|
+
await self.broker.publish(event_type, event.dict())
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Pattern 2: Event Subscriber
|
|
197
|
+
|
|
198
|
+
```python
|
|
199
|
+
class EventSubscriber:
|
|
200
|
+
def __init__(self, broker):
|
|
201
|
+
self.broker = broker
|
|
202
|
+
self.handlers = {}
|
|
203
|
+
|
|
204
|
+
def register_handler(self, event_type: str, handler):
|
|
205
|
+
"""Register event handler."""
|
|
206
|
+
self.handlers[event_type] = handler
|
|
207
|
+
|
|
208
|
+
async def subscribe(self, event_type: str):
|
|
209
|
+
"""Subscribe to event type."""
|
|
210
|
+
async for event in self.broker.subscribe(event_type):
|
|
211
|
+
if event_type in self.handlers:
|
|
212
|
+
await self.handlers[event_type](event)
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Pattern 3: Event Sourcing
|
|
216
|
+
|
|
217
|
+
```python
|
|
218
|
+
class EventStore:
|
|
219
|
+
def __init__(self, storage):
|
|
220
|
+
self.storage = storage
|
|
221
|
+
|
|
222
|
+
async def append(self, stream_id: str, events: list[Event]):
|
|
223
|
+
"""Append events to stream."""
|
|
224
|
+
await self.storage.append(stream_id, events)
|
|
225
|
+
|
|
226
|
+
async def get_stream(self, stream_id: str):
|
|
227
|
+
"""Get event stream."""
|
|
228
|
+
return await self.storage.get_stream(stream_id)
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## HomeIQ-Specific Patterns
|
|
232
|
+
|
|
233
|
+
### Pattern 1: Sensor Data Pipeline
|
|
234
|
+
|
|
235
|
+
```
|
|
236
|
+
Sensor → WebSocket Service → Event Bus → Processing Services → Storage
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Implementation:**
|
|
240
|
+
```python
|
|
241
|
+
# WebSocket service publishes events
|
|
242
|
+
await event_publisher.publish("sensor.data", {
|
|
243
|
+
"device_id": "sensor_001",
|
|
244
|
+
"value": 72.5,
|
|
245
|
+
"timestamp": "2026-01-15T10:30:00Z"
|
|
246
|
+
})
|
|
247
|
+
|
|
248
|
+
# Processing services subscribe
|
|
249
|
+
@event_subscriber.subscribe("sensor.data")
|
|
250
|
+
async def process_sensor_data(event):
|
|
251
|
+
# Process and store
|
|
252
|
+
await storage_service.store(event.data)
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Pattern 2: Service-to-Service Calls
|
|
256
|
+
|
|
257
|
+
```python
|
|
258
|
+
# Device service calls user service
|
|
259
|
+
user_client = ServiceClient("http://user-service:8000")
|
|
260
|
+
user = await user_client.get(f"/users/{user_id}")
|
|
261
|
+
|
|
262
|
+
# Device service calls sensor service
|
|
263
|
+
sensor_client = ServiceClient("http://sensor-service:8000")
|
|
264
|
+
sensors = await sensor_client.get(f"/devices/{device_id}/sensors")
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
## Best Practices
|
|
268
|
+
|
|
269
|
+
### 1. Timeout Configuration
|
|
270
|
+
|
|
271
|
+
```python
|
|
272
|
+
# Set appropriate timeouts
|
|
273
|
+
client = httpx.AsyncClient(timeout=30.0) # 30 seconds
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### 2. Retry Strategy
|
|
277
|
+
|
|
278
|
+
```python
|
|
279
|
+
# Exponential backoff
|
|
280
|
+
@retry(
|
|
281
|
+
stop=stop_after_attempt(3),
|
|
282
|
+
wait=wait_exponential(multiplier=1, min=2, max=10)
|
|
283
|
+
)
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### 3. Circuit Breaker
|
|
287
|
+
|
|
288
|
+
```python
|
|
289
|
+
# Prevent cascading failures
|
|
290
|
+
@circuit(failure_threshold=5, recovery_timeout=60)
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### 4. Health Checks
|
|
294
|
+
|
|
295
|
+
```python
|
|
296
|
+
async def health_check(service_url: str) -> bool:
|
|
297
|
+
"""Check service health."""
|
|
298
|
+
try:
|
|
299
|
+
response = await client.get(f"{service_url}/health")
|
|
300
|
+
return response.status_code == 200
|
|
301
|
+
except Exception:
|
|
302
|
+
return False
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### 5. Service Discovery
|
|
306
|
+
|
|
307
|
+
- Use service registry (Consul, etcd)
|
|
308
|
+
- Implement client-side discovery
|
|
309
|
+
- Cache service locations
|
|
310
|
+
|
|
311
|
+
## References
|
|
312
|
+
|
|
313
|
+
- [gRPC Documentation](https://grpc.io/docs/)
|
|
314
|
+
- [Event-Driven Architecture](https://martinfowler.com/articles/201701-event-driven.html)
|
|
315
|
+
- [Service Communication Patterns](https://microservices.io/patterns/communication-style/)
|
|
316
|
+
|