moai-adk 0.25.4__py3-none-any.whl → 0.32.8__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.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/__init__.py +2 -5
- moai_adk/__main__.py +114 -82
- moai_adk/cli/__init__.py +6 -1
- moai_adk/cli/commands/__init__.py +1 -3
- moai_adk/cli/commands/analyze.py +5 -16
- moai_adk/cli/commands/doctor.py +6 -18
- moai_adk/cli/commands/init.py +56 -125
- moai_adk/cli/commands/language.py +14 -35
- moai_adk/cli/commands/status.py +9 -15
- moai_adk/cli/commands/update.py +1555 -190
- moai_adk/cli/prompts/init_prompts.py +112 -56
- moai_adk/cli/spec_status.py +263 -0
- moai_adk/cli/ui/__init__.py +44 -0
- moai_adk/cli/ui/progress.py +422 -0
- moai_adk/cli/ui/prompts.py +389 -0
- moai_adk/cli/ui/theme.py +129 -0
- moai_adk/cli/worktree/__init__.py +27 -0
- moai_adk/cli/worktree/__main__.py +31 -0
- moai_adk/cli/worktree/cli.py +672 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +490 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +128 -0
- moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
- moai_adk/core/analysis/session_analyzer.py +17 -56
- moai_adk/core/claude_integration.py +26 -54
- moai_adk/core/command_helpers.py +10 -10
- moai_adk/core/comprehensive_monitoring_system.py +1183 -0
- moai_adk/core/config/auto_spec_config.py +5 -11
- moai_adk/core/config/migration.py +19 -9
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +6 -12
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +725 -112
- moai_adk/core/event_driven_hook_system.py +1371 -0
- moai_adk/core/git/__init__.py +8 -0
- moai_adk/core/git/branch_manager.py +3 -11
- moai_adk/core/git/checkpoint.py +1 -3
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/manager.py +91 -1
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +56 -80
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/engine.py +6 -18
- moai_adk/core/integration/integration_tester.py +10 -9
- moai_adk/core/integration/utils.py +1 -1
- moai_adk/core/issue_creator.py +10 -28
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config_resolver.py +485 -0
- moai_adk/core/language_validator.py +28 -41
- moai_adk/core/mcp/setup.py +15 -12
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +481 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
- moai_adk/core/migration/backup_manager.py +78 -9
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +8 -17
- moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
- moai_adk/core/migration/selective_restorer.py +470 -0
- moai_adk/core/migration/template_utils.py +74 -0
- moai_adk/core/migration/user_selection_ui.py +338 -0
- moai_adk/core/migration/version_detector.py +6 -10
- moai_adk/core/migration/version_migrator.py +3 -3
- moai_adk/core/performance/cache_system.py +8 -10
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/checker.py +2 -4
- moai_adk/core/project/detector.py +1 -3
- moai_adk/core/project/initializer.py +135 -23
- moai_adk/core/project/phase_executor.py +54 -81
- moai_adk/core/project/validator.py +6 -12
- moai_adk/core/quality/trust_checker.py +9 -27
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +73 -148
- moai_adk/core/session_manager.py +10 -26
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec/confidence_scoring.py +31 -100
- moai_adk/core/spec/ears_template_engine.py +351 -286
- moai_adk/core/spec/quality_validator.py +35 -69
- moai_adk/core/spec_status_manager.py +64 -74
- moai_adk/core/template/backup.py +45 -20
- moai_adk/core/template/config.py +112 -39
- moai_adk/core/template/merger.py +11 -19
- moai_adk/core/template/processor.py +253 -149
- moai_adk/core/template_engine.py +73 -40
- moai_adk/core/template_variable_synchronizer.py +417 -0
- moai_adk/core/unified_permission_manager.py +745 -0
- moai_adk/core/user_behavior_analytics.py +851 -0
- moai_adk/core/version_sync.py +429 -0
- moai_adk/foundation/__init__.py +56 -0
- moai_adk/foundation/backend.py +1027 -0
- moai_adk/foundation/database.py +1115 -0
- moai_adk/foundation/devops.py +1585 -0
- moai_adk/foundation/ears.py +431 -0
- moai_adk/foundation/frontend.py +870 -0
- moai_adk/foundation/git/commit_templates.py +4 -12
- moai_adk/foundation/git.py +376 -0
- moai_adk/foundation/langs.py +484 -0
- moai_adk/foundation/ml_ops.py +1162 -0
- moai_adk/foundation/testing.py +1524 -0
- moai_adk/foundation/trust/trust_principles.py +23 -72
- moai_adk/foundation/trust/validation_checklist.py +57 -162
- moai_adk/project/__init__.py +0 -0
- moai_adk/project/configuration.py +1084 -0
- moai_adk/project/documentation.py +566 -0
- moai_adk/project/schema.py +447 -0
- moai_adk/statusline/alfred_detector.py +1 -3
- moai_adk/statusline/config.py +13 -4
- moai_adk/statusline/enhanced_output_style_detector.py +23 -15
- moai_adk/statusline/main.py +51 -15
- moai_adk/statusline/renderer.py +104 -48
- moai_adk/statusline/update_checker.py +3 -9
- moai_adk/statusline/version_reader.py +140 -46
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +549 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +993 -0
- moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
- moai_adk/templates/.claude/hooks/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
- moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
- moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
- moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
- moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +921 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
- moai_adk/templates/.claude/settings.json +172 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +319 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +320 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +496 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +491 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +201 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +438 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +362 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +352 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +316 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +370 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/README.md +186 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +135 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +374 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +410 -0
- moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
- moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
- moai_adk/templates/.git-hooks/pre-commit +103 -41
- moai_adk/templates/.git-hooks/pre-push +116 -21
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.gitignore +184 -44
- moai_adk/templates/.mcp.json +7 -9
- moai_adk/templates/.moai/cache/personalization.json +10 -0
- moai_adk/templates/.moai/config/config.yaml +344 -0
- moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
- moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
- moai_adk/templates/.moai/config/presets/team.yaml +33 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -0
- moai_adk/templates/.moai/config/sections/language.yaml +11 -0
- moai_adk/templates/.moai/config/sections/project.yaml +13 -0
- moai_adk/templates/.moai/config/sections/quality.yaml +15 -0
- moai_adk/templates/.moai/config/sections/system.yaml +14 -0
- moai_adk/templates/.moai/config/sections/user.yaml +5 -0
- moai_adk/templates/.moai/config/statusline-config.yaml +86 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +382 -501
- moai_adk/utils/__init__.py +24 -1
- moai_adk/utils/banner.py +7 -10
- moai_adk/utils/common.py +16 -30
- moai_adk/utils/link_validator.py +4 -12
- moai_adk/utils/safe_file_reader.py +2 -6
- moai_adk/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.32.8.dist-info/METADATA +2478 -0
- moai_adk-0.32.8.dist-info/RECORD +396 -0
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
- moai_adk/cli/commands/backup.py +0 -82
- moai_adk/cli/commands/improve_user_experience.py +0 -348
- moai_adk/cli/commands/migrate.py +0 -158
- moai_adk/cli/commands/validate_links.py +0 -118
- moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -413
- moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
- moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
- moai_adk/utils/user_experience.py +0 -531
- moai_adk-0.25.4.dist-info/METADATA +0 -2279
- moai_adk-0.25.4.dist-info/RECORD +0 -112
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# PostgreSQL Advanced Patterns
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Comprehensive PostgreSQL patterns covering advanced schema design, query optimization, indexing strategies, partitioning, and performance tuning for modern applications.
|
|
5
|
+
|
|
6
|
+
## Quick Implementation
|
|
7
|
+
|
|
8
|
+
### Advanced Schema Design
|
|
9
|
+
|
|
10
|
+
```sql
|
|
11
|
+
-- User table with proper constraints and indexes
|
|
12
|
+
CREATE TABLE users (
|
|
13
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
14
|
+
email VARCHAR(255) UNIQUE NOT NULL,
|
|
15
|
+
username VARCHAR(50) UNIQUE,
|
|
16
|
+
password_hash VARCHAR(255) NOT NULL,
|
|
17
|
+
email_verified BOOLEAN DEFAULT FALSE,
|
|
18
|
+
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
19
|
+
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
20
|
+
last_login_at TIMESTAMP WITH TIME ZONE
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
-- Optimized indexes
|
|
24
|
+
CREATE INDEX idx_users_email ON users (email) WHERE email_verified = TRUE;
|
|
25
|
+
CREATE INDEX idx_users_created_at ON users (created_at DESC);
|
|
26
|
+
CREATE INDEX idx_users_username_trgm ON users USING gin (username gin_trgm_ops);
|
|
27
|
+
|
|
28
|
+
-- User profiles with JSONB
|
|
29
|
+
CREATE TABLE user_profiles (
|
|
30
|
+
user_id UUID PRIMARY KEY REFERENCES users(id) ON DELETE CASCADE,
|
|
31
|
+
display_name VARCHAR(100),
|
|
32
|
+
bio TEXT,
|
|
33
|
+
avatar_url VARCHAR(500),
|
|
34
|
+
preferences JSONB DEFAULT '{}',
|
|
35
|
+
metadata JSONB DEFAULT '{}',
|
|
36
|
+
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
37
|
+
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
-- GIN index for JSONB queries
|
|
41
|
+
CREATE INDEX idx_user_profiles_preferences ON user_profiles USING gin (preferences);
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Advanced Query Patterns
|
|
45
|
+
|
|
46
|
+
```sql
|
|
47
|
+
-- Efficient pagination with cursor-based approach
|
|
48
|
+
WITH ranked_users AS (
|
|
49
|
+
SELECT
|
|
50
|
+
u.id,
|
|
51
|
+
u.username,
|
|
52
|
+
u.email,
|
|
53
|
+
up.display_name,
|
|
54
|
+
ROW_NUMBER() OVER (ORDER BY u.created_at DESC) as rn
|
|
55
|
+
FROM users u
|
|
56
|
+
LEFT JOIN user_profiles up ON u.id = up.user_id
|
|
57
|
+
WHERE u.created_at < :cursor OR :cursor IS NULL
|
|
58
|
+
)
|
|
59
|
+
SELECT * FROM ranked_users
|
|
60
|
+
WHERE rn > :offset
|
|
61
|
+
ORDER BY created_at DESC
|
|
62
|
+
LIMIT :limit;
|
|
63
|
+
|
|
64
|
+
-- Full-text search with trigrams
|
|
65
|
+
SELECT
|
|
66
|
+
u.id,
|
|
67
|
+
u.username,
|
|
68
|
+
up.display_name,
|
|
69
|
+
similarity(u.username, :query) as username_sim,
|
|
70
|
+
ts_rank_cd(search_vector, plainto_tsquery('english', :query)) as search_rank
|
|
71
|
+
FROM users u
|
|
72
|
+
LEFT JOIN user_profiles up ON u.id = up.user_id,
|
|
73
|
+
to_tsvector('english', u.username || ' ' || COALESCE(up.display_name, '')) search_vector
|
|
74
|
+
WHERE u.username % :query
|
|
75
|
+
OR plainto_tsquery('english', :query) @@ search_vector
|
|
76
|
+
ORDER BY username_sim DESC, search_rank DESC
|
|
77
|
+
LIMIT 20;
|
|
78
|
+
|
|
79
|
+
-- Window functions for analytics
|
|
80
|
+
SELECT
|
|
81
|
+
DATE_TRUNC('month', created_at) as month,
|
|
82
|
+
COUNT(*) as new_users,
|
|
83
|
+
SUM(COUNT(*)) OVER (ORDER BY DATE_TRUNC('month', created_at)) as cumulative_users,
|
|
84
|
+
COUNT(*) - LAG(COUNT(*)) OVER (ORDER BY DATE_TRUNC('month', created_at)) as month_over_month_change
|
|
85
|
+
FROM users
|
|
86
|
+
WHERE created_at >= NOW() - INTERVAL '1 year'
|
|
87
|
+
GROUP BY DATE_TRUNC('month', created_at)
|
|
88
|
+
ORDER BY month;
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Performance Optimization
|
|
92
|
+
|
|
93
|
+
```sql
|
|
94
|
+
-- Partitioning for time-series data
|
|
95
|
+
CREATE TABLE events (
|
|
96
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
97
|
+
user_id UUID NOT NULL REFERENCES users(id),
|
|
98
|
+
event_type VARCHAR(50) NOT NULL,
|
|
99
|
+
data JSONB,
|
|
100
|
+
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
101
|
+
) PARTITION BY RANGE (created_at);
|
|
102
|
+
|
|
103
|
+
-- Monthly partitions
|
|
104
|
+
CREATE TABLE events_2024_01 PARTITION OF events
|
|
105
|
+
FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');
|
|
106
|
+
|
|
107
|
+
CREATE TABLE events_2024_02 PARTITION OF events
|
|
108
|
+
FOR VALUES FROM ('2024-02-01') TO ('2024-03-01');
|
|
109
|
+
|
|
110
|
+
-- Materialized views for analytics
|
|
111
|
+
CREATE MATERIALIZED VIEW user_stats AS
|
|
112
|
+
SELECT
|
|
113
|
+
u.id,
|
|
114
|
+
u.email,
|
|
115
|
+
u.created_at,
|
|
116
|
+
COUNT(DISTINCT e.id) as event_count,
|
|
117
|
+
MAX(e.created_at) as last_event_at,
|
|
118
|
+
COUNT(DISTINCT CASE WHEN e.event_type = 'login' THEN e.id END) as login_count
|
|
119
|
+
FROM users u
|
|
120
|
+
LEFT JOIN events e ON u.id = e.user_id
|
|
121
|
+
GROUP BY u.id, u.email, u.created_at;
|
|
122
|
+
|
|
123
|
+
-- Refresh materialized view
|
|
124
|
+
CREATE OR REPLACE FUNCTION refresh_user_stats()
|
|
125
|
+
RETURNS void AS $$
|
|
126
|
+
BEGIN
|
|
127
|
+
REFRESH MATERIALIZED VIEW CONCURRENTLY user_stats;
|
|
128
|
+
END;
|
|
129
|
+
$$ LANGUAGE plpgsql;
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Key Features
|
|
133
|
+
|
|
134
|
+
### 1. Advanced Indexing
|
|
135
|
+
- Partial indexes for filtered data
|
|
136
|
+
- GIN indexes for full-text search and JSONB
|
|
137
|
+
- Expression indexes for computed values
|
|
138
|
+
- Composite indexes for multi-column queries
|
|
139
|
+
|
|
140
|
+
### 2. Query Optimization
|
|
141
|
+
- Cursor-based pagination
|
|
142
|
+
- Window functions for analytics
|
|
143
|
+
- CTE (Common Table Expressions)
|
|
144
|
+
- Materialized views for performance
|
|
145
|
+
|
|
146
|
+
### 3. Data Modeling
|
|
147
|
+
- JSONB for flexible schemas
|
|
148
|
+
- Array types for multi-valued data
|
|
149
|
+
- Range types for temporal data
|
|
150
|
+
- Custom types for domain-specific data
|
|
151
|
+
|
|
152
|
+
### 4. Performance Tuning
|
|
153
|
+
- Table partitioning
|
|
154
|
+
- Connection pooling
|
|
155
|
+
- Query execution plans
|
|
156
|
+
- Vacuum and analyze strategies
|
|
157
|
+
|
|
158
|
+
## Best Practices
|
|
159
|
+
- Use appropriate data types and constraints
|
|
160
|
+
- Implement proper indexing strategies
|
|
161
|
+
- Monitor query performance
|
|
162
|
+
- Use transactions for data consistency
|
|
163
|
+
- Implement backup and recovery procedures
|
|
164
|
+
|
|
165
|
+
## Integration Points
|
|
166
|
+
- ORMs (SQLAlchemy, Django ORM)
|
|
167
|
+
- Connection pools (PgBouncer, connection poolers)
|
|
168
|
+
- Monitoring tools (pg_stat_statements)
|
|
169
|
+
- Migration tools (Alembic, Flyway)
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# Redis Advanced Patterns
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Advanced Redis patterns covering caching strategies, data structures, real-time analytics, distributed locking, and performance optimization for high-throughput applications.
|
|
5
|
+
|
|
6
|
+
## Quick Implementation
|
|
7
|
+
|
|
8
|
+
### Caching Strategies
|
|
9
|
+
|
|
10
|
+
```javascript
|
|
11
|
+
class CacheManager {
|
|
12
|
+
constructor(redisClient) {
|
|
13
|
+
this.redis = redisClient;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Multi-layer caching with fallback
|
|
17
|
+
async getWithFallback(key, fetchFunction, ttl = 3600) {
|
|
18
|
+
// Try memory cache first
|
|
19
|
+
const memoryCache = this.getMemoryCache(key);
|
|
20
|
+
if (memoryCache) return memoryCache;
|
|
21
|
+
|
|
22
|
+
// Try Redis cache
|
|
23
|
+
const redisCache = await this.redis.get(key);
|
|
24
|
+
if (redisCache) {
|
|
25
|
+
const data = JSON.parse(redisCache);
|
|
26
|
+
this.setMemoryCache(key, data, ttl / 10); // Shorter memory TTL
|
|
27
|
+
return data;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Fetch from source
|
|
31
|
+
const data = await fetchFunction();
|
|
32
|
+
|
|
33
|
+
// Set both caches
|
|
34
|
+
await this.redis.setex(key, ttl, JSON.stringify(data));
|
|
35
|
+
this.setMemoryCache(key, data, ttl / 10);
|
|
36
|
+
|
|
37
|
+
return data;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Write-through caching
|
|
41
|
+
async setWithWriteThrough(key, data, fetchFunction, ttl = 3600) {
|
|
42
|
+
// Update source first
|
|
43
|
+
await fetchFunction(data);
|
|
44
|
+
|
|
45
|
+
// Update caches
|
|
46
|
+
const pipeline = this.redis.pipeline();
|
|
47
|
+
pipeline.setex(key, ttl, JSON.stringify(data));
|
|
48
|
+
|
|
49
|
+
// Invalidate related cache keys
|
|
50
|
+
const relatedKeys = await this.getRelatedKeys(key);
|
|
51
|
+
relatedKeys.forEach(relatedKey => {
|
|
52
|
+
pipeline.del(relatedKey);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
await pipeline.exec();
|
|
56
|
+
this.setMemoryCache(key, data, ttl / 10);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Rate limiting with sliding window
|
|
60
|
+
async checkRateLimit(key, limit, windowMs) {
|
|
61
|
+
const now = Date.now();
|
|
62
|
+
const pipeline = this.redis.pipeline();
|
|
63
|
+
|
|
64
|
+
// Remove old entries
|
|
65
|
+
pipeline.zremrangebyscore(key, 0, now - windowMs);
|
|
66
|
+
|
|
67
|
+
// Add current request
|
|
68
|
+
pipeline.zadd(key, now, now);
|
|
69
|
+
|
|
70
|
+
// Count current window requests
|
|
71
|
+
pipeline.zcard(key);
|
|
72
|
+
|
|
73
|
+
// Set expiration
|
|
74
|
+
pipeline.expire(key, Math.ceil(windowMs / 1000));
|
|
75
|
+
|
|
76
|
+
const results = await pipeline.exec();
|
|
77
|
+
const currentCount = results[2][1];
|
|
78
|
+
|
|
79
|
+
return {
|
|
80
|
+
allowed: currentCount <= limit,
|
|
81
|
+
count: currentCount,
|
|
82
|
+
remaining: Math.max(0, limit - currentCount),
|
|
83
|
+
resetTime: now + windowMs
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Advanced Data Structures
|
|
90
|
+
|
|
91
|
+
```javascript
|
|
92
|
+
class RedisDataManager {
|
|
93
|
+
constructor(redisClient) {
|
|
94
|
+
this.redis = redisClient;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Leaderboard with time decay
|
|
98
|
+
async addToTimeDecayLeaderboard(key, memberId, score, decayRate = 0.95) {
|
|
99
|
+
const timestamp = Date.now();
|
|
100
|
+
const decayedScore = score * Math.pow(decayRate, (Date.now() - timestamp) / (1000 * 60 * 60));
|
|
101
|
+
|
|
102
|
+
await this.redis.zadd(key, decayedScore, memberId);
|
|
103
|
+
|
|
104
|
+
// Remove old entries
|
|
105
|
+
const weekAgo = Date.now() - (7 * 24 * 60 * 60 * 1000);
|
|
106
|
+
await this.redis.zremrangebyscore(key, 0, weekAgo);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Real-time analytics with HyperLogLog
|
|
110
|
+
async trackUniqueVisitors(pageKey, userId) {
|
|
111
|
+
// Track unique users with HyperLogLog
|
|
112
|
+
await this.redis.pfadd(`${pageKey}:unique`, userId);
|
|
113
|
+
|
|
114
|
+
// Track total visits with regular counter
|
|
115
|
+
await this.redis.incr(`${pageKey}:total`);
|
|
116
|
+
|
|
117
|
+
// Track user activity set for recent activity
|
|
118
|
+
const activityKey = `${pageKey}:activity:${Math.floor(Date.now() / (60 * 1000))}`;
|
|
119
|
+
await this.redis.sadd(activityKey, userId);
|
|
120
|
+
await this.redis.expire(activityKey, 300); // 5 minutes
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
async getAnalytics(pageKey) {
|
|
124
|
+
const pipeline = this.redis.pipeline();
|
|
125
|
+
|
|
126
|
+
// Unique visitors estimate
|
|
127
|
+
pipeline.pfcount(`${pageKey}:unique`);
|
|
128
|
+
|
|
129
|
+
// Total page views
|
|
130
|
+
pipeline.get(`${pageKey}:total`);
|
|
131
|
+
|
|
132
|
+
// Recent active users (last 5 minutes)
|
|
133
|
+
const now = Math.floor(Date.now() / (60 * 1000));
|
|
134
|
+
for (let i = 0; i < 5; i++) {
|
|
135
|
+
pipeline.scard(`${pageKey}:activity:${now - i}`);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const results = await pipeline.exec();
|
|
139
|
+
|
|
140
|
+
const uniqueVisitors = results[0][1];
|
|
141
|
+
const totalViews = parseInt(results[1][1]) || 0;
|
|
142
|
+
const recentActivity = results.slice(2).map(r => r[1]).reduce((a, b) => a + b, 0);
|
|
143
|
+
|
|
144
|
+
return {
|
|
145
|
+
uniqueVisitors,
|
|
146
|
+
totalViews,
|
|
147
|
+
recentActiveUsers: recentActivity
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Distributed locking with timeout and retry
|
|
152
|
+
async acquireLock(key, ttl = 30000, retryCount = 3, retryDelay = 100) {
|
|
153
|
+
const lockKey = `lock:${key}`;
|
|
154
|
+
const lockValue = `${Date.now()}-${Math.random()}`;
|
|
155
|
+
|
|
156
|
+
for (let attempt = 0; attempt < retryCount; attempt++) {
|
|
157
|
+
const result = await this.redis.set(
|
|
158
|
+
lockKey,
|
|
159
|
+
lockValue,
|
|
160
|
+
'PX', ttl,
|
|
161
|
+
'NX'
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
if (result === 'OK') {
|
|
165
|
+
return {
|
|
166
|
+
acquired: true,
|
|
167
|
+
lockValue,
|
|
168
|
+
release: async () => await this.releaseLock(lockKey, lockValue)
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Wait before retry
|
|
173
|
+
if (attempt < retryCount - 1) {
|
|
174
|
+
await new Promise(resolve => setTimeout(resolve, retryDelay));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return { acquired: false };
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
async releaseLock(lockKey, lockValue) {
|
|
182
|
+
const script = `
|
|
183
|
+
if redis.call("get", KEYS[1]) == ARGV[1] then
|
|
184
|
+
return redis.call("del", KEYS[1])
|
|
185
|
+
else
|
|
186
|
+
return 0
|
|
187
|
+
end
|
|
188
|
+
`;
|
|
189
|
+
|
|
190
|
+
return await this.redis.eval(script, 1, lockKey, lockValue);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Key Features
|
|
196
|
+
|
|
197
|
+
### 1. Caching Patterns
|
|
198
|
+
- Multi-layer caching (memory + Redis)
|
|
199
|
+
- Cache-aside and write-through strategies
|
|
200
|
+
- Cache invalidation and warming
|
|
201
|
+
- Rate limiting and throttling
|
|
202
|
+
|
|
203
|
+
### 2. Data Structures
|
|
204
|
+
- Strings for simple key-value storage
|
|
205
|
+
- Hashes for object storage
|
|
206
|
+
- Lists for queues and stacks
|
|
207
|
+
- Sets for unique collections
|
|
208
|
+
- Sorted sets for leaderboards
|
|
209
|
+
- HyperLogLog for cardinality estimation
|
|
210
|
+
|
|
211
|
+
### 3. Real-time Features
|
|
212
|
+
- Pub/sub messaging
|
|
213
|
+
- Streams for event processing
|
|
214
|
+
- Geospatial indexing
|
|
215
|
+
- Bitmap operations
|
|
216
|
+
|
|
217
|
+
### 4. Performance Optimization
|
|
218
|
+
- Pipeline operations for batch processing
|
|
219
|
+
- Lua scripting for atomic operations
|
|
220
|
+
- Connection pooling strategies
|
|
221
|
+
- Memory optimization techniques
|
|
222
|
+
|
|
223
|
+
## Advanced Patterns
|
|
224
|
+
|
|
225
|
+
### Distributed Locking
|
|
226
|
+
- Redlock algorithm for safety
|
|
227
|
+
- Timeout and retry mechanisms
|
|
228
|
+
- Lock release verification
|
|
229
|
+
- Deadlock prevention
|
|
230
|
+
|
|
231
|
+
### Rate Limiting
|
|
232
|
+
- Sliding window implementation
|
|
233
|
+
- Fixed window counters
|
|
234
|
+
- Token bucket algorithm
|
|
235
|
+
- Distributed rate limiting
|
|
236
|
+
|
|
237
|
+
### Analytics and Counting
|
|
238
|
+
- Real-time metrics collection
|
|
239
|
+
- Time-series data storage
|
|
240
|
+
- Approximate counting with HyperLogLog
|
|
241
|
+
- Bitmap analytics for user behavior
|
|
242
|
+
|
|
243
|
+
### Session Management
|
|
244
|
+
- User session storage
|
|
245
|
+
- Shopping cart management
|
|
246
|
+
- Real-time collaboration
|
|
247
|
+
- Presence detection
|
|
248
|
+
|
|
249
|
+
## Best Practices
|
|
250
|
+
- Use appropriate data structures
|
|
251
|
+
- Implement proper key naming conventions
|
|
252
|
+
- Set appropriate TTLs for cache entries
|
|
253
|
+
- Monitor memory usage and performance
|
|
254
|
+
- Use pipelining for batch operations
|
|
255
|
+
- Implement proper error handling
|
|
256
|
+
|
|
257
|
+
## Integration Points
|
|
258
|
+
- Connection pooling libraries (ioredis, redis-py)
|
|
259
|
+
- Cache middleware for web frameworks
|
|
260
|
+
- Message queue systems
|
|
261
|
+
- Real-time analytics platforms
|
|
262
|
+
- Session management systems
|