tapps-agents 3.5.40__py3-none-any.whl → 3.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tapps_agents/__init__.py +2 -2
- tapps_agents/agents/__init__.py +22 -22
- tapps_agents/agents/analyst/__init__.py +5 -5
- tapps_agents/agents/architect/__init__.py +5 -5
- tapps_agents/agents/architect/agent.py +1033 -1033
- tapps_agents/agents/architect/pattern_detector.py +75 -75
- tapps_agents/agents/cleanup/__init__.py +7 -7
- tapps_agents/agents/cleanup/agent.py +445 -445
- tapps_agents/agents/debugger/__init__.py +7 -7
- tapps_agents/agents/debugger/agent.py +310 -310
- tapps_agents/agents/debugger/error_analyzer.py +437 -437
- tapps_agents/agents/designer/__init__.py +5 -5
- tapps_agents/agents/designer/agent.py +786 -786
- tapps_agents/agents/designer/visual_designer.py +638 -638
- tapps_agents/agents/documenter/__init__.py +7 -7
- tapps_agents/agents/documenter/agent.py +531 -531
- tapps_agents/agents/documenter/doc_generator.py +472 -472
- tapps_agents/agents/documenter/doc_validator.py +393 -393
- tapps_agents/agents/documenter/framework_doc_updater.py +493 -493
- tapps_agents/agents/enhancer/__init__.py +7 -7
- tapps_agents/agents/evaluator/__init__.py +7 -7
- tapps_agents/agents/evaluator/agent.py +443 -443
- tapps_agents/agents/evaluator/priority_evaluator.py +641 -641
- tapps_agents/agents/evaluator/quality_analyzer.py +147 -147
- tapps_agents/agents/evaluator/report_generator.py +344 -344
- tapps_agents/agents/evaluator/usage_analyzer.py +192 -192
- tapps_agents/agents/evaluator/workflow_analyzer.py +189 -189
- tapps_agents/agents/implementer/__init__.py +7 -7
- tapps_agents/agents/implementer/agent.py +798 -798
- tapps_agents/agents/implementer/auto_fix.py +1119 -1119
- tapps_agents/agents/implementer/code_generator.py +73 -73
- tapps_agents/agents/improver/__init__.py +1 -1
- tapps_agents/agents/improver/agent.py +753 -753
- tapps_agents/agents/ops/__init__.py +1 -1
- tapps_agents/agents/ops/agent.py +619 -619
- tapps_agents/agents/ops/dependency_analyzer.py +600 -600
- tapps_agents/agents/orchestrator/__init__.py +5 -5
- tapps_agents/agents/orchestrator/agent.py +522 -522
- tapps_agents/agents/planner/__init__.py +7 -7
- tapps_agents/agents/planner/agent.py +1127 -1127
- tapps_agents/agents/reviewer/__init__.py +24 -24
- tapps_agents/agents/reviewer/agent.py +3513 -3513
- tapps_agents/agents/reviewer/aggregator.py +213 -213
- tapps_agents/agents/reviewer/batch_review.py +448 -448
- tapps_agents/agents/reviewer/cache.py +443 -443
- tapps_agents/agents/reviewer/context7_enhancer.py +630 -630
- tapps_agents/agents/reviewer/context_detector.py +203 -203
- tapps_agents/agents/reviewer/docker_compose_validator.py +158 -158
- tapps_agents/agents/reviewer/dockerfile_validator.py +176 -176
- tapps_agents/agents/reviewer/error_handling.py +126 -126
- tapps_agents/agents/reviewer/feedback_generator.py +490 -490
- tapps_agents/agents/reviewer/influxdb_validator.py +316 -316
- tapps_agents/agents/reviewer/issue_tracking.py +169 -169
- tapps_agents/agents/reviewer/library_detector.py +295 -295
- tapps_agents/agents/reviewer/library_patterns.py +268 -268
- tapps_agents/agents/reviewer/maintainability_scorer.py +593 -593
- tapps_agents/agents/reviewer/metric_strategies.py +276 -276
- tapps_agents/agents/reviewer/mqtt_validator.py +160 -160
- tapps_agents/agents/reviewer/output_enhancer.py +105 -105
- tapps_agents/agents/reviewer/pattern_detector.py +241 -241
- tapps_agents/agents/reviewer/performance_scorer.py +357 -357
- tapps_agents/agents/reviewer/phased_review.py +516 -516
- tapps_agents/agents/reviewer/progressive_review.py +435 -435
- tapps_agents/agents/reviewer/react_scorer.py +331 -331
- tapps_agents/agents/reviewer/score_constants.py +228 -228
- tapps_agents/agents/reviewer/score_validator.py +507 -507
- tapps_agents/agents/reviewer/scorer_registry.py +373 -373
- tapps_agents/agents/reviewer/scoring.py +1566 -1566
- tapps_agents/agents/reviewer/service_discovery.py +534 -534
- tapps_agents/agents/reviewer/tools/__init__.py +41 -41
- tapps_agents/agents/reviewer/tools/parallel_executor.py +581 -581
- tapps_agents/agents/reviewer/tools/ruff_grouping.py +250 -250
- tapps_agents/agents/reviewer/tools/scoped_mypy.py +284 -284
- tapps_agents/agents/reviewer/typescript_scorer.py +1142 -1142
- tapps_agents/agents/reviewer/validation.py +208 -208
- tapps_agents/agents/reviewer/websocket_validator.py +132 -132
- tapps_agents/agents/tester/__init__.py +7 -7
- tapps_agents/agents/tester/accessibility_auditor.py +309 -309
- tapps_agents/agents/tester/agent.py +1080 -1080
- tapps_agents/agents/tester/batch_generator.py +54 -54
- tapps_agents/agents/tester/context_learner.py +51 -51
- tapps_agents/agents/tester/coverage_analyzer.py +386 -386
- tapps_agents/agents/tester/coverage_test_generator.py +290 -290
- tapps_agents/agents/tester/debug_enhancer.py +238 -238
- tapps_agents/agents/tester/device_emulator.py +241 -241
- tapps_agents/agents/tester/integration_generator.py +62 -62
- tapps_agents/agents/tester/network_recorder.py +300 -300
- tapps_agents/agents/tester/performance_monitor.py +320 -320
- tapps_agents/agents/tester/test_fixer.py +316 -316
- tapps_agents/agents/tester/test_generator.py +632 -632
- tapps_agents/agents/tester/trace_manager.py +234 -234
- tapps_agents/agents/tester/visual_regression.py +291 -291
- tapps_agents/analysis/pattern_detector.py +36 -36
- tapps_agents/beads/hydration.py +213 -213
- tapps_agents/beads/parse.py +32 -32
- tapps_agents/beads/specs.py +206 -206
- tapps_agents/cli/__init__.py +9 -9
- tapps_agents/cli/__main__.py +8 -8
- tapps_agents/cli/base.py +478 -478
- tapps_agents/cli/command_classifier.py +72 -72
- tapps_agents/cli/commands/__init__.py +2 -2
- tapps_agents/cli/commands/analyst.py +173 -173
- tapps_agents/cli/commands/architect.py +109 -109
- tapps_agents/cli/commands/cleanup_agent.py +92 -92
- tapps_agents/cli/commands/common.py +126 -126
- tapps_agents/cli/commands/debugger.py +90 -90
- tapps_agents/cli/commands/designer.py +112 -112
- tapps_agents/cli/commands/documenter.py +136 -136
- tapps_agents/cli/commands/enhancer.py +110 -110
- tapps_agents/cli/commands/evaluator.py +255 -255
- tapps_agents/cli/commands/health.py +665 -665
- tapps_agents/cli/commands/implementer.py +301 -301
- tapps_agents/cli/commands/improver.py +91 -91
- tapps_agents/cli/commands/knowledge.py +111 -111
- tapps_agents/cli/commands/learning.py +172 -172
- tapps_agents/cli/commands/observability.py +283 -283
- tapps_agents/cli/commands/ops.py +135 -135
- tapps_agents/cli/commands/orchestrator.py +116 -116
- tapps_agents/cli/commands/planner.py +237 -237
- tapps_agents/cli/commands/reviewer.py +1872 -1872
- tapps_agents/cli/commands/status.py +285 -285
- tapps_agents/cli/commands/task.py +227 -219
- tapps_agents/cli/commands/tester.py +191 -191
- tapps_agents/cli/commands/top_level.py +3586 -3586
- tapps_agents/cli/feedback.py +936 -936
- tapps_agents/cli/formatters.py +608 -608
- tapps_agents/cli/help/__init__.py +7 -7
- tapps_agents/cli/help/static_help.py +425 -425
- tapps_agents/cli/network_detection.py +110 -110
- tapps_agents/cli/output_compactor.py +274 -274
- tapps_agents/cli/parsers/__init__.py +2 -2
- tapps_agents/cli/parsers/analyst.py +186 -186
- tapps_agents/cli/parsers/architect.py +167 -167
- tapps_agents/cli/parsers/cleanup_agent.py +228 -228
- tapps_agents/cli/parsers/debugger.py +116 -116
- tapps_agents/cli/parsers/designer.py +182 -182
- tapps_agents/cli/parsers/documenter.py +134 -134
- tapps_agents/cli/parsers/enhancer.py +113 -113
- tapps_agents/cli/parsers/evaluator.py +213 -213
- tapps_agents/cli/parsers/implementer.py +168 -168
- tapps_agents/cli/parsers/improver.py +132 -132
- tapps_agents/cli/parsers/ops.py +159 -159
- tapps_agents/cli/parsers/orchestrator.py +98 -98
- tapps_agents/cli/parsers/planner.py +145 -145
- tapps_agents/cli/parsers/reviewer.py +462 -462
- tapps_agents/cli/parsers/tester.py +124 -124
- tapps_agents/cli/progress_heartbeat.py +254 -254
- tapps_agents/cli/streaming_progress.py +336 -336
- tapps_agents/cli/utils/__init__.py +6 -6
- tapps_agents/cli/utils/agent_lifecycle.py +48 -48
- tapps_agents/cli/utils/error_formatter.py +82 -82
- tapps_agents/cli/utils/error_recovery.py +188 -188
- tapps_agents/cli/utils/output_handler.py +59 -59
- tapps_agents/cli/utils/prompt_enhancer.py +319 -319
- tapps_agents/cli/validators/__init__.py +9 -9
- tapps_agents/cli/validators/command_validator.py +81 -81
- tapps_agents/context7/__init__.py +112 -112
- tapps_agents/context7/agent_integration.py +869 -869
- tapps_agents/context7/analytics.py +382 -382
- tapps_agents/context7/analytics_dashboard.py +299 -299
- tapps_agents/context7/async_cache.py +681 -681
- tapps_agents/context7/backup_client.py +958 -958
- tapps_agents/context7/cache_locking.py +194 -194
- tapps_agents/context7/cache_metadata.py +214 -214
- tapps_agents/context7/cache_prewarm.py +488 -488
- tapps_agents/context7/cache_structure.py +168 -168
- tapps_agents/context7/cache_warming.py +604 -604
- tapps_agents/context7/circuit_breaker.py +376 -376
- tapps_agents/context7/cleanup.py +461 -461
- tapps_agents/context7/commands.py +858 -858
- tapps_agents/context7/credential_validation.py +276 -276
- tapps_agents/context7/cross_reference_resolver.py +168 -168
- tapps_agents/context7/cross_references.py +424 -424
- tapps_agents/context7/doc_manager.py +225 -225
- tapps_agents/context7/fuzzy_matcher.py +369 -369
- tapps_agents/context7/kb_cache.py +404 -404
- tapps_agents/context7/language_detector.py +219 -219
- tapps_agents/context7/library_detector.py +725 -725
- tapps_agents/context7/lookup.py +738 -738
- tapps_agents/context7/metadata.py +258 -258
- tapps_agents/context7/refresh_queue.py +300 -300
- tapps_agents/context7/security.py +373 -373
- tapps_agents/context7/staleness_policies.py +278 -278
- tapps_agents/context7/tiles_integration.py +47 -47
- tapps_agents/continuous_bug_fix/__init__.py +20 -20
- tapps_agents/continuous_bug_fix/bug_finder.py +306 -306
- tapps_agents/continuous_bug_fix/bug_fix_coordinator.py +177 -177
- tapps_agents/continuous_bug_fix/commit_manager.py +178 -178
- tapps_agents/continuous_bug_fix/continuous_bug_fixer.py +322 -322
- tapps_agents/continuous_bug_fix/proactive_bug_finder.py +285 -285
- tapps_agents/core/__init__.py +298 -298
- tapps_agents/core/adaptive_cache_config.py +432 -432
- tapps_agents/core/agent_base.py +647 -647
- tapps_agents/core/agent_cache.py +466 -466
- tapps_agents/core/agent_learning.py +1865 -1865
- tapps_agents/core/analytics_dashboard.py +563 -563
- tapps_agents/core/analytics_enhancements.py +597 -597
- tapps_agents/core/anonymization.py +274 -274
- tapps_agents/core/artifact_context_builder.py +293 -0
- tapps_agents/core/ast_parser.py +228 -228
- tapps_agents/core/async_file_ops.py +402 -402
- tapps_agents/core/best_practice_consultant.py +299 -299
- tapps_agents/core/brownfield_analyzer.py +299 -299
- tapps_agents/core/brownfield_review.py +541 -541
- tapps_agents/core/browser_controller.py +513 -513
- tapps_agents/core/capability_registry.py +418 -418
- tapps_agents/core/change_impact_analyzer.py +190 -190
- tapps_agents/core/checkpoint_manager.py +377 -377
- tapps_agents/core/code_generator.py +329 -329
- tapps_agents/core/code_validator.py +276 -276
- tapps_agents/core/command_registry.py +327 -327
- tapps_agents/core/config.py +33 -0
- tapps_agents/core/context_gathering/__init__.py +2 -2
- tapps_agents/core/context_gathering/repository_explorer.py +28 -28
- tapps_agents/core/context_intelligence/__init__.py +2 -2
- tapps_agents/core/context_intelligence/relevance_scorer.py +24 -24
- tapps_agents/core/context_intelligence/token_budget_manager.py +27 -27
- tapps_agents/core/context_manager.py +240 -240
- tapps_agents/core/cursor_feedback_monitor.py +146 -146
- tapps_agents/core/cursor_verification.py +290 -290
- tapps_agents/core/customization_loader.py +280 -280
- tapps_agents/core/customization_schema.py +260 -260
- tapps_agents/core/customization_template.py +238 -238
- tapps_agents/core/debug_logger.py +124 -124
- tapps_agents/core/design_validator.py +298 -298
- tapps_agents/core/diagram_generator.py +226 -226
- tapps_agents/core/docker_utils.py +232 -232
- tapps_agents/core/document_generator.py +617 -617
- tapps_agents/core/domain_detector.py +30 -30
- tapps_agents/core/error_envelope.py +454 -454
- tapps_agents/core/error_handler.py +270 -270
- tapps_agents/core/estimation_tracker.py +189 -189
- tapps_agents/core/eval_prompt_engine.py +116 -116
- tapps_agents/core/evaluation_base.py +119 -119
- tapps_agents/core/evaluation_models.py +320 -320
- tapps_agents/core/evaluation_orchestrator.py +225 -225
- tapps_agents/core/evaluators/__init__.py +7 -7
- tapps_agents/core/evaluators/architectural_evaluator.py +205 -205
- tapps_agents/core/evaluators/behavioral_evaluator.py +160 -160
- tapps_agents/core/evaluators/performance_profile_evaluator.py +160 -160
- tapps_agents/core/evaluators/security_posture_evaluator.py +148 -148
- tapps_agents/core/evaluators/spec_compliance_evaluator.py +181 -181
- tapps_agents/core/exceptions.py +107 -107
- tapps_agents/core/expert_config_generator.py +293 -293
- tapps_agents/core/export_schema.py +202 -202
- tapps_agents/core/external_feedback_models.py +102 -102
- tapps_agents/core/external_feedback_storage.py +213 -213
- tapps_agents/core/fallback_strategy.py +314 -314
- tapps_agents/core/feedback_analyzer.py +162 -162
- tapps_agents/core/feedback_collector.py +178 -178
- tapps_agents/core/git_operations.py +445 -445
- tapps_agents/core/hardware_profiler.py +151 -151
- tapps_agents/core/instructions.py +324 -324
- tapps_agents/core/io_guardrails.py +69 -69
- tapps_agents/core/issue_manifest.py +249 -249
- tapps_agents/core/issue_schema.py +139 -139
- tapps_agents/core/json_utils.py +128 -128
- tapps_agents/core/knowledge_graph.py +446 -446
- tapps_agents/core/language_detector.py +296 -296
- tapps_agents/core/learning_confidence.py +242 -242
- tapps_agents/core/learning_dashboard.py +246 -246
- tapps_agents/core/learning_decision.py +384 -384
- tapps_agents/core/learning_explainability.py +578 -578
- tapps_agents/core/learning_export.py +287 -287
- tapps_agents/core/learning_integration.py +228 -228
- tapps_agents/core/llm_behavior.py +232 -232
- tapps_agents/core/long_duration_support.py +786 -786
- tapps_agents/core/mcp_setup.py +106 -106
- tapps_agents/core/memory_integration.py +396 -396
- tapps_agents/core/meta_learning.py +666 -666
- tapps_agents/core/module_path_sanitizer.py +199 -199
- tapps_agents/core/multi_agent_orchestrator.py +382 -382
- tapps_agents/core/network_errors.py +125 -125
- tapps_agents/core/nfr_validator.py +336 -336
- tapps_agents/core/offline_mode.py +158 -158
- tapps_agents/core/output_contracts.py +300 -300
- tapps_agents/core/output_formatter.py +300 -300
- tapps_agents/core/path_normalizer.py +174 -174
- tapps_agents/core/path_validator.py +322 -322
- tapps_agents/core/pattern_library.py +250 -250
- tapps_agents/core/performance_benchmark.py +301 -301
- tapps_agents/core/performance_monitor.py +184 -184
- tapps_agents/core/playwright_mcp_controller.py +771 -771
- tapps_agents/core/policy_loader.py +135 -135
- tapps_agents/core/progress.py +166 -166
- tapps_agents/core/project_profile.py +354 -354
- tapps_agents/core/project_type_detector.py +454 -454
- tapps_agents/core/prompt_base.py +223 -223
- tapps_agents/core/prompt_learning/__init__.py +2 -2
- tapps_agents/core/prompt_learning/learning_loop.py +24 -24
- tapps_agents/core/prompt_learning/project_prompt_store.py +25 -25
- tapps_agents/core/prompt_learning/skills_prompt_analyzer.py +35 -35
- tapps_agents/core/prompt_optimization/__init__.py +6 -6
- tapps_agents/core/prompt_optimization/ab_tester.py +114 -114
- tapps_agents/core/prompt_optimization/correlation_analyzer.py +160 -160
- tapps_agents/core/prompt_optimization/progressive_refiner.py +129 -129
- tapps_agents/core/prompt_optimization/prompt_library.py +37 -37
- tapps_agents/core/requirements_evaluator.py +431 -431
- tapps_agents/core/resource_aware_executor.py +449 -449
- tapps_agents/core/resource_monitor.py +343 -343
- tapps_agents/core/resume_handler.py +298 -298
- tapps_agents/core/retry_handler.py +197 -197
- tapps_agents/core/review_checklists.py +479 -479
- tapps_agents/core/role_loader.py +201 -201
- tapps_agents/core/role_template_loader.py +201 -201
- tapps_agents/core/runtime_mode.py +60 -60
- tapps_agents/core/security_scanner.py +342 -342
- tapps_agents/core/skill_agent_registry.py +194 -194
- tapps_agents/core/skill_integration.py +208 -208
- tapps_agents/core/skill_loader.py +492 -492
- tapps_agents/core/skill_template.py +341 -341
- tapps_agents/core/skill_validator.py +478 -478
- tapps_agents/core/stack_analyzer.py +35 -35
- tapps_agents/core/startup.py +174 -174
- tapps_agents/core/storage_manager.py +397 -397
- tapps_agents/core/storage_models.py +166 -166
- tapps_agents/core/story_evaluator.py +410 -410
- tapps_agents/core/subprocess_utils.py +170 -170
- tapps_agents/core/task_duration.py +296 -296
- tapps_agents/core/task_memory.py +582 -582
- tapps_agents/core/task_state.py +226 -226
- tapps_agents/core/tech_stack_priorities.py +208 -208
- tapps_agents/core/temp_directory.py +194 -194
- tapps_agents/core/template_merger.py +600 -600
- tapps_agents/core/template_selector.py +280 -280
- tapps_agents/core/test_generator.py +286 -286
- tapps_agents/core/tiered_context.py +253 -253
- tapps_agents/core/token_monitor.py +345 -345
- tapps_agents/core/traceability.py +254 -254
- tapps_agents/core/trajectory_tracker.py +50 -50
- tapps_agents/core/unicode_safe.py +143 -143
- tapps_agents/core/unified_cache_config.py +170 -170
- tapps_agents/core/unified_state.py +324 -324
- tapps_agents/core/validate_cursor_setup.py +237 -237
- tapps_agents/core/validation_registry.py +136 -136
- tapps_agents/core/validators/__init__.py +4 -4
- tapps_agents/core/validators/python_validator.py +87 -87
- tapps_agents/core/verification_agent.py +90 -90
- tapps_agents/core/visual_feedback.py +644 -644
- tapps_agents/core/workflow_validator.py +197 -197
- tapps_agents/core/worktree.py +367 -367
- tapps_agents/docker/__init__.py +10 -10
- tapps_agents/docker/analyzer.py +186 -186
- tapps_agents/docker/debugger.py +229 -229
- tapps_agents/docker/error_patterns.py +216 -216
- tapps_agents/epic/__init__.py +22 -22
- tapps_agents/epic/beads_sync.py +115 -115
- tapps_agents/epic/markdown_sync.py +105 -105
- tapps_agents/epic/models.py +96 -96
- tapps_agents/experts/__init__.py +163 -163
- tapps_agents/experts/agent_integration.py +243 -243
- tapps_agents/experts/auto_generator.py +331 -331
- tapps_agents/experts/base_expert.py +536 -536
- tapps_agents/experts/builtin_registry.py +261 -261
- tapps_agents/experts/business_metrics.py +565 -565
- tapps_agents/experts/cache.py +266 -266
- tapps_agents/experts/confidence_breakdown.py +306 -306
- tapps_agents/experts/confidence_calculator.py +336 -336
- tapps_agents/experts/confidence_metrics.py +236 -236
- tapps_agents/experts/domain_config.py +311 -311
- tapps_agents/experts/domain_detector.py +550 -550
- tapps_agents/experts/domain_utils.py +84 -84
- tapps_agents/experts/expert_config.py +113 -113
- tapps_agents/experts/expert_engine.py +465 -465
- tapps_agents/experts/expert_registry.py +744 -744
- tapps_agents/experts/expert_synthesizer.py +70 -70
- tapps_agents/experts/governance.py +197 -197
- tapps_agents/experts/history_logger.py +312 -312
- tapps_agents/experts/knowledge/README.md +180 -180
- tapps_agents/experts/knowledge/accessibility/accessible-forms.md +331 -331
- tapps_agents/experts/knowledge/accessibility/aria-patterns.md +344 -344
- tapps_agents/experts/knowledge/accessibility/color-contrast.md +285 -285
- tapps_agents/experts/knowledge/accessibility/keyboard-navigation.md +332 -332
- tapps_agents/experts/knowledge/accessibility/screen-readers.md +282 -282
- tapps_agents/experts/knowledge/accessibility/semantic-html.md +355 -355
- tapps_agents/experts/knowledge/accessibility/testing-accessibility.md +369 -369
- tapps_agents/experts/knowledge/accessibility/wcag-2.1.md +296 -296
- tapps_agents/experts/knowledge/accessibility/wcag-2.2.md +211 -211
- tapps_agents/experts/knowledge/agent-learning/best-practices.md +715 -715
- tapps_agents/experts/knowledge/agent-learning/pattern-extraction.md +282 -282
- tapps_agents/experts/knowledge/agent-learning/prompt-optimization.md +320 -320
- tapps_agents/experts/knowledge/ai-frameworks/model-optimization.md +90 -90
- tapps_agents/experts/knowledge/ai-frameworks/openvino-patterns.md +260 -260
- tapps_agents/experts/knowledge/api-design-integration/api-gateway-patterns.md +309 -309
- tapps_agents/experts/knowledge/api-design-integration/api-security-patterns.md +521 -521
- tapps_agents/experts/knowledge/api-design-integration/api-versioning.md +421 -421
- tapps_agents/experts/knowledge/api-design-integration/async-protocol-patterns.md +61 -61
- tapps_agents/experts/knowledge/api-design-integration/contract-testing.md +221 -221
- tapps_agents/experts/knowledge/api-design-integration/external-api-integration.md +489 -489
- tapps_agents/experts/knowledge/api-design-integration/fastapi-patterns.md +360 -360
- tapps_agents/experts/knowledge/api-design-integration/fastapi-testing.md +262 -262
- tapps_agents/experts/knowledge/api-design-integration/graphql-patterns.md +582 -582
- tapps_agents/experts/knowledge/api-design-integration/grpc-best-practices.md +499 -499
- tapps_agents/experts/knowledge/api-design-integration/mqtt-patterns.md +455 -455
- tapps_agents/experts/knowledge/api-design-integration/rate-limiting.md +507 -507
- tapps_agents/experts/knowledge/api-design-integration/restful-api-design.md +618 -618
- tapps_agents/experts/knowledge/api-design-integration/websocket-patterns.md +480 -480
- tapps_agents/experts/knowledge/cloud-infrastructure/cloud-native-patterns.md +175 -175
- tapps_agents/experts/knowledge/cloud-infrastructure/container-health-checks.md +261 -261
- tapps_agents/experts/knowledge/cloud-infrastructure/containerization.md +222 -222
- tapps_agents/experts/knowledge/cloud-infrastructure/cost-optimization.md +122 -122
- tapps_agents/experts/knowledge/cloud-infrastructure/disaster-recovery.md +153 -153
- tapps_agents/experts/knowledge/cloud-infrastructure/dockerfile-patterns.md +285 -285
- tapps_agents/experts/knowledge/cloud-infrastructure/infrastructure-as-code.md +187 -187
- tapps_agents/experts/knowledge/cloud-infrastructure/kubernetes-patterns.md +253 -253
- tapps_agents/experts/knowledge/cloud-infrastructure/multi-cloud-strategies.md +155 -155
- tapps_agents/experts/knowledge/cloud-infrastructure/serverless-architecture.md +200 -200
- tapps_agents/experts/knowledge/code-quality-analysis/README.md +16 -16
- tapps_agents/experts/knowledge/code-quality-analysis/code-metrics.md +137 -137
- tapps_agents/experts/knowledge/code-quality-analysis/complexity-analysis.md +181 -181
- tapps_agents/experts/knowledge/code-quality-analysis/technical-debt-patterns.md +191 -191
- tapps_agents/experts/knowledge/data-privacy-compliance/anonymization.md +313 -313
- tapps_agents/experts/knowledge/data-privacy-compliance/ccpa.md +255 -255
- tapps_agents/experts/knowledge/data-privacy-compliance/consent-management.md +282 -282
- tapps_agents/experts/knowledge/data-privacy-compliance/data-minimization.md +275 -275
- tapps_agents/experts/knowledge/data-privacy-compliance/data-retention.md +297 -297
- tapps_agents/experts/knowledge/data-privacy-compliance/data-subject-rights.md +383 -383
- tapps_agents/experts/knowledge/data-privacy-compliance/encryption-privacy.md +285 -285
- tapps_agents/experts/knowledge/data-privacy-compliance/gdpr.md +344 -344
- tapps_agents/experts/knowledge/data-privacy-compliance/hipaa.md +385 -385
- tapps_agents/experts/knowledge/data-privacy-compliance/privacy-by-design.md +280 -280
- tapps_agents/experts/knowledge/database-data-management/acid-vs-cap.md +164 -164
- tapps_agents/experts/knowledge/database-data-management/backup-and-recovery.md +182 -182
- tapps_agents/experts/knowledge/database-data-management/data-modeling.md +172 -172
- tapps_agents/experts/knowledge/database-data-management/database-design.md +187 -187
- tapps_agents/experts/knowledge/database-data-management/flux-query-optimization.md +342 -342
- tapps_agents/experts/knowledge/database-data-management/influxdb-connection-patterns.md +432 -432
- tapps_agents/experts/knowledge/database-data-management/influxdb-patterns.md +442 -442
- tapps_agents/experts/knowledge/database-data-management/migration-strategies.md +216 -216
- tapps_agents/experts/knowledge/database-data-management/nosql-patterns.md +259 -259
- tapps_agents/experts/knowledge/database-data-management/scalability-patterns.md +184 -184
- tapps_agents/experts/knowledge/database-data-management/sql-optimization.md +175 -175
- tapps_agents/experts/knowledge/database-data-management/time-series-modeling.md +444 -444
- tapps_agents/experts/knowledge/development-workflow/README.md +16 -16
- tapps_agents/experts/knowledge/development-workflow/automation-best-practices.md +216 -216
- tapps_agents/experts/knowledge/development-workflow/build-strategies.md +198 -198
- tapps_agents/experts/knowledge/development-workflow/deployment-patterns.md +205 -205
- tapps_agents/experts/knowledge/development-workflow/git-workflows.md +205 -205
- tapps_agents/experts/knowledge/documentation-knowledge-management/README.md +16 -16
- tapps_agents/experts/knowledge/documentation-knowledge-management/api-documentation-patterns.md +231 -231
- tapps_agents/experts/knowledge/documentation-knowledge-management/documentation-standards.md +191 -191
- tapps_agents/experts/knowledge/documentation-knowledge-management/knowledge-management.md +171 -171
- tapps_agents/experts/knowledge/documentation-knowledge-management/technical-writing-guide.md +192 -192
- tapps_agents/experts/knowledge/observability-monitoring/alerting-patterns.md +461 -461
- tapps_agents/experts/knowledge/observability-monitoring/apm-tools.md +459 -459
- tapps_agents/experts/knowledge/observability-monitoring/distributed-tracing.md +367 -367
- tapps_agents/experts/knowledge/observability-monitoring/logging-strategies.md +478 -478
- tapps_agents/experts/knowledge/observability-monitoring/metrics-and-monitoring.md +510 -510
- tapps_agents/experts/knowledge/observability-monitoring/observability-best-practices.md +492 -492
- tapps_agents/experts/knowledge/observability-monitoring/open-telemetry.md +573 -573
- tapps_agents/experts/knowledge/observability-monitoring/slo-sli-sla.md +419 -419
- tapps_agents/experts/knowledge/performance/anti-patterns.md +284 -284
- tapps_agents/experts/knowledge/performance/api-performance.md +256 -256
- tapps_agents/experts/knowledge/performance/caching.md +327 -327
- tapps_agents/experts/knowledge/performance/database-performance.md +252 -252
- tapps_agents/experts/knowledge/performance/optimization-patterns.md +327 -327
- tapps_agents/experts/knowledge/performance/profiling.md +297 -297
- tapps_agents/experts/knowledge/performance/resource-management.md +293 -293
- tapps_agents/experts/knowledge/performance/scalability.md +306 -306
- tapps_agents/experts/knowledge/security/owasp-top10.md +209 -209
- tapps_agents/experts/knowledge/security/secure-coding-practices.md +207 -207
- tapps_agents/experts/knowledge/security/threat-modeling.md +220 -220
- tapps_agents/experts/knowledge/security/vulnerability-patterns.md +342 -342
- tapps_agents/experts/knowledge/software-architecture/docker-compose-patterns.md +314 -314
- tapps_agents/experts/knowledge/software-architecture/microservices-patterns.md +379 -379
- tapps_agents/experts/knowledge/software-architecture/service-communication.md +316 -316
- tapps_agents/experts/knowledge/testing/best-practices.md +310 -310
- tapps_agents/experts/knowledge/testing/coverage-analysis.md +293 -293
- tapps_agents/experts/knowledge/testing/mocking.md +256 -256
- tapps_agents/experts/knowledge/testing/test-automation.md +276 -276
- tapps_agents/experts/knowledge/testing/test-data.md +271 -271
- tapps_agents/experts/knowledge/testing/test-design-patterns.md +280 -280
- tapps_agents/experts/knowledge/testing/test-maintenance.md +236 -236
- tapps_agents/experts/knowledge/testing/test-strategies.md +311 -311
- tapps_agents/experts/knowledge/user-experience/information-architecture.md +325 -325
- tapps_agents/experts/knowledge/user-experience/interaction-design.md +363 -363
- tapps_agents/experts/knowledge/user-experience/prototyping.md +293 -293
- tapps_agents/experts/knowledge/user-experience/usability-heuristics.md +337 -337
- tapps_agents/experts/knowledge/user-experience/usability-testing.md +311 -311
- tapps_agents/experts/knowledge/user-experience/user-journeys.md +296 -296
- tapps_agents/experts/knowledge/user-experience/user-research.md +373 -373
- tapps_agents/experts/knowledge/user-experience/ux-principles.md +340 -340
- tapps_agents/experts/knowledge_freshness.py +321 -321
- tapps_agents/experts/knowledge_ingestion.py +438 -438
- tapps_agents/experts/knowledge_need_detector.py +93 -93
- tapps_agents/experts/knowledge_validator.py +382 -382
- tapps_agents/experts/observability.py +440 -440
- tapps_agents/experts/passive_notifier.py +238 -238
- tapps_agents/experts/proactive_orchestrator.py +32 -32
- tapps_agents/experts/rag_chunker.py +205 -205
- tapps_agents/experts/rag_embedder.py +152 -152
- tapps_agents/experts/rag_evaluation.py +299 -299
- tapps_agents/experts/rag_index.py +303 -303
- tapps_agents/experts/rag_metrics.py +293 -293
- tapps_agents/experts/rag_safety.py +263 -263
- tapps_agents/experts/report_generator.py +296 -296
- tapps_agents/experts/setup_wizard.py +441 -441
- tapps_agents/experts/simple_rag.py +431 -431
- tapps_agents/experts/vector_rag.py +354 -354
- tapps_agents/experts/weight_distributor.py +304 -304
- tapps_agents/health/__init__.py +24 -24
- tapps_agents/health/base.py +75 -75
- tapps_agents/health/checks/__init__.py +22 -22
- tapps_agents/health/checks/automation.py +127 -127
- tapps_agents/health/checks/context7_cache.py +210 -210
- tapps_agents/health/checks/environment.py +116 -116
- tapps_agents/health/checks/execution.py +170 -170
- tapps_agents/health/checks/knowledge_base.py +187 -187
- tapps_agents/health/checks/outcomes.py +324 -324
- tapps_agents/health/collector.py +280 -280
- tapps_agents/health/dashboard.py +137 -137
- tapps_agents/health/metrics.py +151 -151
- tapps_agents/health/orchestrator.py +271 -271
- tapps_agents/health/registry.py +166 -166
- tapps_agents/hooks/__init__.py +33 -33
- tapps_agents/hooks/config.py +140 -140
- tapps_agents/hooks/events.py +135 -135
- tapps_agents/hooks/executor.py +128 -128
- tapps_agents/hooks/manager.py +143 -143
- tapps_agents/integration/__init__.py +8 -8
- tapps_agents/integration/service_integrator.py +121 -121
- tapps_agents/integrations/__init__.py +10 -10
- tapps_agents/integrations/clawdbot.py +525 -525
- tapps_agents/integrations/memory_bridge.py +356 -356
- tapps_agents/mcp/__init__.py +18 -18
- tapps_agents/mcp/gateway.py +112 -112
- tapps_agents/mcp/servers/__init__.py +13 -13
- tapps_agents/mcp/servers/analysis.py +204 -204
- tapps_agents/mcp/servers/context7.py +198 -198
- tapps_agents/mcp/servers/filesystem.py +218 -218
- tapps_agents/mcp/servers/git.py +201 -201
- tapps_agents/mcp/tool_registry.py +115 -115
- tapps_agents/quality/__init__.py +54 -54
- tapps_agents/quality/coverage_analyzer.py +379 -379
- tapps_agents/quality/enforcement.py +82 -82
- tapps_agents/quality/gates/__init__.py +37 -37
- tapps_agents/quality/gates/approval_gate.py +255 -255
- tapps_agents/quality/gates/base.py +84 -84
- tapps_agents/quality/gates/exceptions.py +43 -43
- tapps_agents/quality/gates/policy_gate.py +195 -195
- tapps_agents/quality/gates/registry.py +239 -239
- tapps_agents/quality/gates/security_gate.py +156 -156
- tapps_agents/quality/quality_gates.py +369 -369
- tapps_agents/quality/secret_scanner.py +335 -335
- tapps_agents/session/__init__.py +19 -19
- tapps_agents/session/manager.py +256 -256
- tapps_agents/simple_mode/__init__.py +66 -66
- tapps_agents/simple_mode/agent_contracts.py +357 -357
- tapps_agents/simple_mode/beads_hooks.py +151 -151
- tapps_agents/simple_mode/code_snippet_handler.py +382 -382
- tapps_agents/simple_mode/documentation_manager.py +395 -395
- tapps_agents/simple_mode/documentation_reader.py +187 -187
- tapps_agents/simple_mode/file_inference.py +292 -292
- tapps_agents/simple_mode/framework_change_detector.py +268 -268
- tapps_agents/simple_mode/intent_parser.py +510 -510
- tapps_agents/simple_mode/learning_progression.py +358 -358
- tapps_agents/simple_mode/nl_handler.py +700 -700
- tapps_agents/simple_mode/onboarding.py +253 -253
- tapps_agents/simple_mode/orchestrators/__init__.py +38 -38
- tapps_agents/simple_mode/orchestrators/base.py +185 -185
- tapps_agents/simple_mode/orchestrators/breakdown_orchestrator.py +49 -49
- tapps_agents/simple_mode/orchestrators/brownfield_orchestrator.py +135 -135
- tapps_agents/simple_mode/orchestrators/build_orchestrator.py +2700 -2667
- tapps_agents/simple_mode/orchestrators/deliverable_checklist.py +349 -349
- tapps_agents/simple_mode/orchestrators/enhance_orchestrator.py +53 -53
- tapps_agents/simple_mode/orchestrators/epic_orchestrator.py +122 -122
- tapps_agents/simple_mode/orchestrators/explore_orchestrator.py +184 -184
- tapps_agents/simple_mode/orchestrators/fix_orchestrator.py +723 -723
- tapps_agents/simple_mode/orchestrators/plan_analysis_orchestrator.py +206 -206
- tapps_agents/simple_mode/orchestrators/pr_orchestrator.py +237 -237
- tapps_agents/simple_mode/orchestrators/refactor_orchestrator.py +222 -222
- tapps_agents/simple_mode/orchestrators/requirements_tracer.py +262 -262
- tapps_agents/simple_mode/orchestrators/resume_orchestrator.py +210 -210
- tapps_agents/simple_mode/orchestrators/review_orchestrator.py +161 -161
- tapps_agents/simple_mode/orchestrators/test_orchestrator.py +82 -82
- tapps_agents/simple_mode/output_aggregator.py +340 -340
- tapps_agents/simple_mode/result_formatters.py +598 -598
- tapps_agents/simple_mode/step_dependencies.py +382 -382
- tapps_agents/simple_mode/step_results.py +276 -276
- tapps_agents/simple_mode/streaming.py +388 -388
- tapps_agents/simple_mode/variations.py +129 -129
- tapps_agents/simple_mode/visual_feedback.py +238 -238
- tapps_agents/simple_mode/zero_config.py +274 -274
- tapps_agents/suggestions/__init__.py +8 -8
- tapps_agents/suggestions/inline_suggester.py +52 -52
- tapps_agents/templates/__init__.py +8 -8
- tapps_agents/templates/microservice_generator.py +274 -274
- tapps_agents/utils/env_validator.py +291 -291
- tapps_agents/workflow/__init__.py +171 -171
- tapps_agents/workflow/acceptance_verifier.py +132 -132
- tapps_agents/workflow/agent_handlers/__init__.py +41 -41
- tapps_agents/workflow/agent_handlers/analyst_handler.py +75 -75
- tapps_agents/workflow/agent_handlers/architect_handler.py +107 -107
- tapps_agents/workflow/agent_handlers/base.py +84 -84
- tapps_agents/workflow/agent_handlers/debugger_handler.py +100 -100
- tapps_agents/workflow/agent_handlers/designer_handler.py +110 -110
- tapps_agents/workflow/agent_handlers/documenter_handler.py +94 -94
- tapps_agents/workflow/agent_handlers/implementer_handler.py +235 -235
- tapps_agents/workflow/agent_handlers/ops_handler.py +62 -62
- tapps_agents/workflow/agent_handlers/orchestrator_handler.py +43 -43
- tapps_agents/workflow/agent_handlers/planner_handler.py +98 -98
- tapps_agents/workflow/agent_handlers/registry.py +119 -119
- tapps_agents/workflow/agent_handlers/reviewer_handler.py +119 -119
- tapps_agents/workflow/agent_handlers/tester_handler.py +69 -69
- tapps_agents/workflow/analytics_accessor.py +337 -337
- tapps_agents/workflow/analytics_alerts.py +416 -416
- tapps_agents/workflow/analytics_dashboard_cursor.py +281 -281
- tapps_agents/workflow/analytics_dual_write.py +103 -103
- tapps_agents/workflow/analytics_integration.py +119 -119
- tapps_agents/workflow/analytics_query_parser.py +278 -278
- tapps_agents/workflow/analytics_visualizer.py +259 -259
- tapps_agents/workflow/artifact_helper.py +204 -204
- tapps_agents/workflow/audit_logger.py +263 -263
- tapps_agents/workflow/auto_execution_config.py +340 -340
- tapps_agents/workflow/auto_progression.py +586 -586
- tapps_agents/workflow/branch_cleanup.py +349 -349
- tapps_agents/workflow/checkpoint.py +256 -256
- tapps_agents/workflow/checkpoint_manager.py +178 -178
- tapps_agents/workflow/code_artifact.py +179 -179
- tapps_agents/workflow/common_enums.py +96 -96
- tapps_agents/workflow/confirmation_handler.py +130 -130
- tapps_agents/workflow/context_analyzer.py +222 -222
- tapps_agents/workflow/context_artifact.py +230 -230
- tapps_agents/workflow/cursor_chat.py +94 -94
- tapps_agents/workflow/cursor_executor.py +2337 -2196
- tapps_agents/workflow/cursor_skill_helper.py +516 -516
- tapps_agents/workflow/dependency_resolver.py +244 -244
- tapps_agents/workflow/design_artifact.py +156 -156
- tapps_agents/workflow/detector.py +751 -751
- tapps_agents/workflow/direct_execution_fallback.py +301 -301
- tapps_agents/workflow/docs_artifact.py +168 -168
- tapps_agents/workflow/enforcer.py +389 -389
- tapps_agents/workflow/enhancement_artifact.py +142 -142
- tapps_agents/workflow/error_recovery.py +806 -806
- tapps_agents/workflow/event_bus.py +183 -183
- tapps_agents/workflow/event_log.py +612 -612
- tapps_agents/workflow/events.py +63 -63
- tapps_agents/workflow/exceptions.py +43 -43
- tapps_agents/workflow/execution_graph.py +498 -498
- tapps_agents/workflow/execution_plan.py +126 -126
- tapps_agents/workflow/file_utils.py +186 -186
- tapps_agents/workflow/gate_evaluator.py +182 -182
- tapps_agents/workflow/gate_integration.py +200 -200
- tapps_agents/workflow/graph_visualizer.py +130 -130
- tapps_agents/workflow/health_checker.py +206 -206
- tapps_agents/workflow/logging_helper.py +243 -243
- tapps_agents/workflow/manifest.py +582 -582
- tapps_agents/workflow/marker_writer.py +250 -250
- tapps_agents/workflow/message_formatter.py +188 -188
- tapps_agents/workflow/messaging.py +325 -325
- tapps_agents/workflow/metadata_models.py +91 -91
- tapps_agents/workflow/metrics_integration.py +226 -226
- tapps_agents/workflow/migration_utils.py +116 -116
- tapps_agents/workflow/models.py +148 -111
- tapps_agents/workflow/nlp_config.py +198 -198
- tapps_agents/workflow/nlp_error_handler.py +207 -207
- tapps_agents/workflow/nlp_executor.py +163 -163
- tapps_agents/workflow/nlp_parser.py +528 -528
- tapps_agents/workflow/observability_dashboard.py +451 -451
- tapps_agents/workflow/observer.py +170 -170
- tapps_agents/workflow/ops_artifact.py +257 -257
- tapps_agents/workflow/output_passing.py +214 -214
- tapps_agents/workflow/parallel_executor.py +463 -463
- tapps_agents/workflow/planning_artifact.py +179 -179
- tapps_agents/workflow/preset_loader.py +285 -285
- tapps_agents/workflow/preset_recommender.py +270 -270
- tapps_agents/workflow/progress_logger.py +145 -145
- tapps_agents/workflow/progress_manager.py +303 -303
- tapps_agents/workflow/progress_monitor.py +186 -186
- tapps_agents/workflow/progress_updates.py +423 -423
- tapps_agents/workflow/quality_artifact.py +158 -158
- tapps_agents/workflow/quality_loopback.py +101 -101
- tapps_agents/workflow/recommender.py +387 -387
- tapps_agents/workflow/remediation_loop.py +166 -166
- tapps_agents/workflow/result_aggregator.py +300 -300
- tapps_agents/workflow/review_artifact.py +185 -185
- tapps_agents/workflow/schema_validator.py +522 -522
- tapps_agents/workflow/session_handoff.py +178 -178
- tapps_agents/workflow/skill_invoker.py +648 -648
- tapps_agents/workflow/state_manager.py +756 -756
- tapps_agents/workflow/state_persistence_config.py +331 -331
- tapps_agents/workflow/status_monitor.py +449 -449
- tapps_agents/workflow/step_checkpoint.py +314 -314
- tapps_agents/workflow/step_details.py +201 -201
- tapps_agents/workflow/story_models.py +147 -147
- tapps_agents/workflow/streaming.py +416 -416
- tapps_agents/workflow/suggestion_engine.py +552 -552
- tapps_agents/workflow/testing_artifact.py +186 -186
- tapps_agents/workflow/timeline.py +158 -158
- tapps_agents/workflow/token_integration.py +209 -209
- tapps_agents/workflow/validation.py +217 -217
- tapps_agents/workflow/visual_feedback.py +391 -391
- tapps_agents/workflow/workflow_chain.py +95 -95
- tapps_agents/workflow/workflow_summary.py +219 -219
- tapps_agents/workflow/worktree_manager.py +724 -724
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/METADATA +672 -672
- tapps_agents-3.6.0.dist-info/RECORD +758 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/licenses/LICENSE +22 -22
- tapps_agents/health/checks/outcomes.backup_20260204_064058.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064256.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064600.py +0 -324
- tapps_agents-3.5.40.dist-info/RECORD +0 -760
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/WHEEL +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/entry_points.txt +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/top_level.txt +0 -0
|
@@ -1,278 +1,278 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Staleness Policies for Context7 KB cache.
|
|
3
|
-
|
|
4
|
-
Defines policies for determining when cached entries should be considered stale
|
|
5
|
-
and need refresh. Supports library-specific staleness rules.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
import re
|
|
9
|
-
from dataclasses import dataclass
|
|
10
|
-
from datetime import datetime, timedelta
|
|
11
|
-
from typing import Any
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@dataclass
|
|
15
|
-
class StalenessPolicy:
|
|
16
|
-
"""Policy for determining entry staleness."""
|
|
17
|
-
|
|
18
|
-
max_age_days: int
|
|
19
|
-
library_type: str = "stable" # stable, active, critical
|
|
20
|
-
|
|
21
|
-
def is_stale(
|
|
22
|
-
self, last_updated: str, reference_date: datetime | None = None
|
|
23
|
-
) -> bool:
|
|
24
|
-
"""
|
|
25
|
-
Check if an entry is stale based on last_updated timestamp.
|
|
26
|
-
|
|
27
|
-
Args:
|
|
28
|
-
last_updated: ISO format timestamp string (e.g., "2024-01-01T00:00:00Z")
|
|
29
|
-
reference_date: Optional reference date (defaults to now)
|
|
30
|
-
|
|
31
|
-
Returns:
|
|
32
|
-
True if entry is stale
|
|
33
|
-
"""
|
|
34
|
-
if reference_date is None:
|
|
35
|
-
from datetime import UTC
|
|
36
|
-
reference_date = datetime.now(UTC)
|
|
37
|
-
|
|
38
|
-
try:
|
|
39
|
-
# Parse ISO format timestamp - handle both naive and timezone-aware
|
|
40
|
-
updated_str = last_updated
|
|
41
|
-
if updated_str.endswith("Z"):
|
|
42
|
-
# Remove Z
|
|
43
|
-
updated_str = updated_str[:-1]
|
|
44
|
-
# Check if timezone is already present by looking for timezone pattern at the end
|
|
45
|
-
# Pattern: ends with +HH:MM or -HH:MM where HH and MM are digits
|
|
46
|
-
timezone_pattern = r'[+-]\d{2}:\d{2}$'
|
|
47
|
-
if not re.search(timezone_pattern, updated_str):
|
|
48
|
-
updated_str = updated_str + "+00:00"
|
|
49
|
-
|
|
50
|
-
updated_dt = datetime.fromisoformat(updated_str)
|
|
51
|
-
|
|
52
|
-
# Convert both to UTC for comparison
|
|
53
|
-
from datetime import UTC
|
|
54
|
-
if updated_dt.tzinfo is None:
|
|
55
|
-
# Assume UTC if naive
|
|
56
|
-
updated_dt = updated_dt.replace(tzinfo=UTC)
|
|
57
|
-
else:
|
|
58
|
-
updated_dt = updated_dt.astimezone(UTC)
|
|
59
|
-
|
|
60
|
-
if reference_date.tzinfo is None:
|
|
61
|
-
# Assume UTC if naive
|
|
62
|
-
reference_date = reference_date.replace(tzinfo=UTC)
|
|
63
|
-
else:
|
|
64
|
-
reference_date = reference_date.astimezone(UTC)
|
|
65
|
-
|
|
66
|
-
age = reference_date - updated_dt
|
|
67
|
-
max_age = timedelta(days=self.max_age_days)
|
|
68
|
-
|
|
69
|
-
# Entry is stale if age is strictly greater than max_age
|
|
70
|
-
return age > max_age
|
|
71
|
-
except (ValueError, TypeError):
|
|
72
|
-
# If we can't parse the date, consider it stale for safety
|
|
73
|
-
return True
|
|
74
|
-
|
|
75
|
-
def days_until_stale(
|
|
76
|
-
self, last_updated: str, reference_date: datetime | None = None
|
|
77
|
-
) -> int:
|
|
78
|
-
"""
|
|
79
|
-
Calculate days until entry becomes stale.
|
|
80
|
-
|
|
81
|
-
Args:
|
|
82
|
-
last_updated: ISO format timestamp string
|
|
83
|
-
reference_date: Optional reference date (defaults to now)
|
|
84
|
-
|
|
85
|
-
Returns:
|
|
86
|
-
Days until stale (negative if already stale)
|
|
87
|
-
"""
|
|
88
|
-
if reference_date is None:
|
|
89
|
-
from datetime import UTC
|
|
90
|
-
reference_date = datetime.now(UTC)
|
|
91
|
-
|
|
92
|
-
try:
|
|
93
|
-
updated_str = last_updated
|
|
94
|
-
if updated_str.endswith("Z"):
|
|
95
|
-
# Remove Z
|
|
96
|
-
updated_str = updated_str[:-1]
|
|
97
|
-
# Check if timezone is already present by looking for timezone pattern at the end
|
|
98
|
-
# Pattern: ends with +HH:MM or -HH:MM where HH and MM are digits
|
|
99
|
-
timezone_pattern = r'[+-]\d{2}:\d{2}$'
|
|
100
|
-
if not re.search(timezone_pattern, updated_str):
|
|
101
|
-
updated_str = updated_str + "+00:00"
|
|
102
|
-
|
|
103
|
-
updated_dt = datetime.fromisoformat(updated_str)
|
|
104
|
-
|
|
105
|
-
# Convert both to UTC for comparison
|
|
106
|
-
from datetime import UTC
|
|
107
|
-
if updated_dt.tzinfo is None:
|
|
108
|
-
# Assume UTC if naive
|
|
109
|
-
updated_dt = updated_dt.replace(tzinfo=UTC)
|
|
110
|
-
else:
|
|
111
|
-
updated_dt = updated_dt.astimezone(UTC)
|
|
112
|
-
|
|
113
|
-
if reference_date.tzinfo is None:
|
|
114
|
-
# Assume UTC if naive
|
|
115
|
-
reference_date = reference_date.replace(tzinfo=UTC)
|
|
116
|
-
else:
|
|
117
|
-
reference_date = reference_date.astimezone(UTC)
|
|
118
|
-
|
|
119
|
-
age = reference_date - updated_dt
|
|
120
|
-
max_age = timedelta(days=self.max_age_days)
|
|
121
|
-
remaining = max_age - age
|
|
122
|
-
|
|
123
|
-
return remaining.days
|
|
124
|
-
except (ValueError, TypeError):
|
|
125
|
-
return -1
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
class StalenessPolicyManager:
|
|
129
|
-
"""Manages staleness policies for different library types."""
|
|
130
|
-
|
|
131
|
-
def __init__(self, default_max_age_days: int = 30):
|
|
132
|
-
"""
|
|
133
|
-
Initialize policy manager.
|
|
134
|
-
|
|
135
|
-
Args:
|
|
136
|
-
default_max_age_days: Default max age in days for entries
|
|
137
|
-
"""
|
|
138
|
-
self.default_max_age_days = default_max_age_days
|
|
139
|
-
self.policies: dict[str, StalenessPolicy] = {}
|
|
140
|
-
self._initialize_default_policies()
|
|
141
|
-
|
|
142
|
-
def _initialize_default_policies(self):
|
|
143
|
-
"""Initialize default staleness policies."""
|
|
144
|
-
# Stable libraries (e.g., react, pytest) - 30 days
|
|
145
|
-
self.policies["stable"] = StalenessPolicy(
|
|
146
|
-
max_age_days=30, library_type="stable"
|
|
147
|
-
)
|
|
148
|
-
|
|
149
|
-
# Active libraries (e.g., vitest, playwright) - 14 days
|
|
150
|
-
self.policies["active"] = StalenessPolicy(
|
|
151
|
-
max_age_days=14, library_type="active"
|
|
152
|
-
)
|
|
153
|
-
|
|
154
|
-
# Critical libraries (e.g., security-libs, jwt) - 7 days
|
|
155
|
-
self.policies["critical"] = StalenessPolicy(
|
|
156
|
-
max_age_days=7, library_type="critical"
|
|
157
|
-
)
|
|
158
|
-
|
|
159
|
-
def get_policy(
|
|
160
|
-
self, library: str, library_type: str | None = None
|
|
161
|
-
) -> StalenessPolicy:
|
|
162
|
-
"""
|
|
163
|
-
Get staleness policy for a library.
|
|
164
|
-
|
|
165
|
-
Args:
|
|
166
|
-
library: Library name
|
|
167
|
-
library_type: Optional library type (if None, tries to infer or uses default)
|
|
168
|
-
|
|
169
|
-
Returns:
|
|
170
|
-
StalenessPolicy instance
|
|
171
|
-
"""
|
|
172
|
-
if library_type and library_type in self.policies:
|
|
173
|
-
return self.policies[library_type]
|
|
174
|
-
|
|
175
|
-
# Try to infer library type from name patterns
|
|
176
|
-
library_lower = library.lower()
|
|
177
|
-
|
|
178
|
-
if any(
|
|
179
|
-
keyword in library_lower
|
|
180
|
-
for keyword in ["security", "auth", "jwt", "oauth", "encrypt"]
|
|
181
|
-
):
|
|
182
|
-
return self.policies["critical"]
|
|
183
|
-
elif any(
|
|
184
|
-
keyword in library_lower for keyword in ["test", "spec", "mock", "stub"]
|
|
185
|
-
):
|
|
186
|
-
return self.policies["active"]
|
|
187
|
-
else:
|
|
188
|
-
return self.policies.get(
|
|
189
|
-
"stable",
|
|
190
|
-
StalenessPolicy(
|
|
191
|
-
max_age_days=self.default_max_age_days, library_type="stable"
|
|
192
|
-
),
|
|
193
|
-
)
|
|
194
|
-
|
|
195
|
-
def set_policy(self, library_type: str, max_age_days: int):
|
|
196
|
-
"""
|
|
197
|
-
Set custom staleness policy for a library type.
|
|
198
|
-
|
|
199
|
-
Args:
|
|
200
|
-
library_type: Library type identifier
|
|
201
|
-
max_age_days: Max age in days
|
|
202
|
-
"""
|
|
203
|
-
self.policies[library_type] = StalenessPolicy(
|
|
204
|
-
max_age_days=max_age_days, library_type=library_type
|
|
205
|
-
)
|
|
206
|
-
|
|
207
|
-
def is_entry_stale(
|
|
208
|
-
self,
|
|
209
|
-
library: str,
|
|
210
|
-
last_updated: str,
|
|
211
|
-
library_type: str | None = None,
|
|
212
|
-
reference_date: datetime | None = None,
|
|
213
|
-
) -> bool:
|
|
214
|
-
"""
|
|
215
|
-
Check if an entry is stale.
|
|
216
|
-
|
|
217
|
-
Args:
|
|
218
|
-
library: Library name
|
|
219
|
-
last_updated: ISO format timestamp string
|
|
220
|
-
library_type: Optional library type
|
|
221
|
-
reference_date: Optional reference date
|
|
222
|
-
|
|
223
|
-
Returns:
|
|
224
|
-
True if entry is stale
|
|
225
|
-
"""
|
|
226
|
-
policy = self.get_policy(library, library_type)
|
|
227
|
-
return policy.is_stale(last_updated, reference_date)
|
|
228
|
-
|
|
229
|
-
# Compatibility alias: older code calls `check_staleness(...)`.
|
|
230
|
-
def check_staleness(
|
|
231
|
-
self,
|
|
232
|
-
library: str,
|
|
233
|
-
last_updated: str,
|
|
234
|
-
library_type: str | None = None,
|
|
235
|
-
reference_date: datetime | None = None,
|
|
236
|
-
) -> bool:
|
|
237
|
-
"""Alias for `is_entry_stale` (kept for contract stability)."""
|
|
238
|
-
return self.is_entry_stale(
|
|
239
|
-
library=library,
|
|
240
|
-
last_updated=last_updated,
|
|
241
|
-
library_type=library_type,
|
|
242
|
-
reference_date=reference_date,
|
|
243
|
-
)
|
|
244
|
-
|
|
245
|
-
def get_refresh_recommendation(
|
|
246
|
-
self,
|
|
247
|
-
library: str,
|
|
248
|
-
last_updated: str,
|
|
249
|
-
library_type: str | None = None,
|
|
250
|
-
reference_date: datetime | None = None,
|
|
251
|
-
) -> dict[str, Any]:
|
|
252
|
-
"""
|
|
253
|
-
Get refresh recommendation for an entry.
|
|
254
|
-
|
|
255
|
-
Args:
|
|
256
|
-
library: Library name
|
|
257
|
-
last_updated: ISO format timestamp string
|
|
258
|
-
library_type: Optional library type
|
|
259
|
-
|
|
260
|
-
Returns:
|
|
261
|
-
Dictionary with refresh recommendation details
|
|
262
|
-
"""
|
|
263
|
-
policy = self.get_policy(library, library_type)
|
|
264
|
-
is_stale = policy.is_stale(last_updated, reference_date)
|
|
265
|
-
days_until_stale = policy.days_until_stale(last_updated, reference_date)
|
|
266
|
-
|
|
267
|
-
return {
|
|
268
|
-
"library": library,
|
|
269
|
-
"is_stale": is_stale,
|
|
270
|
-
"days_until_stale": days_until_stale,
|
|
271
|
-
"max_age_days": policy.max_age_days,
|
|
272
|
-
"library_type": policy.library_type,
|
|
273
|
-
"recommendation": (
|
|
274
|
-
"refresh"
|
|
275
|
-
if is_stale
|
|
276
|
-
else "keep" if days_until_stale > 7 else "consider_refresh"
|
|
277
|
-
),
|
|
278
|
-
}
|
|
1
|
+
"""
|
|
2
|
+
Staleness Policies for Context7 KB cache.
|
|
3
|
+
|
|
4
|
+
Defines policies for determining when cached entries should be considered stale
|
|
5
|
+
and need refresh. Supports library-specific staleness rules.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import re
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from datetime import datetime, timedelta
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class StalenessPolicy:
|
|
16
|
+
"""Policy for determining entry staleness."""
|
|
17
|
+
|
|
18
|
+
max_age_days: int
|
|
19
|
+
library_type: str = "stable" # stable, active, critical
|
|
20
|
+
|
|
21
|
+
def is_stale(
|
|
22
|
+
self, last_updated: str, reference_date: datetime | None = None
|
|
23
|
+
) -> bool:
|
|
24
|
+
"""
|
|
25
|
+
Check if an entry is stale based on last_updated timestamp.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
last_updated: ISO format timestamp string (e.g., "2024-01-01T00:00:00Z")
|
|
29
|
+
reference_date: Optional reference date (defaults to now)
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
True if entry is stale
|
|
33
|
+
"""
|
|
34
|
+
if reference_date is None:
|
|
35
|
+
from datetime import UTC
|
|
36
|
+
reference_date = datetime.now(UTC)
|
|
37
|
+
|
|
38
|
+
try:
|
|
39
|
+
# Parse ISO format timestamp - handle both naive and timezone-aware
|
|
40
|
+
updated_str = last_updated
|
|
41
|
+
if updated_str.endswith("Z"):
|
|
42
|
+
# Remove Z
|
|
43
|
+
updated_str = updated_str[:-1]
|
|
44
|
+
# Check if timezone is already present by looking for timezone pattern at the end
|
|
45
|
+
# Pattern: ends with +HH:MM or -HH:MM where HH and MM are digits
|
|
46
|
+
timezone_pattern = r'[+-]\d{2}:\d{2}$'
|
|
47
|
+
if not re.search(timezone_pattern, updated_str):
|
|
48
|
+
updated_str = updated_str + "+00:00"
|
|
49
|
+
|
|
50
|
+
updated_dt = datetime.fromisoformat(updated_str)
|
|
51
|
+
|
|
52
|
+
# Convert both to UTC for comparison
|
|
53
|
+
from datetime import UTC
|
|
54
|
+
if updated_dt.tzinfo is None:
|
|
55
|
+
# Assume UTC if naive
|
|
56
|
+
updated_dt = updated_dt.replace(tzinfo=UTC)
|
|
57
|
+
else:
|
|
58
|
+
updated_dt = updated_dt.astimezone(UTC)
|
|
59
|
+
|
|
60
|
+
if reference_date.tzinfo is None:
|
|
61
|
+
# Assume UTC if naive
|
|
62
|
+
reference_date = reference_date.replace(tzinfo=UTC)
|
|
63
|
+
else:
|
|
64
|
+
reference_date = reference_date.astimezone(UTC)
|
|
65
|
+
|
|
66
|
+
age = reference_date - updated_dt
|
|
67
|
+
max_age = timedelta(days=self.max_age_days)
|
|
68
|
+
|
|
69
|
+
# Entry is stale if age is strictly greater than max_age
|
|
70
|
+
return age > max_age
|
|
71
|
+
except (ValueError, TypeError):
|
|
72
|
+
# If we can't parse the date, consider it stale for safety
|
|
73
|
+
return True
|
|
74
|
+
|
|
75
|
+
def days_until_stale(
|
|
76
|
+
self, last_updated: str, reference_date: datetime | None = None
|
|
77
|
+
) -> int:
|
|
78
|
+
"""
|
|
79
|
+
Calculate days until entry becomes stale.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
last_updated: ISO format timestamp string
|
|
83
|
+
reference_date: Optional reference date (defaults to now)
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
Days until stale (negative if already stale)
|
|
87
|
+
"""
|
|
88
|
+
if reference_date is None:
|
|
89
|
+
from datetime import UTC
|
|
90
|
+
reference_date = datetime.now(UTC)
|
|
91
|
+
|
|
92
|
+
try:
|
|
93
|
+
updated_str = last_updated
|
|
94
|
+
if updated_str.endswith("Z"):
|
|
95
|
+
# Remove Z
|
|
96
|
+
updated_str = updated_str[:-1]
|
|
97
|
+
# Check if timezone is already present by looking for timezone pattern at the end
|
|
98
|
+
# Pattern: ends with +HH:MM or -HH:MM where HH and MM are digits
|
|
99
|
+
timezone_pattern = r'[+-]\d{2}:\d{2}$'
|
|
100
|
+
if not re.search(timezone_pattern, updated_str):
|
|
101
|
+
updated_str = updated_str + "+00:00"
|
|
102
|
+
|
|
103
|
+
updated_dt = datetime.fromisoformat(updated_str)
|
|
104
|
+
|
|
105
|
+
# Convert both to UTC for comparison
|
|
106
|
+
from datetime import UTC
|
|
107
|
+
if updated_dt.tzinfo is None:
|
|
108
|
+
# Assume UTC if naive
|
|
109
|
+
updated_dt = updated_dt.replace(tzinfo=UTC)
|
|
110
|
+
else:
|
|
111
|
+
updated_dt = updated_dt.astimezone(UTC)
|
|
112
|
+
|
|
113
|
+
if reference_date.tzinfo is None:
|
|
114
|
+
# Assume UTC if naive
|
|
115
|
+
reference_date = reference_date.replace(tzinfo=UTC)
|
|
116
|
+
else:
|
|
117
|
+
reference_date = reference_date.astimezone(UTC)
|
|
118
|
+
|
|
119
|
+
age = reference_date - updated_dt
|
|
120
|
+
max_age = timedelta(days=self.max_age_days)
|
|
121
|
+
remaining = max_age - age
|
|
122
|
+
|
|
123
|
+
return remaining.days
|
|
124
|
+
except (ValueError, TypeError):
|
|
125
|
+
return -1
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
class StalenessPolicyManager:
|
|
129
|
+
"""Manages staleness policies for different library types."""
|
|
130
|
+
|
|
131
|
+
def __init__(self, default_max_age_days: int = 30):
|
|
132
|
+
"""
|
|
133
|
+
Initialize policy manager.
|
|
134
|
+
|
|
135
|
+
Args:
|
|
136
|
+
default_max_age_days: Default max age in days for entries
|
|
137
|
+
"""
|
|
138
|
+
self.default_max_age_days = default_max_age_days
|
|
139
|
+
self.policies: dict[str, StalenessPolicy] = {}
|
|
140
|
+
self._initialize_default_policies()
|
|
141
|
+
|
|
142
|
+
def _initialize_default_policies(self):
|
|
143
|
+
"""Initialize default staleness policies."""
|
|
144
|
+
# Stable libraries (e.g., react, pytest) - 30 days
|
|
145
|
+
self.policies["stable"] = StalenessPolicy(
|
|
146
|
+
max_age_days=30, library_type="stable"
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
# Active libraries (e.g., vitest, playwright) - 14 days
|
|
150
|
+
self.policies["active"] = StalenessPolicy(
|
|
151
|
+
max_age_days=14, library_type="active"
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
# Critical libraries (e.g., security-libs, jwt) - 7 days
|
|
155
|
+
self.policies["critical"] = StalenessPolicy(
|
|
156
|
+
max_age_days=7, library_type="critical"
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
def get_policy(
|
|
160
|
+
self, library: str, library_type: str | None = None
|
|
161
|
+
) -> StalenessPolicy:
|
|
162
|
+
"""
|
|
163
|
+
Get staleness policy for a library.
|
|
164
|
+
|
|
165
|
+
Args:
|
|
166
|
+
library: Library name
|
|
167
|
+
library_type: Optional library type (if None, tries to infer or uses default)
|
|
168
|
+
|
|
169
|
+
Returns:
|
|
170
|
+
StalenessPolicy instance
|
|
171
|
+
"""
|
|
172
|
+
if library_type and library_type in self.policies:
|
|
173
|
+
return self.policies[library_type]
|
|
174
|
+
|
|
175
|
+
# Try to infer library type from name patterns
|
|
176
|
+
library_lower = library.lower()
|
|
177
|
+
|
|
178
|
+
if any(
|
|
179
|
+
keyword in library_lower
|
|
180
|
+
for keyword in ["security", "auth", "jwt", "oauth", "encrypt"]
|
|
181
|
+
):
|
|
182
|
+
return self.policies["critical"]
|
|
183
|
+
elif any(
|
|
184
|
+
keyword in library_lower for keyword in ["test", "spec", "mock", "stub"]
|
|
185
|
+
):
|
|
186
|
+
return self.policies["active"]
|
|
187
|
+
else:
|
|
188
|
+
return self.policies.get(
|
|
189
|
+
"stable",
|
|
190
|
+
StalenessPolicy(
|
|
191
|
+
max_age_days=self.default_max_age_days, library_type="stable"
|
|
192
|
+
),
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
def set_policy(self, library_type: str, max_age_days: int):
|
|
196
|
+
"""
|
|
197
|
+
Set custom staleness policy for a library type.
|
|
198
|
+
|
|
199
|
+
Args:
|
|
200
|
+
library_type: Library type identifier
|
|
201
|
+
max_age_days: Max age in days
|
|
202
|
+
"""
|
|
203
|
+
self.policies[library_type] = StalenessPolicy(
|
|
204
|
+
max_age_days=max_age_days, library_type=library_type
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
def is_entry_stale(
|
|
208
|
+
self,
|
|
209
|
+
library: str,
|
|
210
|
+
last_updated: str,
|
|
211
|
+
library_type: str | None = None,
|
|
212
|
+
reference_date: datetime | None = None,
|
|
213
|
+
) -> bool:
|
|
214
|
+
"""
|
|
215
|
+
Check if an entry is stale.
|
|
216
|
+
|
|
217
|
+
Args:
|
|
218
|
+
library: Library name
|
|
219
|
+
last_updated: ISO format timestamp string
|
|
220
|
+
library_type: Optional library type
|
|
221
|
+
reference_date: Optional reference date
|
|
222
|
+
|
|
223
|
+
Returns:
|
|
224
|
+
True if entry is stale
|
|
225
|
+
"""
|
|
226
|
+
policy = self.get_policy(library, library_type)
|
|
227
|
+
return policy.is_stale(last_updated, reference_date)
|
|
228
|
+
|
|
229
|
+
# Compatibility alias: older code calls `check_staleness(...)`.
|
|
230
|
+
def check_staleness(
|
|
231
|
+
self,
|
|
232
|
+
library: str,
|
|
233
|
+
last_updated: str,
|
|
234
|
+
library_type: str | None = None,
|
|
235
|
+
reference_date: datetime | None = None,
|
|
236
|
+
) -> bool:
|
|
237
|
+
"""Alias for `is_entry_stale` (kept for contract stability)."""
|
|
238
|
+
return self.is_entry_stale(
|
|
239
|
+
library=library,
|
|
240
|
+
last_updated=last_updated,
|
|
241
|
+
library_type=library_type,
|
|
242
|
+
reference_date=reference_date,
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
def get_refresh_recommendation(
|
|
246
|
+
self,
|
|
247
|
+
library: str,
|
|
248
|
+
last_updated: str,
|
|
249
|
+
library_type: str | None = None,
|
|
250
|
+
reference_date: datetime | None = None,
|
|
251
|
+
) -> dict[str, Any]:
|
|
252
|
+
"""
|
|
253
|
+
Get refresh recommendation for an entry.
|
|
254
|
+
|
|
255
|
+
Args:
|
|
256
|
+
library: Library name
|
|
257
|
+
last_updated: ISO format timestamp string
|
|
258
|
+
library_type: Optional library type
|
|
259
|
+
|
|
260
|
+
Returns:
|
|
261
|
+
Dictionary with refresh recommendation details
|
|
262
|
+
"""
|
|
263
|
+
policy = self.get_policy(library, library_type)
|
|
264
|
+
is_stale = policy.is_stale(last_updated, reference_date)
|
|
265
|
+
days_until_stale = policy.days_until_stale(last_updated, reference_date)
|
|
266
|
+
|
|
267
|
+
return {
|
|
268
|
+
"library": library,
|
|
269
|
+
"is_stale": is_stale,
|
|
270
|
+
"days_until_stale": days_until_stale,
|
|
271
|
+
"max_age_days": policy.max_age_days,
|
|
272
|
+
"library_type": policy.library_type,
|
|
273
|
+
"recommendation": (
|
|
274
|
+
"refresh"
|
|
275
|
+
if is_stale
|
|
276
|
+
else "keep" if days_until_stale > 7 else "consider_refresh"
|
|
277
|
+
),
|
|
278
|
+
}
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Structured Documentation (Tiles) Integration
|
|
3
|
-
|
|
4
|
-
Uses structured documentation for API usage to improve code generation accuracy.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import logging
|
|
8
|
-
from typing import Any
|
|
9
|
-
|
|
10
|
-
logger = logging.getLogger(__name__)
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class TilesIntegration:
|
|
14
|
-
"""
|
|
15
|
-
Integrates structured documentation (Tiles) for API usage.
|
|
16
|
-
|
|
17
|
-
Provides contextual knowledge for code generation (35% improvement shown in research).
|
|
18
|
-
"""
|
|
19
|
-
|
|
20
|
-
def __init__(self, context7_helper: Any = None):
|
|
21
|
-
"""
|
|
22
|
-
Initialize Tiles integration.
|
|
23
|
-
|
|
24
|
-
Args:
|
|
25
|
-
context7_helper: Optional Context7 helper instance
|
|
26
|
-
"""
|
|
27
|
-
self.context7_helper = context7_helper
|
|
28
|
-
|
|
29
|
-
async def get_tiles(self, library: str, api: str) -> dict[str, Any] | None:
|
|
30
|
-
"""
|
|
31
|
-
Get Tiles documentation for an API.
|
|
32
|
-
|
|
33
|
-
Args:
|
|
34
|
-
library: Library name
|
|
35
|
-
api: API name
|
|
36
|
-
|
|
37
|
-
Returns:
|
|
38
|
-
Tiles documentation or None
|
|
39
|
-
"""
|
|
40
|
-
# TODO: Implement Tiles retrieval from Context7
|
|
41
|
-
# For now, return placeholder
|
|
42
|
-
return {
|
|
43
|
-
"library": library,
|
|
44
|
-
"api": api,
|
|
45
|
-
"tiles_available": False,
|
|
46
|
-
}
|
|
47
|
-
|
|
1
|
+
"""
|
|
2
|
+
Structured Documentation (Tiles) Integration
|
|
3
|
+
|
|
4
|
+
Uses structured documentation for API usage to improve code generation accuracy.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class TilesIntegration:
|
|
14
|
+
"""
|
|
15
|
+
Integrates structured documentation (Tiles) for API usage.
|
|
16
|
+
|
|
17
|
+
Provides contextual knowledge for code generation (35% improvement shown in research).
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def __init__(self, context7_helper: Any = None):
|
|
21
|
+
"""
|
|
22
|
+
Initialize Tiles integration.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
context7_helper: Optional Context7 helper instance
|
|
26
|
+
"""
|
|
27
|
+
self.context7_helper = context7_helper
|
|
28
|
+
|
|
29
|
+
async def get_tiles(self, library: str, api: str) -> dict[str, Any] | None:
|
|
30
|
+
"""
|
|
31
|
+
Get Tiles documentation for an API.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
library: Library name
|
|
35
|
+
api: API name
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
Tiles documentation or None
|
|
39
|
+
"""
|
|
40
|
+
# TODO: Implement Tiles retrieval from Context7
|
|
41
|
+
# For now, return placeholder
|
|
42
|
+
return {
|
|
43
|
+
"library": library,
|
|
44
|
+
"api": api,
|
|
45
|
+
"tiles_available": False,
|
|
46
|
+
}
|
|
47
|
+
|