tapps-agents 3.6.0__py3-none-any.whl → 3.6.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tapps_agents/__init__.py +2 -2
- tapps_agents/agents/__init__.py +22 -22
- tapps_agents/agents/analyst/__init__.py +5 -5
- tapps_agents/agents/architect/__init__.py +5 -5
- tapps_agents/agents/architect/agent.py +1033 -1033
- tapps_agents/agents/architect/pattern_detector.py +75 -75
- tapps_agents/agents/cleanup/__init__.py +7 -7
- tapps_agents/agents/cleanup/agent.py +445 -445
- tapps_agents/agents/debugger/__init__.py +7 -7
- tapps_agents/agents/debugger/agent.py +310 -310
- tapps_agents/agents/debugger/error_analyzer.py +437 -437
- tapps_agents/agents/designer/__init__.py +5 -5
- tapps_agents/agents/designer/agent.py +786 -786
- tapps_agents/agents/designer/visual_designer.py +638 -638
- tapps_agents/agents/documenter/__init__.py +7 -7
- tapps_agents/agents/documenter/agent.py +531 -531
- tapps_agents/agents/documenter/doc_generator.py +472 -472
- tapps_agents/agents/documenter/doc_validator.py +393 -393
- tapps_agents/agents/documenter/framework_doc_updater.py +493 -493
- tapps_agents/agents/enhancer/__init__.py +7 -7
- tapps_agents/agents/evaluator/__init__.py +7 -7
- tapps_agents/agents/evaluator/agent.py +443 -443
- tapps_agents/agents/evaluator/priority_evaluator.py +641 -641
- tapps_agents/agents/evaluator/quality_analyzer.py +147 -147
- tapps_agents/agents/evaluator/report_generator.py +344 -344
- tapps_agents/agents/evaluator/usage_analyzer.py +192 -192
- tapps_agents/agents/evaluator/workflow_analyzer.py +189 -189
- tapps_agents/agents/implementer/__init__.py +7 -7
- tapps_agents/agents/implementer/agent.py +798 -798
- tapps_agents/agents/implementer/auto_fix.py +1119 -1119
- tapps_agents/agents/implementer/code_generator.py +73 -73
- tapps_agents/agents/improver/__init__.py +1 -1
- tapps_agents/agents/improver/agent.py +753 -753
- tapps_agents/agents/ops/__init__.py +1 -1
- tapps_agents/agents/ops/agent.py +619 -619
- tapps_agents/agents/ops/dependency_analyzer.py +600 -600
- tapps_agents/agents/orchestrator/__init__.py +5 -5
- tapps_agents/agents/orchestrator/agent.py +522 -522
- tapps_agents/agents/planner/__init__.py +7 -7
- tapps_agents/agents/planner/agent.py +1127 -1127
- tapps_agents/agents/reviewer/__init__.py +24 -24
- tapps_agents/agents/reviewer/agent.py +3513 -3513
- tapps_agents/agents/reviewer/aggregator.py +213 -213
- tapps_agents/agents/reviewer/batch_review.py +448 -448
- tapps_agents/agents/reviewer/cache.py +443 -443
- tapps_agents/agents/reviewer/context7_enhancer.py +630 -630
- tapps_agents/agents/reviewer/context_detector.py +203 -203
- tapps_agents/agents/reviewer/docker_compose_validator.py +158 -158
- tapps_agents/agents/reviewer/dockerfile_validator.py +176 -176
- tapps_agents/agents/reviewer/error_handling.py +126 -126
- tapps_agents/agents/reviewer/feedback_generator.py +490 -490
- tapps_agents/agents/reviewer/influxdb_validator.py +316 -316
- tapps_agents/agents/reviewer/issue_tracking.py +169 -169
- tapps_agents/agents/reviewer/library_detector.py +295 -295
- tapps_agents/agents/reviewer/library_patterns.py +268 -268
- tapps_agents/agents/reviewer/maintainability_scorer.py +593 -593
- tapps_agents/agents/reviewer/metric_strategies.py +276 -276
- tapps_agents/agents/reviewer/mqtt_validator.py +160 -160
- tapps_agents/agents/reviewer/output_enhancer.py +105 -105
- tapps_agents/agents/reviewer/pattern_detector.py +241 -241
- tapps_agents/agents/reviewer/performance_scorer.py +357 -357
- tapps_agents/agents/reviewer/phased_review.py +516 -516
- tapps_agents/agents/reviewer/progressive_review.py +435 -435
- tapps_agents/agents/reviewer/react_scorer.py +331 -331
- tapps_agents/agents/reviewer/score_constants.py +228 -228
- tapps_agents/agents/reviewer/score_validator.py +507 -507
- tapps_agents/agents/reviewer/scorer_registry.py +373 -373
- tapps_agents/agents/reviewer/service_discovery.py +534 -534
- tapps_agents/agents/reviewer/tools/parallel_executor.py +581 -581
- tapps_agents/agents/reviewer/tools/ruff_grouping.py +250 -250
- tapps_agents/agents/reviewer/tools/scoped_mypy.py +284 -284
- tapps_agents/agents/reviewer/typescript_scorer.py +1142 -1142
- tapps_agents/agents/reviewer/validation.py +208 -208
- tapps_agents/agents/reviewer/websocket_validator.py +132 -132
- tapps_agents/agents/tester/__init__.py +7 -7
- tapps_agents/agents/tester/accessibility_auditor.py +309 -309
- tapps_agents/agents/tester/agent.py +1080 -1080
- tapps_agents/agents/tester/batch_generator.py +54 -54
- tapps_agents/agents/tester/context_learner.py +51 -51
- tapps_agents/agents/tester/coverage_analyzer.py +386 -386
- tapps_agents/agents/tester/coverage_test_generator.py +290 -290
- tapps_agents/agents/tester/debug_enhancer.py +238 -238
- tapps_agents/agents/tester/device_emulator.py +241 -241
- tapps_agents/agents/tester/integration_generator.py +62 -62
- tapps_agents/agents/tester/network_recorder.py +300 -300
- tapps_agents/agents/tester/performance_monitor.py +320 -320
- tapps_agents/agents/tester/test_fixer.py +316 -316
- tapps_agents/agents/tester/test_generator.py +632 -632
- tapps_agents/agents/tester/trace_manager.py +234 -234
- tapps_agents/agents/tester/visual_regression.py +291 -291
- tapps_agents/analysis/pattern_detector.py +36 -36
- tapps_agents/beads/hydration.py +213 -213
- tapps_agents/beads/parse.py +32 -32
- tapps_agents/beads/specs.py +206 -206
- tapps_agents/cli/__init__.py +9 -9
- tapps_agents/cli/__main__.py +8 -8
- tapps_agents/cli/base.py +478 -478
- tapps_agents/cli/command_classifier.py +72 -72
- tapps_agents/cli/commands/__init__.py +2 -2
- tapps_agents/cli/commands/analyst.py +173 -173
- tapps_agents/cli/commands/architect.py +109 -109
- tapps_agents/cli/commands/cleanup_agent.py +92 -92
- tapps_agents/cli/commands/common.py +126 -126
- tapps_agents/cli/commands/debugger.py +90 -90
- tapps_agents/cli/commands/designer.py +112 -112
- tapps_agents/cli/commands/documenter.py +136 -136
- tapps_agents/cli/commands/enhancer.py +110 -110
- tapps_agents/cli/commands/evaluator.py +255 -255
- tapps_agents/cli/commands/implementer.py +301 -301
- tapps_agents/cli/commands/improver.py +91 -91
- tapps_agents/cli/commands/knowledge.py +111 -111
- tapps_agents/cli/commands/learning.py +172 -172
- tapps_agents/cli/commands/observability.py +283 -283
- tapps_agents/cli/commands/ops.py +135 -135
- tapps_agents/cli/commands/orchestrator.py +116 -116
- tapps_agents/cli/commands/planner.py +237 -237
- tapps_agents/cli/commands/reviewer.py +1872 -1872
- tapps_agents/cli/commands/status.py +285 -285
- tapps_agents/cli/commands/task.py +227 -227
- tapps_agents/cli/commands/tester.py +191 -191
- tapps_agents/cli/feedback.py +936 -936
- tapps_agents/cli/formatters.py +608 -608
- tapps_agents/cli/help/__init__.py +7 -7
- tapps_agents/cli/help/static_help.py +425 -425
- tapps_agents/cli/network_detection.py +110 -110
- tapps_agents/cli/output_compactor.py +274 -274
- tapps_agents/cli/parsers/__init__.py +2 -2
- tapps_agents/cli/parsers/analyst.py +186 -186
- tapps_agents/cli/parsers/architect.py +167 -167
- tapps_agents/cli/parsers/cleanup_agent.py +228 -228
- tapps_agents/cli/parsers/debugger.py +116 -116
- tapps_agents/cli/parsers/designer.py +182 -182
- tapps_agents/cli/parsers/documenter.py +134 -134
- tapps_agents/cli/parsers/enhancer.py +113 -113
- tapps_agents/cli/parsers/evaluator.py +213 -213
- tapps_agents/cli/parsers/implementer.py +168 -168
- tapps_agents/cli/parsers/improver.py +132 -132
- tapps_agents/cli/parsers/ops.py +159 -159
- tapps_agents/cli/parsers/orchestrator.py +98 -98
- tapps_agents/cli/parsers/planner.py +145 -145
- tapps_agents/cli/parsers/reviewer.py +462 -462
- tapps_agents/cli/parsers/tester.py +124 -124
- tapps_agents/cli/progress_heartbeat.py +254 -254
- tapps_agents/cli/streaming_progress.py +336 -336
- tapps_agents/cli/utils/__init__.py +6 -6
- tapps_agents/cli/utils/agent_lifecycle.py +48 -48
- tapps_agents/cli/utils/error_formatter.py +82 -82
- tapps_agents/cli/utils/error_recovery.py +188 -188
- tapps_agents/cli/utils/output_handler.py +59 -59
- tapps_agents/cli/utils/prompt_enhancer.py +319 -319
- tapps_agents/cli/validators/__init__.py +9 -9
- tapps_agents/cli/validators/command_validator.py +81 -81
- tapps_agents/context7/__init__.py +112 -112
- tapps_agents/context7/agent_integration.py +869 -869
- tapps_agents/context7/analytics.py +382 -382
- tapps_agents/context7/analytics_dashboard.py +299 -299
- tapps_agents/context7/async_cache.py +681 -681
- tapps_agents/context7/backup_client.py +958 -958
- tapps_agents/context7/cache_locking.py +194 -194
- tapps_agents/context7/cache_metadata.py +214 -214
- tapps_agents/context7/cache_prewarm.py +488 -488
- tapps_agents/context7/cache_structure.py +168 -168
- tapps_agents/context7/cache_warming.py +604 -604
- tapps_agents/context7/circuit_breaker.py +376 -376
- tapps_agents/context7/cleanup.py +461 -461
- tapps_agents/context7/commands.py +858 -858
- tapps_agents/context7/credential_validation.py +276 -276
- tapps_agents/context7/cross_reference_resolver.py +168 -168
- tapps_agents/context7/cross_references.py +424 -424
- tapps_agents/context7/doc_manager.py +225 -225
- tapps_agents/context7/fuzzy_matcher.py +369 -369
- tapps_agents/context7/kb_cache.py +404 -404
- tapps_agents/context7/language_detector.py +219 -219
- tapps_agents/context7/library_detector.py +725 -725
- tapps_agents/context7/lookup.py +738 -738
- tapps_agents/context7/metadata.py +258 -258
- tapps_agents/context7/refresh_queue.py +300 -300
- tapps_agents/context7/security.py +373 -373
- tapps_agents/context7/staleness_policies.py +278 -278
- tapps_agents/context7/tiles_integration.py +47 -47
- tapps_agents/continuous_bug_fix/__init__.py +20 -20
- tapps_agents/continuous_bug_fix/bug_finder.py +306 -306
- tapps_agents/continuous_bug_fix/bug_fix_coordinator.py +177 -177
- tapps_agents/continuous_bug_fix/commit_manager.py +178 -178
- tapps_agents/continuous_bug_fix/continuous_bug_fixer.py +322 -322
- tapps_agents/continuous_bug_fix/proactive_bug_finder.py +285 -285
- tapps_agents/core/__init__.py +298 -298
- tapps_agents/core/adaptive_cache_config.py +432 -432
- tapps_agents/core/agent_base.py +647 -647
- tapps_agents/core/agent_cache.py +466 -466
- tapps_agents/core/agent_learning.py +1865 -1865
- tapps_agents/core/analytics_dashboard.py +563 -563
- tapps_agents/core/analytics_enhancements.py +597 -597
- tapps_agents/core/anonymization.py +274 -274
- tapps_agents/core/ast_parser.py +228 -228
- tapps_agents/core/async_file_ops.py +402 -402
- tapps_agents/core/best_practice_consultant.py +299 -299
- tapps_agents/core/brownfield_analyzer.py +299 -299
- tapps_agents/core/brownfield_review.py +541 -541
- tapps_agents/core/browser_controller.py +513 -513
- tapps_agents/core/capability_registry.py +418 -418
- tapps_agents/core/change_impact_analyzer.py +190 -190
- tapps_agents/core/checkpoint_manager.py +377 -377
- tapps_agents/core/code_generator.py +329 -329
- tapps_agents/core/code_validator.py +276 -276
- tapps_agents/core/command_registry.py +327 -327
- tapps_agents/core/context_gathering/__init__.py +2 -2
- tapps_agents/core/context_gathering/repository_explorer.py +28 -28
- tapps_agents/core/context_intelligence/__init__.py +2 -2
- tapps_agents/core/context_intelligence/relevance_scorer.py +24 -24
- tapps_agents/core/context_intelligence/token_budget_manager.py +27 -27
- tapps_agents/core/context_manager.py +240 -240
- tapps_agents/core/cursor_feedback_monitor.py +146 -146
- tapps_agents/core/cursor_verification.py +290 -290
- tapps_agents/core/customization_loader.py +280 -280
- tapps_agents/core/customization_schema.py +260 -260
- tapps_agents/core/customization_template.py +238 -238
- tapps_agents/core/debug_logger.py +124 -124
- tapps_agents/core/design_validator.py +298 -298
- tapps_agents/core/diagram_generator.py +226 -226
- tapps_agents/core/docker_utils.py +232 -232
- tapps_agents/core/document_generator.py +617 -617
- tapps_agents/core/domain_detector.py +30 -30
- tapps_agents/core/error_envelope.py +454 -454
- tapps_agents/core/error_handler.py +270 -270
- tapps_agents/core/estimation_tracker.py +189 -189
- tapps_agents/core/eval_prompt_engine.py +116 -116
- tapps_agents/core/evaluation_base.py +119 -119
- tapps_agents/core/evaluation_models.py +320 -320
- tapps_agents/core/evaluation_orchestrator.py +225 -225
- tapps_agents/core/evaluators/__init__.py +7 -7
- tapps_agents/core/evaluators/architectural_evaluator.py +205 -205
- tapps_agents/core/evaluators/behavioral_evaluator.py +160 -160
- tapps_agents/core/evaluators/performance_profile_evaluator.py +160 -160
- tapps_agents/core/evaluators/security_posture_evaluator.py +148 -148
- tapps_agents/core/evaluators/spec_compliance_evaluator.py +181 -181
- tapps_agents/core/exceptions.py +107 -107
- tapps_agents/core/expert_config_generator.py +293 -293
- tapps_agents/core/export_schema.py +202 -202
- tapps_agents/core/external_feedback_models.py +102 -102
- tapps_agents/core/external_feedback_storage.py +213 -213
- tapps_agents/core/fallback_strategy.py +314 -314
- tapps_agents/core/feedback_analyzer.py +162 -162
- tapps_agents/core/feedback_collector.py +178 -178
- tapps_agents/core/git_operations.py +445 -445
- tapps_agents/core/hardware_profiler.py +151 -151
- tapps_agents/core/instructions.py +324 -324
- tapps_agents/core/io_guardrails.py +69 -69
- tapps_agents/core/issue_manifest.py +249 -249
- tapps_agents/core/issue_schema.py +139 -139
- tapps_agents/core/json_utils.py +128 -128
- tapps_agents/core/knowledge_graph.py +446 -446
- tapps_agents/core/language_detector.py +296 -296
- tapps_agents/core/learning_confidence.py +242 -242
- tapps_agents/core/learning_dashboard.py +246 -246
- tapps_agents/core/learning_decision.py +384 -384
- tapps_agents/core/learning_explainability.py +578 -578
- tapps_agents/core/learning_export.py +287 -287
- tapps_agents/core/learning_integration.py +228 -228
- tapps_agents/core/llm_behavior.py +232 -232
- tapps_agents/core/long_duration_support.py +786 -786
- tapps_agents/core/mcp_setup.py +106 -106
- tapps_agents/core/memory_integration.py +396 -396
- tapps_agents/core/meta_learning.py +666 -666
- tapps_agents/core/module_path_sanitizer.py +199 -199
- tapps_agents/core/multi_agent_orchestrator.py +382 -382
- tapps_agents/core/network_errors.py +125 -125
- tapps_agents/core/nfr_validator.py +336 -336
- tapps_agents/core/offline_mode.py +158 -158
- tapps_agents/core/output_contracts.py +300 -300
- tapps_agents/core/output_formatter.py +300 -300
- tapps_agents/core/path_normalizer.py +174 -174
- tapps_agents/core/path_validator.py +322 -322
- tapps_agents/core/pattern_library.py +250 -250
- tapps_agents/core/performance_benchmark.py +301 -301
- tapps_agents/core/performance_monitor.py +184 -184
- tapps_agents/core/playwright_mcp_controller.py +771 -771
- tapps_agents/core/policy_loader.py +135 -135
- tapps_agents/core/progress.py +166 -166
- tapps_agents/core/project_profile.py +354 -354
- tapps_agents/core/project_type_detector.py +454 -454
- tapps_agents/core/prompt_base.py +223 -223
- tapps_agents/core/prompt_learning/__init__.py +2 -2
- tapps_agents/core/prompt_learning/learning_loop.py +24 -24
- tapps_agents/core/prompt_learning/project_prompt_store.py +25 -25
- tapps_agents/core/prompt_learning/skills_prompt_analyzer.py +35 -35
- tapps_agents/core/prompt_optimization/__init__.py +6 -6
- tapps_agents/core/prompt_optimization/ab_tester.py +114 -114
- tapps_agents/core/prompt_optimization/correlation_analyzer.py +160 -160
- tapps_agents/core/prompt_optimization/progressive_refiner.py +129 -129
- tapps_agents/core/prompt_optimization/prompt_library.py +37 -37
- tapps_agents/core/requirements_evaluator.py +431 -431
- tapps_agents/core/resource_aware_executor.py +449 -449
- tapps_agents/core/resource_monitor.py +343 -343
- tapps_agents/core/resume_handler.py +298 -298
- tapps_agents/core/retry_handler.py +197 -197
- tapps_agents/core/review_checklists.py +479 -479
- tapps_agents/core/role_loader.py +201 -201
- tapps_agents/core/role_template_loader.py +201 -201
- tapps_agents/core/runtime_mode.py +60 -60
- tapps_agents/core/security_scanner.py +342 -342
- tapps_agents/core/skill_agent_registry.py +194 -194
- tapps_agents/core/skill_integration.py +208 -208
- tapps_agents/core/skill_loader.py +492 -492
- tapps_agents/core/skill_template.py +341 -341
- tapps_agents/core/skill_validator.py +478 -478
- tapps_agents/core/stack_analyzer.py +35 -35
- tapps_agents/core/startup.py +174 -174
- tapps_agents/core/storage_manager.py +397 -397
- tapps_agents/core/storage_models.py +166 -166
- tapps_agents/core/story_evaluator.py +410 -410
- tapps_agents/core/subprocess_utils.py +170 -170
- tapps_agents/core/task_duration.py +296 -296
- tapps_agents/core/task_memory.py +582 -582
- tapps_agents/core/task_state.py +226 -226
- tapps_agents/core/tech_stack_priorities.py +208 -208
- tapps_agents/core/temp_directory.py +194 -194
- tapps_agents/core/template_merger.py +600 -600
- tapps_agents/core/template_selector.py +280 -280
- tapps_agents/core/test_generator.py +286 -286
- tapps_agents/core/tiered_context.py +253 -253
- tapps_agents/core/token_monitor.py +345 -345
- tapps_agents/core/traceability.py +254 -254
- tapps_agents/core/trajectory_tracker.py +50 -50
- tapps_agents/core/unicode_safe.py +143 -143
- tapps_agents/core/unified_cache_config.py +170 -170
- tapps_agents/core/unified_state.py +324 -324
- tapps_agents/core/validate_cursor_setup.py +237 -237
- tapps_agents/core/validation_registry.py +136 -136
- tapps_agents/core/validators/__init__.py +4 -4
- tapps_agents/core/validators/python_validator.py +87 -87
- tapps_agents/core/verification_agent.py +90 -90
- tapps_agents/core/visual_feedback.py +644 -644
- tapps_agents/core/workflow_validator.py +197 -197
- tapps_agents/core/worktree.py +367 -367
- tapps_agents/docker/__init__.py +10 -10
- tapps_agents/docker/analyzer.py +186 -186
- tapps_agents/docker/debugger.py +229 -229
- tapps_agents/docker/error_patterns.py +216 -216
- tapps_agents/epic/__init__.py +22 -22
- tapps_agents/epic/beads_sync.py +115 -115
- tapps_agents/epic/markdown_sync.py +105 -105
- tapps_agents/epic/models.py +96 -96
- tapps_agents/experts/__init__.py +163 -163
- tapps_agents/experts/agent_integration.py +243 -243
- tapps_agents/experts/auto_generator.py +331 -331
- tapps_agents/experts/base_expert.py +536 -536
- tapps_agents/experts/builtin_registry.py +261 -261
- tapps_agents/experts/business_metrics.py +565 -565
- tapps_agents/experts/cache.py +266 -266
- tapps_agents/experts/confidence_breakdown.py +306 -306
- tapps_agents/experts/confidence_calculator.py +336 -336
- tapps_agents/experts/confidence_metrics.py +236 -236
- tapps_agents/experts/domain_config.py +311 -311
- tapps_agents/experts/domain_detector.py +550 -550
- tapps_agents/experts/domain_utils.py +84 -84
- tapps_agents/experts/expert_config.py +113 -113
- tapps_agents/experts/expert_engine.py +465 -465
- tapps_agents/experts/expert_registry.py +744 -744
- tapps_agents/experts/expert_synthesizer.py +70 -70
- tapps_agents/experts/governance.py +197 -197
- tapps_agents/experts/history_logger.py +312 -312
- tapps_agents/experts/knowledge/README.md +180 -180
- tapps_agents/experts/knowledge/accessibility/accessible-forms.md +331 -331
- tapps_agents/experts/knowledge/accessibility/aria-patterns.md +344 -344
- tapps_agents/experts/knowledge/accessibility/color-contrast.md +285 -285
- tapps_agents/experts/knowledge/accessibility/keyboard-navigation.md +332 -332
- tapps_agents/experts/knowledge/accessibility/screen-readers.md +282 -282
- tapps_agents/experts/knowledge/accessibility/semantic-html.md +355 -355
- tapps_agents/experts/knowledge/accessibility/testing-accessibility.md +369 -369
- tapps_agents/experts/knowledge/accessibility/wcag-2.1.md +296 -296
- tapps_agents/experts/knowledge/accessibility/wcag-2.2.md +211 -211
- tapps_agents/experts/knowledge/agent-learning/best-practices.md +715 -715
- tapps_agents/experts/knowledge/agent-learning/pattern-extraction.md +282 -282
- tapps_agents/experts/knowledge/agent-learning/prompt-optimization.md +320 -320
- tapps_agents/experts/knowledge/ai-frameworks/model-optimization.md +90 -90
- tapps_agents/experts/knowledge/ai-frameworks/openvino-patterns.md +260 -260
- tapps_agents/experts/knowledge/api-design-integration/api-gateway-patterns.md +309 -309
- tapps_agents/experts/knowledge/api-design-integration/api-security-patterns.md +521 -521
- tapps_agents/experts/knowledge/api-design-integration/api-versioning.md +421 -421
- tapps_agents/experts/knowledge/api-design-integration/async-protocol-patterns.md +61 -61
- tapps_agents/experts/knowledge/api-design-integration/contract-testing.md +221 -221
- tapps_agents/experts/knowledge/api-design-integration/external-api-integration.md +489 -489
- tapps_agents/experts/knowledge/api-design-integration/fastapi-patterns.md +360 -360
- tapps_agents/experts/knowledge/api-design-integration/fastapi-testing.md +262 -262
- tapps_agents/experts/knowledge/api-design-integration/graphql-patterns.md +582 -582
- tapps_agents/experts/knowledge/api-design-integration/grpc-best-practices.md +499 -499
- tapps_agents/experts/knowledge/api-design-integration/mqtt-patterns.md +455 -455
- tapps_agents/experts/knowledge/api-design-integration/rate-limiting.md +507 -507
- tapps_agents/experts/knowledge/api-design-integration/restful-api-design.md +618 -618
- tapps_agents/experts/knowledge/api-design-integration/websocket-patterns.md +480 -480
- tapps_agents/experts/knowledge/cloud-infrastructure/cloud-native-patterns.md +175 -175
- tapps_agents/experts/knowledge/cloud-infrastructure/container-health-checks.md +261 -261
- tapps_agents/experts/knowledge/cloud-infrastructure/containerization.md +222 -222
- tapps_agents/experts/knowledge/cloud-infrastructure/cost-optimization.md +122 -122
- tapps_agents/experts/knowledge/cloud-infrastructure/disaster-recovery.md +153 -153
- tapps_agents/experts/knowledge/cloud-infrastructure/dockerfile-patterns.md +285 -285
- tapps_agents/experts/knowledge/cloud-infrastructure/infrastructure-as-code.md +187 -187
- tapps_agents/experts/knowledge/cloud-infrastructure/kubernetes-patterns.md +253 -253
- tapps_agents/experts/knowledge/cloud-infrastructure/multi-cloud-strategies.md +155 -155
- tapps_agents/experts/knowledge/cloud-infrastructure/serverless-architecture.md +200 -200
- tapps_agents/experts/knowledge/code-quality-analysis/README.md +16 -16
- tapps_agents/experts/knowledge/code-quality-analysis/code-metrics.md +137 -137
- tapps_agents/experts/knowledge/code-quality-analysis/complexity-analysis.md +181 -181
- tapps_agents/experts/knowledge/code-quality-analysis/technical-debt-patterns.md +191 -191
- tapps_agents/experts/knowledge/data-privacy-compliance/anonymization.md +313 -313
- tapps_agents/experts/knowledge/data-privacy-compliance/ccpa.md +255 -255
- tapps_agents/experts/knowledge/data-privacy-compliance/consent-management.md +282 -282
- tapps_agents/experts/knowledge/data-privacy-compliance/data-minimization.md +275 -275
- tapps_agents/experts/knowledge/data-privacy-compliance/data-retention.md +297 -297
- tapps_agents/experts/knowledge/data-privacy-compliance/data-subject-rights.md +383 -383
- tapps_agents/experts/knowledge/data-privacy-compliance/encryption-privacy.md +285 -285
- tapps_agents/experts/knowledge/data-privacy-compliance/gdpr.md +344 -344
- tapps_agents/experts/knowledge/data-privacy-compliance/hipaa.md +385 -385
- tapps_agents/experts/knowledge/data-privacy-compliance/privacy-by-design.md +280 -280
- tapps_agents/experts/knowledge/database-data-management/acid-vs-cap.md +164 -164
- tapps_agents/experts/knowledge/database-data-management/backup-and-recovery.md +182 -182
- tapps_agents/experts/knowledge/database-data-management/data-modeling.md +172 -172
- tapps_agents/experts/knowledge/database-data-management/database-design.md +187 -187
- tapps_agents/experts/knowledge/database-data-management/flux-query-optimization.md +342 -342
- tapps_agents/experts/knowledge/database-data-management/influxdb-connection-patterns.md +432 -432
- tapps_agents/experts/knowledge/database-data-management/influxdb-patterns.md +442 -442
- tapps_agents/experts/knowledge/database-data-management/migration-strategies.md +216 -216
- tapps_agents/experts/knowledge/database-data-management/nosql-patterns.md +259 -259
- tapps_agents/experts/knowledge/database-data-management/scalability-patterns.md +184 -184
- tapps_agents/experts/knowledge/database-data-management/sql-optimization.md +175 -175
- tapps_agents/experts/knowledge/database-data-management/time-series-modeling.md +444 -444
- tapps_agents/experts/knowledge/development-workflow/README.md +16 -16
- tapps_agents/experts/knowledge/development-workflow/automation-best-practices.md +216 -216
- tapps_agents/experts/knowledge/development-workflow/build-strategies.md +198 -198
- tapps_agents/experts/knowledge/development-workflow/deployment-patterns.md +205 -205
- tapps_agents/experts/knowledge/development-workflow/git-workflows.md +205 -205
- tapps_agents/experts/knowledge/documentation-knowledge-management/README.md +16 -16
- tapps_agents/experts/knowledge/documentation-knowledge-management/api-documentation-patterns.md +231 -231
- tapps_agents/experts/knowledge/documentation-knowledge-management/documentation-standards.md +191 -191
- tapps_agents/experts/knowledge/documentation-knowledge-management/knowledge-management.md +171 -171
- tapps_agents/experts/knowledge/documentation-knowledge-management/technical-writing-guide.md +192 -192
- tapps_agents/experts/knowledge/observability-monitoring/alerting-patterns.md +461 -461
- tapps_agents/experts/knowledge/observability-monitoring/apm-tools.md +459 -459
- tapps_agents/experts/knowledge/observability-monitoring/distributed-tracing.md +367 -367
- tapps_agents/experts/knowledge/observability-monitoring/logging-strategies.md +478 -478
- tapps_agents/experts/knowledge/observability-monitoring/metrics-and-monitoring.md +510 -510
- tapps_agents/experts/knowledge/observability-monitoring/observability-best-practices.md +492 -492
- tapps_agents/experts/knowledge/observability-monitoring/open-telemetry.md +573 -573
- tapps_agents/experts/knowledge/observability-monitoring/slo-sli-sla.md +419 -419
- tapps_agents/experts/knowledge/performance/anti-patterns.md +284 -284
- tapps_agents/experts/knowledge/performance/api-performance.md +256 -256
- tapps_agents/experts/knowledge/performance/caching.md +327 -327
- tapps_agents/experts/knowledge/performance/database-performance.md +252 -252
- tapps_agents/experts/knowledge/performance/optimization-patterns.md +327 -327
- tapps_agents/experts/knowledge/performance/profiling.md +297 -297
- tapps_agents/experts/knowledge/performance/resource-management.md +293 -293
- tapps_agents/experts/knowledge/performance/scalability.md +306 -306
- tapps_agents/experts/knowledge/security/owasp-top10.md +209 -209
- tapps_agents/experts/knowledge/security/secure-coding-practices.md +207 -207
- tapps_agents/experts/knowledge/security/threat-modeling.md +220 -220
- tapps_agents/experts/knowledge/security/vulnerability-patterns.md +342 -342
- tapps_agents/experts/knowledge/software-architecture/docker-compose-patterns.md +314 -314
- tapps_agents/experts/knowledge/software-architecture/microservices-patterns.md +379 -379
- tapps_agents/experts/knowledge/software-architecture/service-communication.md +316 -316
- tapps_agents/experts/knowledge/testing/best-practices.md +310 -310
- tapps_agents/experts/knowledge/testing/coverage-analysis.md +293 -293
- tapps_agents/experts/knowledge/testing/mocking.md +256 -256
- tapps_agents/experts/knowledge/testing/test-automation.md +276 -276
- tapps_agents/experts/knowledge/testing/test-data.md +271 -271
- tapps_agents/experts/knowledge/testing/test-design-patterns.md +280 -280
- tapps_agents/experts/knowledge/testing/test-maintenance.md +236 -236
- tapps_agents/experts/knowledge/testing/test-strategies.md +311 -311
- tapps_agents/experts/knowledge/user-experience/information-architecture.md +325 -325
- tapps_agents/experts/knowledge/user-experience/interaction-design.md +363 -363
- tapps_agents/experts/knowledge/user-experience/prototyping.md +293 -293
- tapps_agents/experts/knowledge/user-experience/usability-heuristics.md +337 -337
- tapps_agents/experts/knowledge/user-experience/usability-testing.md +311 -311
- tapps_agents/experts/knowledge/user-experience/user-journeys.md +296 -296
- tapps_agents/experts/knowledge/user-experience/user-research.md +373 -373
- tapps_agents/experts/knowledge/user-experience/ux-principles.md +340 -340
- tapps_agents/experts/knowledge_freshness.py +321 -321
- tapps_agents/experts/knowledge_ingestion.py +438 -438
- tapps_agents/experts/knowledge_need_detector.py +93 -93
- tapps_agents/experts/knowledge_validator.py +382 -382
- tapps_agents/experts/observability.py +440 -440
- tapps_agents/experts/passive_notifier.py +238 -238
- tapps_agents/experts/proactive_orchestrator.py +32 -32
- tapps_agents/experts/rag_chunker.py +205 -205
- tapps_agents/experts/rag_embedder.py +152 -152
- tapps_agents/experts/rag_evaluation.py +299 -299
- tapps_agents/experts/rag_index.py +303 -303
- tapps_agents/experts/rag_metrics.py +293 -293
- tapps_agents/experts/rag_safety.py +263 -263
- tapps_agents/experts/report_generator.py +296 -296
- tapps_agents/experts/setup_wizard.py +441 -441
- tapps_agents/experts/simple_rag.py +431 -431
- tapps_agents/experts/vector_rag.py +354 -354
- tapps_agents/experts/weight_distributor.py +304 -304
- tapps_agents/health/__init__.py +24 -24
- tapps_agents/health/base.py +75 -75
- tapps_agents/health/checks/__init__.py +22 -22
- tapps_agents/health/checks/automation.py +127 -127
- tapps_agents/health/checks/context7_cache.py +210 -210
- tapps_agents/health/checks/environment.py +116 -116
- tapps_agents/health/checks/execution.py +170 -170
- tapps_agents/health/checks/knowledge_base.py +187 -187
- tapps_agents/health/checks/outcomes.backup_20260204_064058.py +324 -0
- tapps_agents/health/checks/outcomes.backup_20260204_064256.py +324 -0
- tapps_agents/health/checks/outcomes.backup_20260204_064600.py +324 -0
- tapps_agents/health/checks/outcomes.py +324 -324
- tapps_agents/health/collector.py +280 -280
- tapps_agents/health/dashboard.py +137 -137
- tapps_agents/health/metrics.py +151 -151
- tapps_agents/health/registry.py +166 -166
- tapps_agents/hooks/__init__.py +33 -33
- tapps_agents/hooks/config.py +140 -140
- tapps_agents/hooks/events.py +135 -135
- tapps_agents/hooks/executor.py +128 -128
- tapps_agents/hooks/manager.py +143 -143
- tapps_agents/integration/__init__.py +8 -8
- tapps_agents/integration/service_integrator.py +121 -121
- tapps_agents/integrations/__init__.py +10 -10
- tapps_agents/integrations/clawdbot.py +525 -525
- tapps_agents/integrations/memory_bridge.py +356 -356
- tapps_agents/mcp/__init__.py +18 -18
- tapps_agents/mcp/gateway.py +112 -112
- tapps_agents/mcp/servers/__init__.py +13 -13
- tapps_agents/mcp/servers/analysis.py +204 -204
- tapps_agents/mcp/servers/context7.py +198 -198
- tapps_agents/mcp/servers/filesystem.py +218 -218
- tapps_agents/mcp/servers/git.py +201 -201
- tapps_agents/mcp/tool_registry.py +115 -115
- tapps_agents/quality/__init__.py +54 -54
- tapps_agents/quality/coverage_analyzer.py +379 -379
- tapps_agents/quality/enforcement.py +82 -82
- tapps_agents/quality/gates/__init__.py +37 -37
- tapps_agents/quality/gates/approval_gate.py +255 -255
- tapps_agents/quality/gates/base.py +84 -84
- tapps_agents/quality/gates/exceptions.py +43 -43
- tapps_agents/quality/gates/policy_gate.py +195 -195
- tapps_agents/quality/gates/registry.py +239 -239
- tapps_agents/quality/gates/security_gate.py +156 -156
- tapps_agents/quality/quality_gates.py +369 -369
- tapps_agents/quality/secret_scanner.py +335 -335
- tapps_agents/resources/__init__.py +5 -0
- tapps_agents/resources/claude/__init__.py +1 -0
- tapps_agents/resources/claude/commands/README.md +156 -0
- tapps_agents/resources/claude/commands/__init__.py +1 -0
- tapps_agents/resources/claude/commands/build-fix.md +22 -0
- tapps_agents/resources/claude/commands/build.md +77 -0
- tapps_agents/resources/claude/commands/debug.md +53 -0
- tapps_agents/resources/claude/commands/design.md +68 -0
- tapps_agents/resources/claude/commands/docs.md +53 -0
- tapps_agents/resources/claude/commands/e2e.md +22 -0
- tapps_agents/resources/claude/commands/fix.md +54 -0
- tapps_agents/resources/claude/commands/implement.md +53 -0
- tapps_agents/resources/claude/commands/improve.md +53 -0
- tapps_agents/resources/claude/commands/library-docs.md +64 -0
- tapps_agents/resources/claude/commands/lint.md +52 -0
- tapps_agents/resources/claude/commands/plan.md +65 -0
- tapps_agents/resources/claude/commands/refactor-clean.md +21 -0
- tapps_agents/resources/claude/commands/refactor.md +55 -0
- tapps_agents/resources/claude/commands/review.md +67 -0
- tapps_agents/resources/claude/commands/score.md +60 -0
- tapps_agents/resources/claude/commands/security-review.md +22 -0
- tapps_agents/resources/claude/commands/security-scan.md +54 -0
- tapps_agents/resources/claude/commands/tdd.md +24 -0
- tapps_agents/resources/claude/commands/test-coverage.md +21 -0
- tapps_agents/resources/claude/commands/test.md +54 -0
- tapps_agents/resources/claude/commands/update-codemaps.md +20 -0
- tapps_agents/resources/claude/commands/update-docs.md +21 -0
- tapps_agents/resources/claude/skills/__init__.py +1 -0
- tapps_agents/resources/claude/skills/analyst/SKILL.md +272 -0
- tapps_agents/resources/claude/skills/analyst/__init__.py +1 -0
- tapps_agents/resources/claude/skills/architect/SKILL.md +282 -0
- tapps_agents/resources/claude/skills/architect/__init__.py +1 -0
- tapps_agents/resources/claude/skills/backend-patterns/SKILL.md +30 -0
- tapps_agents/resources/claude/skills/backend-patterns/__init__.py +1 -0
- tapps_agents/resources/claude/skills/coding-standards/SKILL.md +29 -0
- tapps_agents/resources/claude/skills/coding-standards/__init__.py +1 -0
- tapps_agents/resources/claude/skills/debugger/SKILL.md +203 -0
- tapps_agents/resources/claude/skills/debugger/__init__.py +1 -0
- tapps_agents/resources/claude/skills/designer/SKILL.md +243 -0
- tapps_agents/resources/claude/skills/designer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/documenter/SKILL.md +252 -0
- tapps_agents/resources/claude/skills/documenter/__init__.py +1 -0
- tapps_agents/resources/claude/skills/enhancer/SKILL.md +307 -0
- tapps_agents/resources/claude/skills/enhancer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/evaluator/SKILL.md +204 -0
- tapps_agents/resources/claude/skills/evaluator/__init__.py +1 -0
- tapps_agents/resources/claude/skills/frontend-patterns/SKILL.md +29 -0
- tapps_agents/resources/claude/skills/frontend-patterns/__init__.py +1 -0
- tapps_agents/resources/claude/skills/implementer/SKILL.md +188 -0
- tapps_agents/resources/claude/skills/implementer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/improver/SKILL.md +218 -0
- tapps_agents/resources/claude/skills/improver/__init__.py +1 -0
- tapps_agents/resources/claude/skills/ops/SKILL.md +281 -0
- tapps_agents/resources/claude/skills/ops/__init__.py +1 -0
- tapps_agents/resources/claude/skills/orchestrator/SKILL.md +390 -0
- tapps_agents/resources/claude/skills/orchestrator/__init__.py +1 -0
- tapps_agents/resources/claude/skills/planner/SKILL.md +254 -0
- tapps_agents/resources/claude/skills/planner/__init__.py +1 -0
- tapps_agents/resources/claude/skills/reviewer/SKILL.md +434 -0
- tapps_agents/resources/claude/skills/reviewer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/security-review/SKILL.md +31 -0
- tapps_agents/resources/claude/skills/security-review/__init__.py +1 -0
- tapps_agents/resources/claude/skills/simple-mode/SKILL.md +695 -0
- tapps_agents/resources/claude/skills/simple-mode/__init__.py +1 -0
- tapps_agents/resources/claude/skills/tester/SKILL.md +219 -0
- tapps_agents/resources/claude/skills/tester/__init__.py +1 -0
- tapps_agents/resources/cursor/.cursorignore +35 -0
- tapps_agents/resources/cursor/__init__.py +1 -0
- tapps_agents/resources/cursor/commands/__init__.py +1 -0
- tapps_agents/resources/cursor/commands/build-fix.md +11 -0
- tapps_agents/resources/cursor/commands/build.md +11 -0
- tapps_agents/resources/cursor/commands/e2e.md +11 -0
- tapps_agents/resources/cursor/commands/fix.md +11 -0
- tapps_agents/resources/cursor/commands/refactor-clean.md +11 -0
- tapps_agents/resources/cursor/commands/review.md +11 -0
- tapps_agents/resources/cursor/commands/security-review.md +11 -0
- tapps_agents/resources/cursor/commands/tdd.md +11 -0
- tapps_agents/resources/cursor/commands/test-coverage.md +11 -0
- tapps_agents/resources/cursor/commands/test.md +11 -0
- tapps_agents/resources/cursor/commands/update-codemaps.md +10 -0
- tapps_agents/resources/cursor/commands/update-docs.md +11 -0
- tapps_agents/resources/cursor/rules/__init__.py +1 -0
- tapps_agents/resources/cursor/rules/agent-capabilities.mdc +687 -0
- tapps_agents/resources/cursor/rules/coding-style.mdc +31 -0
- tapps_agents/resources/cursor/rules/command-reference.mdc +2081 -0
- tapps_agents/resources/cursor/rules/cursor-mode-usage.mdc +125 -0
- tapps_agents/resources/cursor/rules/git-workflow.mdc +29 -0
- tapps_agents/resources/cursor/rules/performance.mdc +29 -0
- tapps_agents/resources/cursor/rules/project-context.mdc +163 -0
- tapps_agents/resources/cursor/rules/project-profiling.mdc +197 -0
- tapps_agents/resources/cursor/rules/quick-reference.mdc +630 -0
- tapps_agents/resources/cursor/rules/security.mdc +32 -0
- tapps_agents/resources/cursor/rules/simple-mode.mdc +500 -0
- tapps_agents/resources/cursor/rules/testing.mdc +31 -0
- tapps_agents/resources/cursor/rules/when-to-use.mdc +156 -0
- tapps_agents/resources/cursor/rules/workflow-presets.mdc +179 -0
- tapps_agents/resources/customizations/__init__.py +1 -0
- tapps_agents/resources/customizations/example-custom.yaml +83 -0
- tapps_agents/resources/hooks/__init__.py +1 -0
- tapps_agents/resources/hooks/templates/README.md +5 -0
- tapps_agents/resources/hooks/templates/__init__.py +1 -0
- tapps_agents/resources/hooks/templates/add-project-context.yaml +8 -0
- tapps_agents/resources/hooks/templates/auto-format-js.yaml +10 -0
- tapps_agents/resources/hooks/templates/auto-format-python.yaml +10 -0
- tapps_agents/resources/hooks/templates/git-commit-check.yaml +7 -0
- tapps_agents/resources/hooks/templates/notify-on-complete.yaml +8 -0
- tapps_agents/resources/hooks/templates/quality-gate.yaml +8 -0
- tapps_agents/resources/hooks/templates/security-scan-on-edit.yaml +10 -0
- tapps_agents/resources/hooks/templates/session-end-log.yaml +7 -0
- tapps_agents/resources/hooks/templates/show-beads-ready.yaml +8 -0
- tapps_agents/resources/hooks/templates/test-on-edit.yaml +10 -0
- tapps_agents/resources/hooks/templates/update-docs-on-complete.yaml +8 -0
- tapps_agents/resources/hooks/templates/user-prompt-log.yaml +7 -0
- tapps_agents/resources/scripts/__init__.py +1 -0
- tapps_agents/resources/scripts/set_bd_path.ps1 +51 -0
- tapps_agents/resources/workflows/__init__.py +1 -0
- tapps_agents/resources/workflows/presets/__init__.py +1 -0
- tapps_agents/resources/workflows/presets/brownfield-analysis.yaml +235 -0
- tapps_agents/resources/workflows/presets/fix.yaml +78 -0
- tapps_agents/resources/workflows/presets/full-sdlc.yaml +122 -0
- tapps_agents/resources/workflows/presets/quality.yaml +82 -0
- tapps_agents/resources/workflows/presets/rapid-dev.yaml +84 -0
- tapps_agents/session/__init__.py +19 -19
- tapps_agents/session/manager.py +256 -256
- tapps_agents/simple_mode/__init__.py +66 -66
- tapps_agents/simple_mode/agent_contracts.py +357 -357
- tapps_agents/simple_mode/beads_hooks.py +151 -151
- tapps_agents/simple_mode/code_snippet_handler.py +382 -382
- tapps_agents/simple_mode/documentation_manager.py +395 -395
- tapps_agents/simple_mode/documentation_reader.py +187 -187
- tapps_agents/simple_mode/file_inference.py +292 -292
- tapps_agents/simple_mode/framework_change_detector.py +268 -268
- tapps_agents/simple_mode/intent_parser.py +510 -510
- tapps_agents/simple_mode/learning_progression.py +358 -358
- tapps_agents/simple_mode/nl_handler.py +700 -700
- tapps_agents/simple_mode/onboarding.py +253 -253
- tapps_agents/simple_mode/orchestrators/__init__.py +38 -38
- tapps_agents/simple_mode/orchestrators/breakdown_orchestrator.py +49 -49
- tapps_agents/simple_mode/orchestrators/brownfield_orchestrator.py +135 -135
- tapps_agents/simple_mode/orchestrators/deliverable_checklist.py +349 -349
- tapps_agents/simple_mode/orchestrators/enhance_orchestrator.py +53 -53
- tapps_agents/simple_mode/orchestrators/epic_orchestrator.py +122 -122
- tapps_agents/simple_mode/orchestrators/explore_orchestrator.py +184 -184
- tapps_agents/simple_mode/orchestrators/plan_analysis_orchestrator.py +206 -206
- tapps_agents/simple_mode/orchestrators/pr_orchestrator.py +237 -237
- tapps_agents/simple_mode/orchestrators/refactor_orchestrator.py +222 -222
- tapps_agents/simple_mode/orchestrators/requirements_tracer.py +262 -262
- tapps_agents/simple_mode/orchestrators/resume_orchestrator.py +210 -210
- tapps_agents/simple_mode/orchestrators/review_orchestrator.py +161 -161
- tapps_agents/simple_mode/orchestrators/test_orchestrator.py +82 -82
- tapps_agents/simple_mode/output_aggregator.py +340 -340
- tapps_agents/simple_mode/result_formatters.py +598 -598
- tapps_agents/simple_mode/step_dependencies.py +382 -382
- tapps_agents/simple_mode/step_results.py +276 -276
- tapps_agents/simple_mode/streaming.py +388 -388
- tapps_agents/simple_mode/variations.py +129 -129
- tapps_agents/simple_mode/visual_feedback.py +238 -238
- tapps_agents/simple_mode/zero_config.py +274 -274
- tapps_agents/suggestions/__init__.py +8 -8
- tapps_agents/suggestions/inline_suggester.py +52 -52
- tapps_agents/templates/__init__.py +8 -8
- tapps_agents/templates/microservice_generator.py +274 -274
- tapps_agents/utils/env_validator.py +291 -291
- tapps_agents/workflow/__init__.py +171 -171
- tapps_agents/workflow/acceptance_verifier.py +132 -132
- tapps_agents/workflow/agent_handlers/__init__.py +41 -41
- tapps_agents/workflow/agent_handlers/analyst_handler.py +75 -75
- tapps_agents/workflow/agent_handlers/architect_handler.py +107 -107
- tapps_agents/workflow/agent_handlers/base.py +84 -84
- tapps_agents/workflow/agent_handlers/debugger_handler.py +100 -100
- tapps_agents/workflow/agent_handlers/designer_handler.py +110 -110
- tapps_agents/workflow/agent_handlers/documenter_handler.py +94 -94
- tapps_agents/workflow/agent_handlers/implementer_handler.py +235 -235
- tapps_agents/workflow/agent_handlers/ops_handler.py +62 -62
- tapps_agents/workflow/agent_handlers/orchestrator_handler.py +43 -43
- tapps_agents/workflow/agent_handlers/planner_handler.py +98 -98
- tapps_agents/workflow/agent_handlers/registry.py +119 -119
- tapps_agents/workflow/agent_handlers/reviewer_handler.py +119 -119
- tapps_agents/workflow/agent_handlers/tester_handler.py +69 -69
- tapps_agents/workflow/analytics_accessor.py +337 -337
- tapps_agents/workflow/analytics_alerts.py +416 -416
- tapps_agents/workflow/analytics_dashboard_cursor.py +281 -281
- tapps_agents/workflow/analytics_dual_write.py +103 -103
- tapps_agents/workflow/analytics_integration.py +119 -119
- tapps_agents/workflow/analytics_query_parser.py +278 -278
- tapps_agents/workflow/analytics_visualizer.py +259 -259
- tapps_agents/workflow/artifact_helper.py +204 -204
- tapps_agents/workflow/audit_logger.py +263 -263
- tapps_agents/workflow/auto_execution_config.py +340 -340
- tapps_agents/workflow/auto_progression.py +586 -586
- tapps_agents/workflow/branch_cleanup.py +349 -349
- tapps_agents/workflow/checkpoint.py +256 -256
- tapps_agents/workflow/checkpoint_manager.py +178 -178
- tapps_agents/workflow/code_artifact.py +179 -179
- tapps_agents/workflow/common_enums.py +96 -96
- tapps_agents/workflow/confirmation_handler.py +130 -130
- tapps_agents/workflow/context_analyzer.py +222 -222
- tapps_agents/workflow/context_artifact.py +230 -230
- tapps_agents/workflow/cursor_chat.py +94 -94
- tapps_agents/workflow/cursor_skill_helper.py +516 -516
- tapps_agents/workflow/dependency_resolver.py +244 -244
- tapps_agents/workflow/design_artifact.py +156 -156
- tapps_agents/workflow/detector.py +751 -751
- tapps_agents/workflow/direct_execution_fallback.py +301 -301
- tapps_agents/workflow/docs_artifact.py +168 -168
- tapps_agents/workflow/enforcer.py +389 -389
- tapps_agents/workflow/enhancement_artifact.py +142 -142
- tapps_agents/workflow/error_recovery.py +806 -806
- tapps_agents/workflow/event_bus.py +183 -183
- tapps_agents/workflow/event_log.py +612 -612
- tapps_agents/workflow/events.py +63 -63
- tapps_agents/workflow/exceptions.py +43 -43
- tapps_agents/workflow/execution_graph.py +498 -498
- tapps_agents/workflow/execution_plan.py +126 -126
- tapps_agents/workflow/file_utils.py +186 -186
- tapps_agents/workflow/gate_evaluator.py +182 -182
- tapps_agents/workflow/gate_integration.py +200 -200
- tapps_agents/workflow/graph_visualizer.py +130 -130
- tapps_agents/workflow/health_checker.py +206 -206
- tapps_agents/workflow/logging_helper.py +243 -243
- tapps_agents/workflow/manifest.py +582 -582
- tapps_agents/workflow/marker_writer.py +250 -250
- tapps_agents/workflow/messaging.py +325 -325
- tapps_agents/workflow/metadata_models.py +91 -91
- tapps_agents/workflow/metrics_integration.py +226 -226
- tapps_agents/workflow/migration_utils.py +116 -116
- tapps_agents/workflow/models.py +148 -148
- tapps_agents/workflow/nlp_config.py +198 -198
- tapps_agents/workflow/nlp_error_handler.py +207 -207
- tapps_agents/workflow/nlp_executor.py +163 -163
- tapps_agents/workflow/nlp_parser.py +528 -528
- tapps_agents/workflow/observability_dashboard.py +451 -451
- tapps_agents/workflow/observer.py +170 -170
- tapps_agents/workflow/ops_artifact.py +257 -257
- tapps_agents/workflow/output_passing.py +214 -214
- tapps_agents/workflow/parallel_executor.py +463 -463
- tapps_agents/workflow/planning_artifact.py +179 -179
- tapps_agents/workflow/preset_loader.py +285 -285
- tapps_agents/workflow/preset_recommender.py +270 -270
- tapps_agents/workflow/progress_logger.py +145 -145
- tapps_agents/workflow/progress_manager.py +303 -303
- tapps_agents/workflow/progress_monitor.py +186 -186
- tapps_agents/workflow/progress_updates.py +423 -423
- tapps_agents/workflow/quality_artifact.py +158 -158
- tapps_agents/workflow/quality_loopback.py +101 -101
- tapps_agents/workflow/recommender.py +387 -387
- tapps_agents/workflow/remediation_loop.py +166 -166
- tapps_agents/workflow/result_aggregator.py +300 -300
- tapps_agents/workflow/review_artifact.py +185 -185
- tapps_agents/workflow/schema_validator.py +522 -522
- tapps_agents/workflow/session_handoff.py +178 -178
- tapps_agents/workflow/skill_invoker.py +648 -648
- tapps_agents/workflow/state_manager.py +756 -756
- tapps_agents/workflow/state_persistence_config.py +331 -331
- tapps_agents/workflow/status_monitor.py +449 -449
- tapps_agents/workflow/step_checkpoint.py +314 -314
- tapps_agents/workflow/step_details.py +201 -201
- tapps_agents/workflow/story_models.py +147 -147
- tapps_agents/workflow/streaming.py +416 -416
- tapps_agents/workflow/suggestion_engine.py +552 -552
- tapps_agents/workflow/testing_artifact.py +186 -186
- tapps_agents/workflow/timeline.py +158 -158
- tapps_agents/workflow/token_integration.py +209 -209
- tapps_agents/workflow/validation.py +217 -217
- tapps_agents/workflow/visual_feedback.py +391 -391
- tapps_agents/workflow/workflow_chain.py +95 -95
- tapps_agents/workflow/workflow_summary.py +219 -219
- tapps_agents/workflow/worktree_manager.py +724 -724
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/METADATA +672 -672
- tapps_agents-3.6.1.dist-info/RECORD +883 -0
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/licenses/LICENSE +22 -22
- tapps_agents-3.6.0.dist-info/RECORD +0 -758
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/WHEEL +0 -0
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/entry_points.txt +0 -0
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/top_level.txt +0 -0
|
@@ -1,379 +1,379 @@
|
|
|
1
|
-
# Microservices Patterns
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Microservices architecture breaks applications into small, independent services. This guide covers microservices patterns for HomeIQ's 30-service architecture and similar distributed systems.
|
|
6
|
-
|
|
7
|
-
## Core Principles
|
|
8
|
-
|
|
9
|
-
### Service Independence
|
|
10
|
-
|
|
11
|
-
- **Deploy Independently:** Each service can be deployed separately
|
|
12
|
-
- **Technology Diversity:** Services can use different technologies
|
|
13
|
-
- **Data Isolation:** Each service owns its data
|
|
14
|
-
- **Failure Isolation:** Service failures don't cascade
|
|
15
|
-
|
|
16
|
-
### Service Communication
|
|
17
|
-
|
|
18
|
-
- **Synchronous:** HTTP/REST, gRPC
|
|
19
|
-
- **Asynchronous:** Message queues, event streaming
|
|
20
|
-
- **Hybrid:** Combine both patterns as needed
|
|
21
|
-
|
|
22
|
-
## Service Design Patterns
|
|
23
|
-
|
|
24
|
-
### Pattern 1: Domain-Driven Design (DDD)
|
|
25
|
-
|
|
26
|
-
**Bounded Contexts:**
|
|
27
|
-
- Each microservice represents a bounded context
|
|
28
|
-
- Clear domain boundaries
|
|
29
|
-
- Independent data models
|
|
30
|
-
|
|
31
|
-
**Example for HomeIQ:**
|
|
32
|
-
```
|
|
33
|
-
services/
|
|
34
|
-
├── sensor-ingestion/ # Sensor data domain
|
|
35
|
-
├── device-intelligence/ # Device AI domain
|
|
36
|
-
├── energy-monitoring/ # Energy domain
|
|
37
|
-
└── user-management/ # User domain
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### Pattern 2: API Gateway Pattern
|
|
41
|
-
|
|
42
|
-
**Single Entry Point:**
|
|
43
|
-
- All client requests go through gateway
|
|
44
|
-
- Routes to appropriate services
|
|
45
|
-
- Handles cross-cutting concerns (auth, rate limiting)
|
|
46
|
-
|
|
47
|
-
**Implementation:**
|
|
48
|
-
```python
|
|
49
|
-
from fastapi import FastAPI
|
|
50
|
-
from fastapi.middleware.cors import CORSMiddleware
|
|
51
|
-
|
|
52
|
-
app = FastAPI()
|
|
53
|
-
|
|
54
|
-
# API Gateway routes
|
|
55
|
-
@app.get("/api/sensors")
|
|
56
|
-
async def get_sensors():
|
|
57
|
-
# Route to sensor service
|
|
58
|
-
response = await http_client.get("http://sensor-service:8000/sensors")
|
|
59
|
-
return response.json()
|
|
60
|
-
|
|
61
|
-
@app.get("/api/devices")
|
|
62
|
-
async def get_devices():
|
|
63
|
-
# Route to device service
|
|
64
|
-
response = await http_client.get("http://device-service:8000/devices")
|
|
65
|
-
return response.json()
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### Pattern 3: Service Discovery
|
|
69
|
-
|
|
70
|
-
**Pattern:** Services discover each other dynamically
|
|
71
|
-
|
|
72
|
-
**Client-Side Discovery:**
|
|
73
|
-
```python
|
|
74
|
-
from consul import Consul
|
|
75
|
-
|
|
76
|
-
class ServiceDiscovery:
|
|
77
|
-
def __init__(self):
|
|
78
|
-
self.consul = Consul()
|
|
79
|
-
|
|
80
|
-
def get_service_url(self, service_name: str) -> str:
|
|
81
|
-
"""Get service URL from service discovery."""
|
|
82
|
-
services = self.consul.agent.services()
|
|
83
|
-
service = services.get(service_name)
|
|
84
|
-
if service:
|
|
85
|
-
return f"http://{service['Address']}:{service['Port']}"
|
|
86
|
-
raise ServiceNotFoundError(f"Service {service_name} not found")
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
**Server-Side Discovery:**
|
|
90
|
-
- Load balancer queries service registry
|
|
91
|
-
- Routes requests to available instances
|
|
92
|
-
|
|
93
|
-
### Pattern 4: Circuit Breaker
|
|
94
|
-
|
|
95
|
-
**Prevent Cascading Failures:**
|
|
96
|
-
```python
|
|
97
|
-
from circuitbreaker import circuit
|
|
98
|
-
|
|
99
|
-
@circuit(failure_threshold=5, recovery_timeout=60)
|
|
100
|
-
async def call_service(service_url: str, endpoint: str):
|
|
101
|
-
"""Call service with circuit breaker."""
|
|
102
|
-
async with httpx.AsyncClient() as client:
|
|
103
|
-
response = await client.get(f"{service_url}/{endpoint}")
|
|
104
|
-
return response.json()
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## Communication Patterns
|
|
108
|
-
|
|
109
|
-
### Pattern 1: Synchronous HTTP
|
|
110
|
-
|
|
111
|
-
**REST API Communication:**
|
|
112
|
-
```python
|
|
113
|
-
import httpx
|
|
114
|
-
|
|
115
|
-
class ServiceClient:
|
|
116
|
-
def __init__(self, base_url: str):
|
|
117
|
-
self.base_url = base_url
|
|
118
|
-
self.client = httpx.AsyncClient(timeout=30.0)
|
|
119
|
-
|
|
120
|
-
async def get_data(self, endpoint: str):
|
|
121
|
-
"""Get data from service."""
|
|
122
|
-
response = await self.client.get(f"{self.base_url}/{endpoint}")
|
|
123
|
-
response.raise_for_status()
|
|
124
|
-
return response.json()
|
|
125
|
-
|
|
126
|
-
async def post_data(self, endpoint: str, data: dict):
|
|
127
|
-
"""Post data to service."""
|
|
128
|
-
response = await self.client.post(
|
|
129
|
-
f"{self.base_url}/{endpoint}",
|
|
130
|
-
json=data
|
|
131
|
-
)
|
|
132
|
-
response.raise_for_status()
|
|
133
|
-
return response.json()
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### Pattern 2: Asynchronous Events
|
|
137
|
-
|
|
138
|
-
**Event-Driven Communication:**
|
|
139
|
-
```python
|
|
140
|
-
from pydantic import BaseModel
|
|
141
|
-
import asyncio
|
|
142
|
-
|
|
143
|
-
class EventPublisher:
|
|
144
|
-
def __init__(self, broker_url: str):
|
|
145
|
-
self.broker_url = broker_url
|
|
146
|
-
|
|
147
|
-
async def publish_event(self, event_type: str, data: dict):
|
|
148
|
-
"""Publish event to message broker."""
|
|
149
|
-
# Implementation depends on broker (RabbitMQ, Kafka, etc.)
|
|
150
|
-
pass
|
|
151
|
-
|
|
152
|
-
class EventSubscriber:
|
|
153
|
-
def __init__(self, broker_url: str):
|
|
154
|
-
self.broker_url = broker_url
|
|
155
|
-
self.handlers = {}
|
|
156
|
-
|
|
157
|
-
def register_handler(self, event_type: str, handler):
|
|
158
|
-
"""Register event handler."""
|
|
159
|
-
self.handlers[event_type] = handler
|
|
160
|
-
|
|
161
|
-
async def listen(self):
|
|
162
|
-
"""Listen for events."""
|
|
163
|
-
# Implementation depends on broker
|
|
164
|
-
pass
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### Pattern 3: Request-Reply Pattern
|
|
168
|
-
|
|
169
|
-
**Synchronous Request with Async Reply:**
|
|
170
|
-
```python
|
|
171
|
-
import asyncio
|
|
172
|
-
from uuid import uuid4
|
|
173
|
-
|
|
174
|
-
class RequestReplyClient:
|
|
175
|
-
def __init__(self, message_broker):
|
|
176
|
-
self.broker = message_broker
|
|
177
|
-
self.pending_requests = {}
|
|
178
|
-
|
|
179
|
-
async def send_request(self, service: str, request: dict, timeout: int = 30):
|
|
180
|
-
"""Send request and wait for reply."""
|
|
181
|
-
request_id = str(uuid4())
|
|
182
|
-
request["request_id"] = request_id
|
|
183
|
-
|
|
184
|
-
# Create future for reply
|
|
185
|
-
future = asyncio.Future()
|
|
186
|
-
self.pending_requests[request_id] = future
|
|
187
|
-
|
|
188
|
-
# Publish request
|
|
189
|
-
await self.broker.publish(f"{service}.request", request)
|
|
190
|
-
|
|
191
|
-
# Wait for reply
|
|
192
|
-
try:
|
|
193
|
-
reply = await asyncio.wait_for(future, timeout=timeout)
|
|
194
|
-
return reply
|
|
195
|
-
except asyncio.TimeoutError:
|
|
196
|
-
del self.pending_requests[request_id]
|
|
197
|
-
raise TimeoutError("Request timed out")
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
## Data Management Patterns
|
|
201
|
-
|
|
202
|
-
### Pattern 1: Database per Service
|
|
203
|
-
|
|
204
|
-
**Each Service Owns Its Database:**
|
|
205
|
-
```
|
|
206
|
-
service-a/
|
|
207
|
-
└── database: postgres (service_a_db)
|
|
208
|
-
|
|
209
|
-
service-b/
|
|
210
|
-
└── database: mongodb (service_b_db)
|
|
211
|
-
|
|
212
|
-
service-c/
|
|
213
|
-
└── database: influxdb (service_c_db)
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
**Benefits:**
|
|
217
|
-
- Technology independence
|
|
218
|
-
- Data isolation
|
|
219
|
-
- Independent scaling
|
|
220
|
-
|
|
221
|
-
### Pattern 2: Saga Pattern
|
|
222
|
-
|
|
223
|
-
**Distributed Transactions:**
|
|
224
|
-
```python
|
|
225
|
-
class SagaOrchestrator:
|
|
226
|
-
def __init__(self):
|
|
227
|
-
self.steps = []
|
|
228
|
-
self.compensations = []
|
|
229
|
-
|
|
230
|
-
def add_step(self, step_func, compensation_func):
|
|
231
|
-
"""Add saga step with compensation."""
|
|
232
|
-
self.steps.append(step_func)
|
|
233
|
-
self.compensations.append(compensation_func)
|
|
234
|
-
|
|
235
|
-
async def execute(self):
|
|
236
|
-
"""Execute saga with compensation on failure."""
|
|
237
|
-
completed_steps = []
|
|
238
|
-
try:
|
|
239
|
-
for step in self.steps:
|
|
240
|
-
result = await step()
|
|
241
|
-
completed_steps.append(step)
|
|
242
|
-
return result
|
|
243
|
-
except Exception as e:
|
|
244
|
-
# Compensate completed steps in reverse order
|
|
245
|
-
for step in reversed(completed_steps):
|
|
246
|
-
idx = self.steps.index(step)
|
|
247
|
-
await self.compensations[idx]()
|
|
248
|
-
raise
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
### Pattern 3: CQRS (Command Query Responsibility Segregation)
|
|
252
|
-
|
|
253
|
-
**Separate Read and Write Models:**
|
|
254
|
-
```python
|
|
255
|
-
# Write model (command)
|
|
256
|
-
class DeviceCommandService:
|
|
257
|
-
async def create_device(self, device_data: dict):
|
|
258
|
-
"""Create device (write)."""
|
|
259
|
-
# Write to primary database
|
|
260
|
-
device = await self.device_repo.create(device_data)
|
|
261
|
-
# Publish event
|
|
262
|
-
await self.event_publisher.publish("device.created", device)
|
|
263
|
-
return device
|
|
264
|
-
|
|
265
|
-
# Read model (query)
|
|
266
|
-
class DeviceQueryService:
|
|
267
|
-
async def get_device(self, device_id: str):
|
|
268
|
-
"""Get device (read)."""
|
|
269
|
-
# Read from read-optimized database
|
|
270
|
-
return await self.device_read_repo.get(device_id)
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
## Deployment Patterns
|
|
274
|
-
|
|
275
|
-
### Pattern 1: Container per Service
|
|
276
|
-
|
|
277
|
-
**Each Service in Own Container:**
|
|
278
|
-
```dockerfile
|
|
279
|
-
# Dockerfile for service
|
|
280
|
-
FROM python:3.12-slim
|
|
281
|
-
WORKDIR /app
|
|
282
|
-
COPY requirements.txt .
|
|
283
|
-
RUN pip install -r requirements.txt
|
|
284
|
-
COPY . .
|
|
285
|
-
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
### Pattern 2: Service Mesh
|
|
289
|
-
|
|
290
|
-
**Service-to-Service Communication:**
|
|
291
|
-
- Istio, Linkerd, Consul Connect
|
|
292
|
-
- Handles load balancing, retries, circuit breaking
|
|
293
|
-
- Observability and security
|
|
294
|
-
|
|
295
|
-
## HomeIQ-Specific Patterns
|
|
296
|
-
|
|
297
|
-
### Pattern 1: 30-Service Architecture
|
|
298
|
-
|
|
299
|
-
**Service Organization:**
|
|
300
|
-
```
|
|
301
|
-
services/
|
|
302
|
-
├── core/
|
|
303
|
-
│ ├── api-gateway/
|
|
304
|
-
│ ├── user-management/
|
|
305
|
-
│ └── authentication/
|
|
306
|
-
├── ingestion/
|
|
307
|
-
│ ├── websocket-ingestion/
|
|
308
|
-
│ ├── mqtt-ingestion/
|
|
309
|
-
│ └── sensor-ingestion/
|
|
310
|
-
├── processing/
|
|
311
|
-
│ ├── device-intelligence/
|
|
312
|
-
│ ├── energy-analysis/
|
|
313
|
-
│ └── anomaly-detection/
|
|
314
|
-
└── storage/
|
|
315
|
-
├── time-series-db/
|
|
316
|
-
└── metadata-db/
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
### Pattern 2: Event-Driven Sensor Processing
|
|
320
|
-
|
|
321
|
-
**Sensor Data Flow:**
|
|
322
|
-
```
|
|
323
|
-
Sensor → WebSocket Ingestion → Event Bus → Processing Services
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
**Implementation:**
|
|
327
|
-
```python
|
|
328
|
-
# Ingestion service publishes events
|
|
329
|
-
await event_publisher.publish("sensor.data", {
|
|
330
|
-
"device_id": "sensor_001",
|
|
331
|
-
"value": 72.5,
|
|
332
|
-
"timestamp": "2026-01-15T10:30:00Z"
|
|
333
|
-
})
|
|
334
|
-
|
|
335
|
-
# Processing services subscribe
|
|
336
|
-
@event_subscriber.subscribe("sensor.data")
|
|
337
|
-
async def handle_sensor_data(event):
|
|
338
|
-
# Process sensor data
|
|
339
|
-
await process_sensor_reading(event.data)
|
|
340
|
-
```
|
|
341
|
-
|
|
342
|
-
## Best Practices
|
|
343
|
-
|
|
344
|
-
### 1. Service Boundaries
|
|
345
|
-
|
|
346
|
-
- **Single Responsibility:** One service, one purpose
|
|
347
|
-
- **Loose Coupling:** Minimize dependencies
|
|
348
|
-
- **High Cohesion:** Related functionality together
|
|
349
|
-
|
|
350
|
-
### 2. API Design
|
|
351
|
-
|
|
352
|
-
- **Versioning:** Use API versioning
|
|
353
|
-
- **Backward Compatibility:** Maintain compatibility
|
|
354
|
-
- **Documentation:** OpenAPI/Swagger specs
|
|
355
|
-
|
|
356
|
-
### 3. Error Handling
|
|
357
|
-
|
|
358
|
-
- **Graceful Degradation:** Handle service failures
|
|
359
|
-
- **Retry Logic:** Exponential backoff
|
|
360
|
-
- **Circuit Breakers:** Prevent cascading failures
|
|
361
|
-
|
|
362
|
-
### 4. Observability
|
|
363
|
-
|
|
364
|
-
- **Logging:** Structured logging
|
|
365
|
-
- **Metrics:** Service metrics
|
|
366
|
-
- **Tracing:** Distributed tracing
|
|
367
|
-
|
|
368
|
-
### 5. Security
|
|
369
|
-
|
|
370
|
-
- **Authentication:** Service-to-service auth
|
|
371
|
-
- **Authorization:** Role-based access
|
|
372
|
-
- **Encryption:** TLS for communication
|
|
373
|
-
|
|
374
|
-
## References
|
|
375
|
-
|
|
376
|
-
- [Microservices Patterns](https://microservices.io/patterns/)
|
|
377
|
-
- [Domain-Driven Design](https://martinfowler.com/bliki/DomainDrivenDesign.html)
|
|
378
|
-
- [Service Mesh](https://istio.io/latest/docs/concepts/what-is-istio/)
|
|
379
|
-
|
|
1
|
+
# Microservices Patterns
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Microservices architecture breaks applications into small, independent services. This guide covers microservices patterns for HomeIQ's 30-service architecture and similar distributed systems.
|
|
6
|
+
|
|
7
|
+
## Core Principles
|
|
8
|
+
|
|
9
|
+
### Service Independence
|
|
10
|
+
|
|
11
|
+
- **Deploy Independently:** Each service can be deployed separately
|
|
12
|
+
- **Technology Diversity:** Services can use different technologies
|
|
13
|
+
- **Data Isolation:** Each service owns its data
|
|
14
|
+
- **Failure Isolation:** Service failures don't cascade
|
|
15
|
+
|
|
16
|
+
### Service Communication
|
|
17
|
+
|
|
18
|
+
- **Synchronous:** HTTP/REST, gRPC
|
|
19
|
+
- **Asynchronous:** Message queues, event streaming
|
|
20
|
+
- **Hybrid:** Combine both patterns as needed
|
|
21
|
+
|
|
22
|
+
## Service Design Patterns
|
|
23
|
+
|
|
24
|
+
### Pattern 1: Domain-Driven Design (DDD)
|
|
25
|
+
|
|
26
|
+
**Bounded Contexts:**
|
|
27
|
+
- Each microservice represents a bounded context
|
|
28
|
+
- Clear domain boundaries
|
|
29
|
+
- Independent data models
|
|
30
|
+
|
|
31
|
+
**Example for HomeIQ:**
|
|
32
|
+
```
|
|
33
|
+
services/
|
|
34
|
+
├── sensor-ingestion/ # Sensor data domain
|
|
35
|
+
├── device-intelligence/ # Device AI domain
|
|
36
|
+
├── energy-monitoring/ # Energy domain
|
|
37
|
+
└── user-management/ # User domain
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Pattern 2: API Gateway Pattern
|
|
41
|
+
|
|
42
|
+
**Single Entry Point:**
|
|
43
|
+
- All client requests go through gateway
|
|
44
|
+
- Routes to appropriate services
|
|
45
|
+
- Handles cross-cutting concerns (auth, rate limiting)
|
|
46
|
+
|
|
47
|
+
**Implementation:**
|
|
48
|
+
```python
|
|
49
|
+
from fastapi import FastAPI
|
|
50
|
+
from fastapi.middleware.cors import CORSMiddleware
|
|
51
|
+
|
|
52
|
+
app = FastAPI()
|
|
53
|
+
|
|
54
|
+
# API Gateway routes
|
|
55
|
+
@app.get("/api/sensors")
|
|
56
|
+
async def get_sensors():
|
|
57
|
+
# Route to sensor service
|
|
58
|
+
response = await http_client.get("http://sensor-service:8000/sensors")
|
|
59
|
+
return response.json()
|
|
60
|
+
|
|
61
|
+
@app.get("/api/devices")
|
|
62
|
+
async def get_devices():
|
|
63
|
+
# Route to device service
|
|
64
|
+
response = await http_client.get("http://device-service:8000/devices")
|
|
65
|
+
return response.json()
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Pattern 3: Service Discovery
|
|
69
|
+
|
|
70
|
+
**Pattern:** Services discover each other dynamically
|
|
71
|
+
|
|
72
|
+
**Client-Side Discovery:**
|
|
73
|
+
```python
|
|
74
|
+
from consul import Consul
|
|
75
|
+
|
|
76
|
+
class ServiceDiscovery:
|
|
77
|
+
def __init__(self):
|
|
78
|
+
self.consul = Consul()
|
|
79
|
+
|
|
80
|
+
def get_service_url(self, service_name: str) -> str:
|
|
81
|
+
"""Get service URL from service discovery."""
|
|
82
|
+
services = self.consul.agent.services()
|
|
83
|
+
service = services.get(service_name)
|
|
84
|
+
if service:
|
|
85
|
+
return f"http://{service['Address']}:{service['Port']}"
|
|
86
|
+
raise ServiceNotFoundError(f"Service {service_name} not found")
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Server-Side Discovery:**
|
|
90
|
+
- Load balancer queries service registry
|
|
91
|
+
- Routes requests to available instances
|
|
92
|
+
|
|
93
|
+
### Pattern 4: Circuit Breaker
|
|
94
|
+
|
|
95
|
+
**Prevent Cascading Failures:**
|
|
96
|
+
```python
|
|
97
|
+
from circuitbreaker import circuit
|
|
98
|
+
|
|
99
|
+
@circuit(failure_threshold=5, recovery_timeout=60)
|
|
100
|
+
async def call_service(service_url: str, endpoint: str):
|
|
101
|
+
"""Call service with circuit breaker."""
|
|
102
|
+
async with httpx.AsyncClient() as client:
|
|
103
|
+
response = await client.get(f"{service_url}/{endpoint}")
|
|
104
|
+
return response.json()
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Communication Patterns
|
|
108
|
+
|
|
109
|
+
### Pattern 1: Synchronous HTTP
|
|
110
|
+
|
|
111
|
+
**REST API Communication:**
|
|
112
|
+
```python
|
|
113
|
+
import httpx
|
|
114
|
+
|
|
115
|
+
class ServiceClient:
|
|
116
|
+
def __init__(self, base_url: str):
|
|
117
|
+
self.base_url = base_url
|
|
118
|
+
self.client = httpx.AsyncClient(timeout=30.0)
|
|
119
|
+
|
|
120
|
+
async def get_data(self, endpoint: str):
|
|
121
|
+
"""Get data from service."""
|
|
122
|
+
response = await self.client.get(f"{self.base_url}/{endpoint}")
|
|
123
|
+
response.raise_for_status()
|
|
124
|
+
return response.json()
|
|
125
|
+
|
|
126
|
+
async def post_data(self, endpoint: str, data: dict):
|
|
127
|
+
"""Post data to service."""
|
|
128
|
+
response = await self.client.post(
|
|
129
|
+
f"{self.base_url}/{endpoint}",
|
|
130
|
+
json=data
|
|
131
|
+
)
|
|
132
|
+
response.raise_for_status()
|
|
133
|
+
return response.json()
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Pattern 2: Asynchronous Events
|
|
137
|
+
|
|
138
|
+
**Event-Driven Communication:**
|
|
139
|
+
```python
|
|
140
|
+
from pydantic import BaseModel
|
|
141
|
+
import asyncio
|
|
142
|
+
|
|
143
|
+
class EventPublisher:
|
|
144
|
+
def __init__(self, broker_url: str):
|
|
145
|
+
self.broker_url = broker_url
|
|
146
|
+
|
|
147
|
+
async def publish_event(self, event_type: str, data: dict):
|
|
148
|
+
"""Publish event to message broker."""
|
|
149
|
+
# Implementation depends on broker (RabbitMQ, Kafka, etc.)
|
|
150
|
+
pass
|
|
151
|
+
|
|
152
|
+
class EventSubscriber:
|
|
153
|
+
def __init__(self, broker_url: str):
|
|
154
|
+
self.broker_url = broker_url
|
|
155
|
+
self.handlers = {}
|
|
156
|
+
|
|
157
|
+
def register_handler(self, event_type: str, handler):
|
|
158
|
+
"""Register event handler."""
|
|
159
|
+
self.handlers[event_type] = handler
|
|
160
|
+
|
|
161
|
+
async def listen(self):
|
|
162
|
+
"""Listen for events."""
|
|
163
|
+
# Implementation depends on broker
|
|
164
|
+
pass
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Pattern 3: Request-Reply Pattern
|
|
168
|
+
|
|
169
|
+
**Synchronous Request with Async Reply:**
|
|
170
|
+
```python
|
|
171
|
+
import asyncio
|
|
172
|
+
from uuid import uuid4
|
|
173
|
+
|
|
174
|
+
class RequestReplyClient:
|
|
175
|
+
def __init__(self, message_broker):
|
|
176
|
+
self.broker = message_broker
|
|
177
|
+
self.pending_requests = {}
|
|
178
|
+
|
|
179
|
+
async def send_request(self, service: str, request: dict, timeout: int = 30):
|
|
180
|
+
"""Send request and wait for reply."""
|
|
181
|
+
request_id = str(uuid4())
|
|
182
|
+
request["request_id"] = request_id
|
|
183
|
+
|
|
184
|
+
# Create future for reply
|
|
185
|
+
future = asyncio.Future()
|
|
186
|
+
self.pending_requests[request_id] = future
|
|
187
|
+
|
|
188
|
+
# Publish request
|
|
189
|
+
await self.broker.publish(f"{service}.request", request)
|
|
190
|
+
|
|
191
|
+
# Wait for reply
|
|
192
|
+
try:
|
|
193
|
+
reply = await asyncio.wait_for(future, timeout=timeout)
|
|
194
|
+
return reply
|
|
195
|
+
except asyncio.TimeoutError:
|
|
196
|
+
del self.pending_requests[request_id]
|
|
197
|
+
raise TimeoutError("Request timed out")
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Data Management Patterns
|
|
201
|
+
|
|
202
|
+
### Pattern 1: Database per Service
|
|
203
|
+
|
|
204
|
+
**Each Service Owns Its Database:**
|
|
205
|
+
```
|
|
206
|
+
service-a/
|
|
207
|
+
└── database: postgres (service_a_db)
|
|
208
|
+
|
|
209
|
+
service-b/
|
|
210
|
+
└── database: mongodb (service_b_db)
|
|
211
|
+
|
|
212
|
+
service-c/
|
|
213
|
+
└── database: influxdb (service_c_db)
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**Benefits:**
|
|
217
|
+
- Technology independence
|
|
218
|
+
- Data isolation
|
|
219
|
+
- Independent scaling
|
|
220
|
+
|
|
221
|
+
### Pattern 2: Saga Pattern
|
|
222
|
+
|
|
223
|
+
**Distributed Transactions:**
|
|
224
|
+
```python
|
|
225
|
+
class SagaOrchestrator:
|
|
226
|
+
def __init__(self):
|
|
227
|
+
self.steps = []
|
|
228
|
+
self.compensations = []
|
|
229
|
+
|
|
230
|
+
def add_step(self, step_func, compensation_func):
|
|
231
|
+
"""Add saga step with compensation."""
|
|
232
|
+
self.steps.append(step_func)
|
|
233
|
+
self.compensations.append(compensation_func)
|
|
234
|
+
|
|
235
|
+
async def execute(self):
|
|
236
|
+
"""Execute saga with compensation on failure."""
|
|
237
|
+
completed_steps = []
|
|
238
|
+
try:
|
|
239
|
+
for step in self.steps:
|
|
240
|
+
result = await step()
|
|
241
|
+
completed_steps.append(step)
|
|
242
|
+
return result
|
|
243
|
+
except Exception as e:
|
|
244
|
+
# Compensate completed steps in reverse order
|
|
245
|
+
for step in reversed(completed_steps):
|
|
246
|
+
idx = self.steps.index(step)
|
|
247
|
+
await self.compensations[idx]()
|
|
248
|
+
raise
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Pattern 3: CQRS (Command Query Responsibility Segregation)
|
|
252
|
+
|
|
253
|
+
**Separate Read and Write Models:**
|
|
254
|
+
```python
|
|
255
|
+
# Write model (command)
|
|
256
|
+
class DeviceCommandService:
|
|
257
|
+
async def create_device(self, device_data: dict):
|
|
258
|
+
"""Create device (write)."""
|
|
259
|
+
# Write to primary database
|
|
260
|
+
device = await self.device_repo.create(device_data)
|
|
261
|
+
# Publish event
|
|
262
|
+
await self.event_publisher.publish("device.created", device)
|
|
263
|
+
return device
|
|
264
|
+
|
|
265
|
+
# Read model (query)
|
|
266
|
+
class DeviceQueryService:
|
|
267
|
+
async def get_device(self, device_id: str):
|
|
268
|
+
"""Get device (read)."""
|
|
269
|
+
# Read from read-optimized database
|
|
270
|
+
return await self.device_read_repo.get(device_id)
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## Deployment Patterns
|
|
274
|
+
|
|
275
|
+
### Pattern 1: Container per Service
|
|
276
|
+
|
|
277
|
+
**Each Service in Own Container:**
|
|
278
|
+
```dockerfile
|
|
279
|
+
# Dockerfile for service
|
|
280
|
+
FROM python:3.12-slim
|
|
281
|
+
WORKDIR /app
|
|
282
|
+
COPY requirements.txt .
|
|
283
|
+
RUN pip install -r requirements.txt
|
|
284
|
+
COPY . .
|
|
285
|
+
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Pattern 2: Service Mesh
|
|
289
|
+
|
|
290
|
+
**Service-to-Service Communication:**
|
|
291
|
+
- Istio, Linkerd, Consul Connect
|
|
292
|
+
- Handles load balancing, retries, circuit breaking
|
|
293
|
+
- Observability and security
|
|
294
|
+
|
|
295
|
+
## HomeIQ-Specific Patterns
|
|
296
|
+
|
|
297
|
+
### Pattern 1: 30-Service Architecture
|
|
298
|
+
|
|
299
|
+
**Service Organization:**
|
|
300
|
+
```
|
|
301
|
+
services/
|
|
302
|
+
├── core/
|
|
303
|
+
│ ├── api-gateway/
|
|
304
|
+
│ ├── user-management/
|
|
305
|
+
│ └── authentication/
|
|
306
|
+
├── ingestion/
|
|
307
|
+
│ ├── websocket-ingestion/
|
|
308
|
+
│ ├── mqtt-ingestion/
|
|
309
|
+
│ └── sensor-ingestion/
|
|
310
|
+
├── processing/
|
|
311
|
+
│ ├── device-intelligence/
|
|
312
|
+
│ ├── energy-analysis/
|
|
313
|
+
│ └── anomaly-detection/
|
|
314
|
+
└── storage/
|
|
315
|
+
├── time-series-db/
|
|
316
|
+
└── metadata-db/
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Pattern 2: Event-Driven Sensor Processing
|
|
320
|
+
|
|
321
|
+
**Sensor Data Flow:**
|
|
322
|
+
```
|
|
323
|
+
Sensor → WebSocket Ingestion → Event Bus → Processing Services
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
**Implementation:**
|
|
327
|
+
```python
|
|
328
|
+
# Ingestion service publishes events
|
|
329
|
+
await event_publisher.publish("sensor.data", {
|
|
330
|
+
"device_id": "sensor_001",
|
|
331
|
+
"value": 72.5,
|
|
332
|
+
"timestamp": "2026-01-15T10:30:00Z"
|
|
333
|
+
})
|
|
334
|
+
|
|
335
|
+
# Processing services subscribe
|
|
336
|
+
@event_subscriber.subscribe("sensor.data")
|
|
337
|
+
async def handle_sensor_data(event):
|
|
338
|
+
# Process sensor data
|
|
339
|
+
await process_sensor_reading(event.data)
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
## Best Practices
|
|
343
|
+
|
|
344
|
+
### 1. Service Boundaries
|
|
345
|
+
|
|
346
|
+
- **Single Responsibility:** One service, one purpose
|
|
347
|
+
- **Loose Coupling:** Minimize dependencies
|
|
348
|
+
- **High Cohesion:** Related functionality together
|
|
349
|
+
|
|
350
|
+
### 2. API Design
|
|
351
|
+
|
|
352
|
+
- **Versioning:** Use API versioning
|
|
353
|
+
- **Backward Compatibility:** Maintain compatibility
|
|
354
|
+
- **Documentation:** OpenAPI/Swagger specs
|
|
355
|
+
|
|
356
|
+
### 3. Error Handling
|
|
357
|
+
|
|
358
|
+
- **Graceful Degradation:** Handle service failures
|
|
359
|
+
- **Retry Logic:** Exponential backoff
|
|
360
|
+
- **Circuit Breakers:** Prevent cascading failures
|
|
361
|
+
|
|
362
|
+
### 4. Observability
|
|
363
|
+
|
|
364
|
+
- **Logging:** Structured logging
|
|
365
|
+
- **Metrics:** Service metrics
|
|
366
|
+
- **Tracing:** Distributed tracing
|
|
367
|
+
|
|
368
|
+
### 5. Security
|
|
369
|
+
|
|
370
|
+
- **Authentication:** Service-to-service auth
|
|
371
|
+
- **Authorization:** Role-based access
|
|
372
|
+
- **Encryption:** TLS for communication
|
|
373
|
+
|
|
374
|
+
## References
|
|
375
|
+
|
|
376
|
+
- [Microservices Patterns](https://microservices.io/patterns/)
|
|
377
|
+
- [Domain-Driven Design](https://martinfowler.com/bliki/DomainDrivenDesign.html)
|
|
378
|
+
- [Service Mesh](https://istio.io/latest/docs/concepts/what-is-istio/)
|
|
379
|
+
|