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,421 +1,421 @@
|
|
|
1
|
-
# API Versioning Strategies
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
API versioning is essential for managing changes to APIs while maintaining backward compatibility. Different versioning strategies have trade-offs in clarity, maintenance, and flexibility.
|
|
6
|
-
|
|
7
|
-
## Versioning Strategies
|
|
8
|
-
|
|
9
|
-
### 1. URL Path Versioning
|
|
10
|
-
|
|
11
|
-
**Format:** `/api/v{version}/resource`
|
|
12
|
-
|
|
13
|
-
**Example:**
|
|
14
|
-
```http
|
|
15
|
-
GET /api/v1/users
|
|
16
|
-
GET /api/v2/users
|
|
17
|
-
POST /api/v1/orders
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Pros:**
|
|
21
|
-
- Explicit and clear
|
|
22
|
-
- Easy to understand
|
|
23
|
-
- Supports multiple versions simultaneously
|
|
24
|
-
- RESTful and cacheable
|
|
25
|
-
|
|
26
|
-
**Cons:**
|
|
27
|
-
- Clutters URL space
|
|
28
|
-
- Requires route management
|
|
29
|
-
- Can confuse users about which version to use
|
|
30
|
-
|
|
31
|
-
**Implementation:**
|
|
32
|
-
```python
|
|
33
|
-
from flask import Flask
|
|
34
|
-
|
|
35
|
-
app = Flask(__name__)
|
|
36
|
-
|
|
37
|
-
@app.route('/api/v1/users')
|
|
38
|
-
def v1_users():
|
|
39
|
-
return {"version": "v1", "users": [...]}
|
|
40
|
-
|
|
41
|
-
@app.route('/api/v2/users')
|
|
42
|
-
def v2_users():
|
|
43
|
-
return {"version": "v2", "users": [...]} # New format
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
### 2. Header Versioning
|
|
47
|
-
|
|
48
|
-
**Format:** Custom header or Accept header
|
|
49
|
-
|
|
50
|
-
**Example:**
|
|
51
|
-
```http
|
|
52
|
-
GET /api/users
|
|
53
|
-
API-Version: 2
|
|
54
|
-
|
|
55
|
-
GET /api/users
|
|
56
|
-
Accept: application/vnd.api+json;version=2
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
**Pros:**
|
|
60
|
-
- Clean URLs
|
|
61
|
-
- HTTP-compliant
|
|
62
|
-
- Content negotiation
|
|
63
|
-
|
|
64
|
-
**Cons:**
|
|
65
|
-
- Less discoverable
|
|
66
|
-
- Harder to test
|
|
67
|
-
- Clients must remember to set headers
|
|
68
|
-
|
|
69
|
-
**Implementation:**
|
|
70
|
-
```python
|
|
71
|
-
from flask import request
|
|
72
|
-
|
|
73
|
-
def get_api_version():
|
|
74
|
-
# Check custom header
|
|
75
|
-
version = request.headers.get('API-Version', '1')
|
|
76
|
-
|
|
77
|
-
# Or check Accept header
|
|
78
|
-
accept = request.headers.get('Accept', '')
|
|
79
|
-
if 'version=' in accept:
|
|
80
|
-
version = extract_version_from_accept(accept)
|
|
81
|
-
|
|
82
|
-
return version
|
|
83
|
-
|
|
84
|
-
@app.route('/api/users')
|
|
85
|
-
def users():
|
|
86
|
-
version = get_api_version()
|
|
87
|
-
if version == '2':
|
|
88
|
-
return new_format_users()
|
|
89
|
-
return legacy_format_users()
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### 3. Query Parameter Versioning
|
|
93
|
-
|
|
94
|
-
**Format:** `?version={version}` or `?v={version}`
|
|
95
|
-
|
|
96
|
-
**Example:**
|
|
97
|
-
```http
|
|
98
|
-
GET /api/users?version=2
|
|
99
|
-
GET /api/users?v=2
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
**Pros:**
|
|
103
|
-
- Simple to implement
|
|
104
|
-
- Easy to test
|
|
105
|
-
- Backward compatible
|
|
106
|
-
|
|
107
|
-
**Cons:**
|
|
108
|
-
- Less RESTful
|
|
109
|
-
- Easy to forget
|
|
110
|
-
- Not semantic
|
|
111
|
-
- Doesn't work well for POST/PUT
|
|
112
|
-
|
|
113
|
-
**Implementation:**
|
|
114
|
-
```python
|
|
115
|
-
@app.route('/api/users')
|
|
116
|
-
def users():
|
|
117
|
-
version = request.args.get('version', '1')
|
|
118
|
-
if version == '2':
|
|
119
|
-
return new_format_users()
|
|
120
|
-
return legacy_format_users()
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### 4. Domain/Subdomain Versioning
|
|
124
|
-
|
|
125
|
-
**Format:** `v{version}.api.example.com`
|
|
126
|
-
|
|
127
|
-
**Example:**
|
|
128
|
-
```http
|
|
129
|
-
GET https://v1.api.example.com/users
|
|
130
|
-
GET https://v2.api.example.com/users
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
**Pros:**
|
|
134
|
-
- Clear separation
|
|
135
|
-
- Easy deployment per version
|
|
136
|
-
- Good for major versions
|
|
137
|
-
|
|
138
|
-
**Cons:**
|
|
139
|
-
- DNS management overhead
|
|
140
|
-
- SSL certificate complexity
|
|
141
|
-
- Less flexible
|
|
142
|
-
|
|
143
|
-
## Version Numbering
|
|
144
|
-
|
|
145
|
-
### Semantic Versioning
|
|
146
|
-
|
|
147
|
-
**Format:** `MAJOR.MINOR.PATCH`
|
|
148
|
-
|
|
149
|
-
- **MAJOR:** Breaking changes
|
|
150
|
-
- **MINOR:** New features, backward compatible
|
|
151
|
-
- **PATCH:** Bug fixes, backward compatible
|
|
152
|
-
|
|
153
|
-
**Example:**
|
|
154
|
-
```
|
|
155
|
-
v1.0.0 → v1.1.0 (new feature)
|
|
156
|
-
v1.1.0 → v1.1.1 (bug fix)
|
|
157
|
-
v1.1.1 → v2.0.0 (breaking change)
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### API Versioning
|
|
161
|
-
|
|
162
|
-
**Common Approaches:**
|
|
163
|
-
- **Major only:** `v1`, `v2` (simpler)
|
|
164
|
-
- **Major.Minor:** `v1.0`, `v1.1` (more granular)
|
|
165
|
-
- **Date-based:** `2026-01-15` (YAML style)
|
|
166
|
-
|
|
167
|
-
## Breaking vs Non-Breaking Changes
|
|
168
|
-
|
|
169
|
-
### Breaking Changes (New Major Version)
|
|
170
|
-
|
|
171
|
-
**Require New Version:**
|
|
172
|
-
- Removing fields
|
|
173
|
-
- Changing field types
|
|
174
|
-
- Removing endpoints
|
|
175
|
-
- Changing required fields
|
|
176
|
-
- Changing authentication
|
|
177
|
-
- Changing URL structure
|
|
178
|
-
|
|
179
|
-
**Example:**
|
|
180
|
-
```json
|
|
181
|
-
// v1
|
|
182
|
-
{
|
|
183
|
-
"id": 123,
|
|
184
|
-
"name": "John"
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// v2 - Breaking: Changed field name
|
|
188
|
-
{
|
|
189
|
-
"id": 123,
|
|
190
|
-
"fullName": "John" // Was "name" in v1
|
|
191
|
-
}
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
### Non-Breaking Changes (Same Version)
|
|
195
|
-
|
|
196
|
-
**Safe to Make:**
|
|
197
|
-
- Adding new fields
|
|
198
|
-
- Adding new endpoints
|
|
199
|
-
- Making optional fields required (with migration)
|
|
200
|
-
- Adding query parameters
|
|
201
|
-
- Improving error messages
|
|
202
|
-
|
|
203
|
-
**Example:**
|
|
204
|
-
```json
|
|
205
|
-
// v1
|
|
206
|
-
{
|
|
207
|
-
"id": 123,
|
|
208
|
-
"name": "John"
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// v1 (updated) - Non-breaking: Added field
|
|
212
|
-
{
|
|
213
|
-
"id": 123,
|
|
214
|
-
"name": "John",
|
|
215
|
-
"email": "john@example.com" // New field
|
|
216
|
-
}
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
## Implementation Patterns
|
|
220
|
-
|
|
221
|
-
### Version Detection
|
|
222
|
-
|
|
223
|
-
**Middleware:**
|
|
224
|
-
```python
|
|
225
|
-
from flask import request, g
|
|
226
|
-
|
|
227
|
-
@app.before_request
|
|
228
|
-
def detect_version():
|
|
229
|
-
# Check multiple sources
|
|
230
|
-
version = (
|
|
231
|
-
request.args.get('version') or
|
|
232
|
-
request.headers.get('API-Version') or
|
|
233
|
-
request.headers.get('X-API-Version') or
|
|
234
|
-
extract_from_accept_header() or
|
|
235
|
-
'1' # Default
|
|
236
|
-
)
|
|
237
|
-
g.api_version = version
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
### Version Routing
|
|
241
|
-
|
|
242
|
-
**Route Decorator:**
|
|
243
|
-
```python
|
|
244
|
-
def version_route(rule, **options):
|
|
245
|
-
def decorator(f):
|
|
246
|
-
@app.route(f'/api/v1{rule}', endpoint=f'v1_{f.__name__}', **options)
|
|
247
|
-
def v1_handler():
|
|
248
|
-
return f(version='1')
|
|
249
|
-
|
|
250
|
-
@app.route(f'/api/v2{rule}', endpoint=f'v2_{f.__name__}', **options)
|
|
251
|
-
def v2_handler():
|
|
252
|
-
return f(version='2')
|
|
253
|
-
|
|
254
|
-
return f
|
|
255
|
-
return decorator
|
|
256
|
-
|
|
257
|
-
@version_route('/users')
|
|
258
|
-
def users(version):
|
|
259
|
-
if version == '2':
|
|
260
|
-
return new_format()
|
|
261
|
-
return legacy_format()
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
### Version-Specific Handlers
|
|
265
|
-
|
|
266
|
-
**Separate Modules:**
|
|
267
|
-
```python
|
|
268
|
-
# api/v1/handlers.py
|
|
269
|
-
def get_users_v1():
|
|
270
|
-
return {"users": [...]} # Old format
|
|
271
|
-
|
|
272
|
-
# api/v2/handlers.py
|
|
273
|
-
def get_users_v2():
|
|
274
|
-
return {"data": [...]} # New format
|
|
275
|
-
|
|
276
|
-
# api/routes.py
|
|
277
|
-
from api.v1 import handlers as v1_handlers
|
|
278
|
-
from api.v2 import handlers as v2_handlers
|
|
279
|
-
|
|
280
|
-
app.register_blueprint(v1_handlers.bp, url_prefix='/api/v1')
|
|
281
|
-
app.register_blueprint(v2_handlers.bp, url_prefix='/api/v2')
|
|
282
|
-
```
|
|
283
|
-
|
|
284
|
-
## Deprecation Strategy
|
|
285
|
-
|
|
286
|
-
### Deprecation Process
|
|
287
|
-
|
|
288
|
-
**Steps:**
|
|
289
|
-
1. Announce deprecation
|
|
290
|
-
2. Set deprecation date
|
|
291
|
-
3. Add deprecation headers
|
|
292
|
-
4. Provide migration guide
|
|
293
|
-
5. Monitor usage
|
|
294
|
-
6. Sunset after grace period
|
|
295
|
-
|
|
296
|
-
**Deprecation Headers:**
|
|
297
|
-
```http
|
|
298
|
-
HTTP/1.1 200 OK
|
|
299
|
-
Deprecation: true
|
|
300
|
-
Sunset: Sat, 01 Jan 2027 00:00:00 GMT
|
|
301
|
-
Link: <https://api.example.com/docs/v2>; rel="successor-version"
|
|
302
|
-
Warning: 299 - "API v1 is deprecated, migrate to v2"
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
**Implementation:**
|
|
306
|
-
```python
|
|
307
|
-
@app.route('/api/v1/users')
|
|
308
|
-
def users_v1():
|
|
309
|
-
response = jsonify(legacy_users())
|
|
310
|
-
response.headers['Deprecation'] = 'true'
|
|
311
|
-
response.headers['Sunset'] = 'Sat, 01 Jan 2027 00:00:00 GMT'
|
|
312
|
-
response.headers['Warning'] = '299 - "API v1 is deprecated"'
|
|
313
|
-
return response
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
## Version Documentation
|
|
317
|
-
|
|
318
|
-
### Changelog
|
|
319
|
-
|
|
320
|
-
**Maintain Changelog:**
|
|
321
|
-
```markdown
|
|
322
|
-
# API Changelog
|
|
323
|
-
|
|
324
|
-
## v2.0.0 (2026-01-15)
|
|
325
|
-
### Breaking Changes
|
|
326
|
-
- Removed `name` field, use `fullName`
|
|
327
|
-
- Changed `GET /users` response format
|
|
328
|
-
|
|
329
|
-
### New Features
|
|
330
|
-
- Added pagination to all list endpoints
|
|
331
|
-
- Added filtering by `status`
|
|
332
|
-
|
|
333
|
-
## v1.2.0 (2025-12-01)
|
|
334
|
-
### New Features
|
|
335
|
-
- Added `email` field to User
|
|
336
|
-
- Added `GET /users/:id/posts` endpoint
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
### Migration Guides
|
|
340
|
-
|
|
341
|
-
**Provide Clear Migration:**
|
|
342
|
-
```markdown
|
|
343
|
-
# Migrating from v1 to v2
|
|
344
|
-
|
|
345
|
-
## Response Format Changes
|
|
346
|
-
|
|
347
|
-
### v1 Response
|
|
348
|
-
```json
|
|
349
|
-
{
|
|
350
|
-
"users": [...]
|
|
351
|
-
}
|
|
352
|
-
```
|
|
353
|
-
|
|
354
|
-
### v2 Response
|
|
355
|
-
```json
|
|
356
|
-
{
|
|
357
|
-
"data": [...],
|
|
358
|
-
"meta": {...}
|
|
359
|
-
}
|
|
360
|
-
```
|
|
361
|
-
|
|
362
|
-
## Field Name Changes
|
|
363
|
-
- `name` → `fullName`
|
|
364
|
-
- `created` → `createdAt`
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
## Best Practices
|
|
368
|
-
|
|
369
|
-
1. **Choose one strategy:** Be consistent
|
|
370
|
-
2. **Version major changes only:** Minor changes within version
|
|
371
|
-
3. **Document changes:** Clear changelogs and migration guides
|
|
372
|
-
4. **Deprecate gracefully:** Give clients time to migrate
|
|
373
|
-
5. **Monitor usage:** Track version adoption
|
|
374
|
-
6. **Sunset old versions:** Remove after deprecation period
|
|
375
|
-
7. **Default to latest:** When version not specified
|
|
376
|
-
8. **Test thoroughly:** Ensure backward compatibility
|
|
377
|
-
9. **Communicate clearly:** Announce changes early
|
|
378
|
-
10. **Support multiple versions:** During transition periods
|
|
379
|
-
|
|
380
|
-
## Common Patterns
|
|
381
|
-
|
|
382
|
-
### Default Version
|
|
383
|
-
|
|
384
|
-
**Use Latest:**
|
|
385
|
-
```python
|
|
386
|
-
def get_version():
|
|
387
|
-
version = extract_version() or get_latest_version()
|
|
388
|
-
return version
|
|
389
|
-
```
|
|
390
|
-
|
|
391
|
-
### Version Aliases
|
|
392
|
-
|
|
393
|
-
**Support "latest":**
|
|
394
|
-
```http
|
|
395
|
-
GET /api/latest/users # Maps to v2
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
### Version Negotiation
|
|
399
|
-
|
|
400
|
-
**Content Negotiation:**
|
|
401
|
-
```http
|
|
402
|
-
GET /api/users
|
|
403
|
-
Accept: application/vnd.api+json;version=2
|
|
404
|
-
|
|
405
|
-
HTTP/1.1 200 OK
|
|
406
|
-
Content-Type: application/vnd.api+json;version=2
|
|
407
|
-
```
|
|
408
|
-
|
|
409
|
-
## Summary
|
|
410
|
-
|
|
411
|
-
Effective API versioning requires:
|
|
412
|
-
|
|
413
|
-
1. **Choose appropriate strategy:** URL path recommended for REST
|
|
414
|
-
2. **Version breaking changes:** Major version increments
|
|
415
|
-
3. **Maintain backward compatibility:** During transition
|
|
416
|
-
4. **Deprecate gracefully:** With clear timelines
|
|
417
|
-
5. **Document thoroughly:** Changelogs and migration guides
|
|
418
|
-
6. **Monitor adoption:** Track version usage
|
|
419
|
-
7. **Sunset old versions:** After deprecation period
|
|
420
|
-
8. **Test compatibility:** Ensure no regressions
|
|
421
|
-
|
|
1
|
+
# API Versioning Strategies
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
API versioning is essential for managing changes to APIs while maintaining backward compatibility. Different versioning strategies have trade-offs in clarity, maintenance, and flexibility.
|
|
6
|
+
|
|
7
|
+
## Versioning Strategies
|
|
8
|
+
|
|
9
|
+
### 1. URL Path Versioning
|
|
10
|
+
|
|
11
|
+
**Format:** `/api/v{version}/resource`
|
|
12
|
+
|
|
13
|
+
**Example:**
|
|
14
|
+
```http
|
|
15
|
+
GET /api/v1/users
|
|
16
|
+
GET /api/v2/users
|
|
17
|
+
POST /api/v1/orders
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Pros:**
|
|
21
|
+
- Explicit and clear
|
|
22
|
+
- Easy to understand
|
|
23
|
+
- Supports multiple versions simultaneously
|
|
24
|
+
- RESTful and cacheable
|
|
25
|
+
|
|
26
|
+
**Cons:**
|
|
27
|
+
- Clutters URL space
|
|
28
|
+
- Requires route management
|
|
29
|
+
- Can confuse users about which version to use
|
|
30
|
+
|
|
31
|
+
**Implementation:**
|
|
32
|
+
```python
|
|
33
|
+
from flask import Flask
|
|
34
|
+
|
|
35
|
+
app = Flask(__name__)
|
|
36
|
+
|
|
37
|
+
@app.route('/api/v1/users')
|
|
38
|
+
def v1_users():
|
|
39
|
+
return {"version": "v1", "users": [...]}
|
|
40
|
+
|
|
41
|
+
@app.route('/api/v2/users')
|
|
42
|
+
def v2_users():
|
|
43
|
+
return {"version": "v2", "users": [...]} # New format
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 2. Header Versioning
|
|
47
|
+
|
|
48
|
+
**Format:** Custom header or Accept header
|
|
49
|
+
|
|
50
|
+
**Example:**
|
|
51
|
+
```http
|
|
52
|
+
GET /api/users
|
|
53
|
+
API-Version: 2
|
|
54
|
+
|
|
55
|
+
GET /api/users
|
|
56
|
+
Accept: application/vnd.api+json;version=2
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Pros:**
|
|
60
|
+
- Clean URLs
|
|
61
|
+
- HTTP-compliant
|
|
62
|
+
- Content negotiation
|
|
63
|
+
|
|
64
|
+
**Cons:**
|
|
65
|
+
- Less discoverable
|
|
66
|
+
- Harder to test
|
|
67
|
+
- Clients must remember to set headers
|
|
68
|
+
|
|
69
|
+
**Implementation:**
|
|
70
|
+
```python
|
|
71
|
+
from flask import request
|
|
72
|
+
|
|
73
|
+
def get_api_version():
|
|
74
|
+
# Check custom header
|
|
75
|
+
version = request.headers.get('API-Version', '1')
|
|
76
|
+
|
|
77
|
+
# Or check Accept header
|
|
78
|
+
accept = request.headers.get('Accept', '')
|
|
79
|
+
if 'version=' in accept:
|
|
80
|
+
version = extract_version_from_accept(accept)
|
|
81
|
+
|
|
82
|
+
return version
|
|
83
|
+
|
|
84
|
+
@app.route('/api/users')
|
|
85
|
+
def users():
|
|
86
|
+
version = get_api_version()
|
|
87
|
+
if version == '2':
|
|
88
|
+
return new_format_users()
|
|
89
|
+
return legacy_format_users()
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### 3. Query Parameter Versioning
|
|
93
|
+
|
|
94
|
+
**Format:** `?version={version}` or `?v={version}`
|
|
95
|
+
|
|
96
|
+
**Example:**
|
|
97
|
+
```http
|
|
98
|
+
GET /api/users?version=2
|
|
99
|
+
GET /api/users?v=2
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Pros:**
|
|
103
|
+
- Simple to implement
|
|
104
|
+
- Easy to test
|
|
105
|
+
- Backward compatible
|
|
106
|
+
|
|
107
|
+
**Cons:**
|
|
108
|
+
- Less RESTful
|
|
109
|
+
- Easy to forget
|
|
110
|
+
- Not semantic
|
|
111
|
+
- Doesn't work well for POST/PUT
|
|
112
|
+
|
|
113
|
+
**Implementation:**
|
|
114
|
+
```python
|
|
115
|
+
@app.route('/api/users')
|
|
116
|
+
def users():
|
|
117
|
+
version = request.args.get('version', '1')
|
|
118
|
+
if version == '2':
|
|
119
|
+
return new_format_users()
|
|
120
|
+
return legacy_format_users()
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### 4. Domain/Subdomain Versioning
|
|
124
|
+
|
|
125
|
+
**Format:** `v{version}.api.example.com`
|
|
126
|
+
|
|
127
|
+
**Example:**
|
|
128
|
+
```http
|
|
129
|
+
GET https://v1.api.example.com/users
|
|
130
|
+
GET https://v2.api.example.com/users
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Pros:**
|
|
134
|
+
- Clear separation
|
|
135
|
+
- Easy deployment per version
|
|
136
|
+
- Good for major versions
|
|
137
|
+
|
|
138
|
+
**Cons:**
|
|
139
|
+
- DNS management overhead
|
|
140
|
+
- SSL certificate complexity
|
|
141
|
+
- Less flexible
|
|
142
|
+
|
|
143
|
+
## Version Numbering
|
|
144
|
+
|
|
145
|
+
### Semantic Versioning
|
|
146
|
+
|
|
147
|
+
**Format:** `MAJOR.MINOR.PATCH`
|
|
148
|
+
|
|
149
|
+
- **MAJOR:** Breaking changes
|
|
150
|
+
- **MINOR:** New features, backward compatible
|
|
151
|
+
- **PATCH:** Bug fixes, backward compatible
|
|
152
|
+
|
|
153
|
+
**Example:**
|
|
154
|
+
```
|
|
155
|
+
v1.0.0 → v1.1.0 (new feature)
|
|
156
|
+
v1.1.0 → v1.1.1 (bug fix)
|
|
157
|
+
v1.1.1 → v2.0.0 (breaking change)
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### API Versioning
|
|
161
|
+
|
|
162
|
+
**Common Approaches:**
|
|
163
|
+
- **Major only:** `v1`, `v2` (simpler)
|
|
164
|
+
- **Major.Minor:** `v1.0`, `v1.1` (more granular)
|
|
165
|
+
- **Date-based:** `2026-01-15` (YAML style)
|
|
166
|
+
|
|
167
|
+
## Breaking vs Non-Breaking Changes
|
|
168
|
+
|
|
169
|
+
### Breaking Changes (New Major Version)
|
|
170
|
+
|
|
171
|
+
**Require New Version:**
|
|
172
|
+
- Removing fields
|
|
173
|
+
- Changing field types
|
|
174
|
+
- Removing endpoints
|
|
175
|
+
- Changing required fields
|
|
176
|
+
- Changing authentication
|
|
177
|
+
- Changing URL structure
|
|
178
|
+
|
|
179
|
+
**Example:**
|
|
180
|
+
```json
|
|
181
|
+
// v1
|
|
182
|
+
{
|
|
183
|
+
"id": 123,
|
|
184
|
+
"name": "John"
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// v2 - Breaking: Changed field name
|
|
188
|
+
{
|
|
189
|
+
"id": 123,
|
|
190
|
+
"fullName": "John" // Was "name" in v1
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Non-Breaking Changes (Same Version)
|
|
195
|
+
|
|
196
|
+
**Safe to Make:**
|
|
197
|
+
- Adding new fields
|
|
198
|
+
- Adding new endpoints
|
|
199
|
+
- Making optional fields required (with migration)
|
|
200
|
+
- Adding query parameters
|
|
201
|
+
- Improving error messages
|
|
202
|
+
|
|
203
|
+
**Example:**
|
|
204
|
+
```json
|
|
205
|
+
// v1
|
|
206
|
+
{
|
|
207
|
+
"id": 123,
|
|
208
|
+
"name": "John"
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// v1 (updated) - Non-breaking: Added field
|
|
212
|
+
{
|
|
213
|
+
"id": 123,
|
|
214
|
+
"name": "John",
|
|
215
|
+
"email": "john@example.com" // New field
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Implementation Patterns
|
|
220
|
+
|
|
221
|
+
### Version Detection
|
|
222
|
+
|
|
223
|
+
**Middleware:**
|
|
224
|
+
```python
|
|
225
|
+
from flask import request, g
|
|
226
|
+
|
|
227
|
+
@app.before_request
|
|
228
|
+
def detect_version():
|
|
229
|
+
# Check multiple sources
|
|
230
|
+
version = (
|
|
231
|
+
request.args.get('version') or
|
|
232
|
+
request.headers.get('API-Version') or
|
|
233
|
+
request.headers.get('X-API-Version') or
|
|
234
|
+
extract_from_accept_header() or
|
|
235
|
+
'1' # Default
|
|
236
|
+
)
|
|
237
|
+
g.api_version = version
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Version Routing
|
|
241
|
+
|
|
242
|
+
**Route Decorator:**
|
|
243
|
+
```python
|
|
244
|
+
def version_route(rule, **options):
|
|
245
|
+
def decorator(f):
|
|
246
|
+
@app.route(f'/api/v1{rule}', endpoint=f'v1_{f.__name__}', **options)
|
|
247
|
+
def v1_handler():
|
|
248
|
+
return f(version='1')
|
|
249
|
+
|
|
250
|
+
@app.route(f'/api/v2{rule}', endpoint=f'v2_{f.__name__}', **options)
|
|
251
|
+
def v2_handler():
|
|
252
|
+
return f(version='2')
|
|
253
|
+
|
|
254
|
+
return f
|
|
255
|
+
return decorator
|
|
256
|
+
|
|
257
|
+
@version_route('/users')
|
|
258
|
+
def users(version):
|
|
259
|
+
if version == '2':
|
|
260
|
+
return new_format()
|
|
261
|
+
return legacy_format()
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Version-Specific Handlers
|
|
265
|
+
|
|
266
|
+
**Separate Modules:**
|
|
267
|
+
```python
|
|
268
|
+
# api/v1/handlers.py
|
|
269
|
+
def get_users_v1():
|
|
270
|
+
return {"users": [...]} # Old format
|
|
271
|
+
|
|
272
|
+
# api/v2/handlers.py
|
|
273
|
+
def get_users_v2():
|
|
274
|
+
return {"data": [...]} # New format
|
|
275
|
+
|
|
276
|
+
# api/routes.py
|
|
277
|
+
from api.v1 import handlers as v1_handlers
|
|
278
|
+
from api.v2 import handlers as v2_handlers
|
|
279
|
+
|
|
280
|
+
app.register_blueprint(v1_handlers.bp, url_prefix='/api/v1')
|
|
281
|
+
app.register_blueprint(v2_handlers.bp, url_prefix='/api/v2')
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## Deprecation Strategy
|
|
285
|
+
|
|
286
|
+
### Deprecation Process
|
|
287
|
+
|
|
288
|
+
**Steps:**
|
|
289
|
+
1. Announce deprecation
|
|
290
|
+
2. Set deprecation date
|
|
291
|
+
3. Add deprecation headers
|
|
292
|
+
4. Provide migration guide
|
|
293
|
+
5. Monitor usage
|
|
294
|
+
6. Sunset after grace period
|
|
295
|
+
|
|
296
|
+
**Deprecation Headers:**
|
|
297
|
+
```http
|
|
298
|
+
HTTP/1.1 200 OK
|
|
299
|
+
Deprecation: true
|
|
300
|
+
Sunset: Sat, 01 Jan 2027 00:00:00 GMT
|
|
301
|
+
Link: <https://api.example.com/docs/v2>; rel="successor-version"
|
|
302
|
+
Warning: 299 - "API v1 is deprecated, migrate to v2"
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
**Implementation:**
|
|
306
|
+
```python
|
|
307
|
+
@app.route('/api/v1/users')
|
|
308
|
+
def users_v1():
|
|
309
|
+
response = jsonify(legacy_users())
|
|
310
|
+
response.headers['Deprecation'] = 'true'
|
|
311
|
+
response.headers['Sunset'] = 'Sat, 01 Jan 2027 00:00:00 GMT'
|
|
312
|
+
response.headers['Warning'] = '299 - "API v1 is deprecated"'
|
|
313
|
+
return response
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## Version Documentation
|
|
317
|
+
|
|
318
|
+
### Changelog
|
|
319
|
+
|
|
320
|
+
**Maintain Changelog:**
|
|
321
|
+
```markdown
|
|
322
|
+
# API Changelog
|
|
323
|
+
|
|
324
|
+
## v2.0.0 (2026-01-15)
|
|
325
|
+
### Breaking Changes
|
|
326
|
+
- Removed `name` field, use `fullName`
|
|
327
|
+
- Changed `GET /users` response format
|
|
328
|
+
|
|
329
|
+
### New Features
|
|
330
|
+
- Added pagination to all list endpoints
|
|
331
|
+
- Added filtering by `status`
|
|
332
|
+
|
|
333
|
+
## v1.2.0 (2025-12-01)
|
|
334
|
+
### New Features
|
|
335
|
+
- Added `email` field to User
|
|
336
|
+
- Added `GET /users/:id/posts` endpoint
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### Migration Guides
|
|
340
|
+
|
|
341
|
+
**Provide Clear Migration:**
|
|
342
|
+
```markdown
|
|
343
|
+
# Migrating from v1 to v2
|
|
344
|
+
|
|
345
|
+
## Response Format Changes
|
|
346
|
+
|
|
347
|
+
### v1 Response
|
|
348
|
+
```json
|
|
349
|
+
{
|
|
350
|
+
"users": [...]
|
|
351
|
+
}
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### v2 Response
|
|
355
|
+
```json
|
|
356
|
+
{
|
|
357
|
+
"data": [...],
|
|
358
|
+
"meta": {...}
|
|
359
|
+
}
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
## Field Name Changes
|
|
363
|
+
- `name` → `fullName`
|
|
364
|
+
- `created` → `createdAt`
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
## Best Practices
|
|
368
|
+
|
|
369
|
+
1. **Choose one strategy:** Be consistent
|
|
370
|
+
2. **Version major changes only:** Minor changes within version
|
|
371
|
+
3. **Document changes:** Clear changelogs and migration guides
|
|
372
|
+
4. **Deprecate gracefully:** Give clients time to migrate
|
|
373
|
+
5. **Monitor usage:** Track version adoption
|
|
374
|
+
6. **Sunset old versions:** Remove after deprecation period
|
|
375
|
+
7. **Default to latest:** When version not specified
|
|
376
|
+
8. **Test thoroughly:** Ensure backward compatibility
|
|
377
|
+
9. **Communicate clearly:** Announce changes early
|
|
378
|
+
10. **Support multiple versions:** During transition periods
|
|
379
|
+
|
|
380
|
+
## Common Patterns
|
|
381
|
+
|
|
382
|
+
### Default Version
|
|
383
|
+
|
|
384
|
+
**Use Latest:**
|
|
385
|
+
```python
|
|
386
|
+
def get_version():
|
|
387
|
+
version = extract_version() or get_latest_version()
|
|
388
|
+
return version
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
### Version Aliases
|
|
392
|
+
|
|
393
|
+
**Support "latest":**
|
|
394
|
+
```http
|
|
395
|
+
GET /api/latest/users # Maps to v2
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### Version Negotiation
|
|
399
|
+
|
|
400
|
+
**Content Negotiation:**
|
|
401
|
+
```http
|
|
402
|
+
GET /api/users
|
|
403
|
+
Accept: application/vnd.api+json;version=2
|
|
404
|
+
|
|
405
|
+
HTTP/1.1 200 OK
|
|
406
|
+
Content-Type: application/vnd.api+json;version=2
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
## Summary
|
|
410
|
+
|
|
411
|
+
Effective API versioning requires:
|
|
412
|
+
|
|
413
|
+
1. **Choose appropriate strategy:** URL path recommended for REST
|
|
414
|
+
2. **Version breaking changes:** Major version increments
|
|
415
|
+
3. **Maintain backward compatibility:** During transition
|
|
416
|
+
4. **Deprecate gracefully:** With clear timelines
|
|
417
|
+
5. **Document thoroughly:** Changelogs and migration guides
|
|
418
|
+
6. **Monitor adoption:** Track version usage
|
|
419
|
+
7. **Sunset old versions:** After deprecation period
|
|
420
|
+
8. **Test compatibility:** Ensure no regressions
|
|
421
|
+
|