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,270 @@
|
|
|
1
|
+
# Example Diagrams - All 21 Types
|
|
2
|
+
|
|
3
|
+
Quick reference examples for each Mermaid diagram type.
|
|
4
|
+
|
|
5
|
+
## 1. Flowchart Example
|
|
6
|
+
|
|
7
|
+
```mermaid
|
|
8
|
+
flowchart TD
|
|
9
|
+
Start([Start]) --> Input[Input Data]
|
|
10
|
+
Input --> Process{Validation}
|
|
11
|
+
Process -->|Valid| Calculate[Calculate Result]
|
|
12
|
+
Process -->|Invalid| Error[Error Handler]
|
|
13
|
+
Calculate --> Output[Output]
|
|
14
|
+
Error --> Output
|
|
15
|
+
Output --> End([End])
|
|
16
|
+
|
|
17
|
+
style Start fill:#90EE90
|
|
18
|
+
style End fill:#FFB6C6
|
|
19
|
+
style Error fill:#FFB6C6
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 2. Sequence Diagram Example
|
|
23
|
+
|
|
24
|
+
```mermaid
|
|
25
|
+
sequenceDiagram
|
|
26
|
+
participant User
|
|
27
|
+
participant API
|
|
28
|
+
participant Database
|
|
29
|
+
|
|
30
|
+
User->>API: GET /users
|
|
31
|
+
API->>Database: SELECT * FROM users
|
|
32
|
+
Database-->>API: User records
|
|
33
|
+
API-->>User: JSON response
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 3. Class Diagram Example
|
|
37
|
+
|
|
38
|
+
```mermaid
|
|
39
|
+
classDiagram
|
|
40
|
+
class Animal {
|
|
41
|
+
string name
|
|
42
|
+
eat()
|
|
43
|
+
}
|
|
44
|
+
class Dog {
|
|
45
|
+
bark()
|
|
46
|
+
}
|
|
47
|
+
Animal <|-- Dog
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## 4. State Diagram Example
|
|
51
|
+
|
|
52
|
+
```mermaid
|
|
53
|
+
stateDiagram-v2
|
|
54
|
+
[*] --> Idle
|
|
55
|
+
Idle --> Working: start
|
|
56
|
+
Working --> Idle: complete
|
|
57
|
+
Working --> Error: fail
|
|
58
|
+
Error --> Idle: reset
|
|
59
|
+
Idle --> [*]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 5. ER Diagram Example
|
|
63
|
+
|
|
64
|
+
```mermaid
|
|
65
|
+
erDiagram
|
|
66
|
+
CUSTOMER ||--o{ ORDER : places
|
|
67
|
+
ORDER ||--|{ ORDER-ITEM : contains
|
|
68
|
+
PRODUCT ||--o{ ORDER-ITEM : "included in"
|
|
69
|
+
|
|
70
|
+
CUSTOMER {
|
|
71
|
+
int id PK
|
|
72
|
+
string email
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## 6. Gantt Chart Example
|
|
77
|
+
|
|
78
|
+
```mermaid
|
|
79
|
+
gantt
|
|
80
|
+
title Project Schedule
|
|
81
|
+
dateFormat YYYY-MM-DD
|
|
82
|
+
|
|
83
|
+
section Phase 1
|
|
84
|
+
Design :des, 2025-01-01, 30d
|
|
85
|
+
Implementation :impl, after:des, 45d
|
|
86
|
+
Testing :test, after:impl, 20d
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## 7. Mindmap Example
|
|
90
|
+
|
|
91
|
+
```mermaid
|
|
92
|
+
mindmap
|
|
93
|
+
root((Project))
|
|
94
|
+
Planning
|
|
95
|
+
Timeline
|
|
96
|
+
Resources
|
|
97
|
+
Execution
|
|
98
|
+
Development
|
|
99
|
+
Testing
|
|
100
|
+
Delivery
|
|
101
|
+
Deployment
|
|
102
|
+
Documentation
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## 8. Timeline Example
|
|
106
|
+
|
|
107
|
+
```mermaid
|
|
108
|
+
timeline
|
|
109
|
+
title Development Timeline
|
|
110
|
+
2025-01 : Project Start : Team Assembled
|
|
111
|
+
2025-02 : Development
|
|
112
|
+
2025-03 : Testing
|
|
113
|
+
2025-04 : Launch
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## 9. Git Graph Example
|
|
117
|
+
|
|
118
|
+
```mermaid
|
|
119
|
+
gitGraph
|
|
120
|
+
commit id: "Initial"
|
|
121
|
+
branch develop
|
|
122
|
+
commit id: "Feature 1"
|
|
123
|
+
checkout main
|
|
124
|
+
merge develop
|
|
125
|
+
commit id: "v1.0"
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## 10. C4 Diagram Example
|
|
129
|
+
|
|
130
|
+
```mermaid
|
|
131
|
+
C4Context
|
|
132
|
+
title System Context
|
|
133
|
+
Person(user, "User", "Needs service")
|
|
134
|
+
System(system, "System", "Provides service")
|
|
135
|
+
Rel(user, system, "Uses")
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## 11. User Journey Example
|
|
139
|
+
|
|
140
|
+
```mermaid
|
|
141
|
+
journey
|
|
142
|
+
title Onboarding
|
|
143
|
+
section Sign Up
|
|
144
|
+
Form : 4 : User
|
|
145
|
+
Verify : 3 : User
|
|
146
|
+
section Setup
|
|
147
|
+
Profile : 5 : User
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## 12. Requirement Diagram Example
|
|
151
|
+
|
|
152
|
+
```mermaid
|
|
153
|
+
requirementDiagram
|
|
154
|
+
requirement REQ1 {
|
|
155
|
+
id: 1
|
|
156
|
+
text: Authentication
|
|
157
|
+
risk: High
|
|
158
|
+
}
|
|
159
|
+
element webapp {
|
|
160
|
+
type: Software
|
|
161
|
+
}
|
|
162
|
+
REQ1 - satisfies - webapp
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## 13. Pie Chart Example
|
|
166
|
+
|
|
167
|
+
```mermaid
|
|
168
|
+
pie title Stack Distribution
|
|
169
|
+
"Frontend" : 40
|
|
170
|
+
"Backend" : 35
|
|
171
|
+
"DevOps" : 25
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## 14. Quadrant Chart Example
|
|
175
|
+
|
|
176
|
+
```mermaid
|
|
177
|
+
quadrantChart
|
|
178
|
+
title Priority Matrix
|
|
179
|
+
x-axis Low --> High
|
|
180
|
+
y-axis Low --> High
|
|
181
|
+
Task A: [0.2, 0.8]
|
|
182
|
+
Task B: [0.8, 0.2]
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## 15. XY Chart Example
|
|
186
|
+
|
|
187
|
+
```mermaid
|
|
188
|
+
xychart-beta
|
|
189
|
+
title Performance
|
|
190
|
+
x-axis [Jan, Feb, Mar]
|
|
191
|
+
y-axis "Response Time" 0 --> 300
|
|
192
|
+
line [150, 160, 145]
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## 16. Block Diagram Example
|
|
196
|
+
|
|
197
|
+
```mermaid
|
|
198
|
+
block-beta
|
|
199
|
+
columns 3
|
|
200
|
+
A["Input"]
|
|
201
|
+
B["Process"]
|
|
202
|
+
C["Output"]
|
|
203
|
+
A --> B --> C
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## 17. Kanban Example
|
|
207
|
+
|
|
208
|
+
```mermaid
|
|
209
|
+
kanban
|
|
210
|
+
section Todo
|
|
211
|
+
Task 1
|
|
212
|
+
Task 2
|
|
213
|
+
|
|
214
|
+
section Doing
|
|
215
|
+
Task 3
|
|
216
|
+
|
|
217
|
+
section Done
|
|
218
|
+
Task 4
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## 18. Sankey Diagram Example
|
|
222
|
+
|
|
223
|
+
```mermaid
|
|
224
|
+
sankey-beta
|
|
225
|
+
Users, 100
|
|
226
|
+
Users, Development, 60
|
|
227
|
+
Users, QA, 40
|
|
228
|
+
Development, Production, 60
|
|
229
|
+
QA, Production, 40
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## 19. Packet Diagram Example
|
|
233
|
+
|
|
234
|
+
```mermaid
|
|
235
|
+
packet-beta
|
|
236
|
+
0-7: Source Port
|
|
237
|
+
8-15: Dest Port
|
|
238
|
+
16-31: Sequence
|
|
239
|
+
32-47: ACK
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## 20. Radar Chart Example
|
|
243
|
+
|
|
244
|
+
```mermaid
|
|
245
|
+
radar
|
|
246
|
+
title Skills
|
|
247
|
+
Frontend: 90
|
|
248
|
+
Backend: 85
|
|
249
|
+
DevOps: 75
|
|
250
|
+
Design: 70
|
|
251
|
+
max: 100
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
## 21. Architecture Diagram Example
|
|
255
|
+
|
|
256
|
+
```mermaid
|
|
257
|
+
graph TB
|
|
258
|
+
Web["Web App"]
|
|
259
|
+
API["API Server"]
|
|
260
|
+
DB["Database"]
|
|
261
|
+
Cache["Redis"]
|
|
262
|
+
|
|
263
|
+
Web --> API
|
|
264
|
+
API --> DB
|
|
265
|
+
API --> Cache
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
For more examples, visit [mermaid.live](https://mermaid.live)
|
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: moai-library-mermaid/optimization
|
|
3
|
+
description: Performance optimization, rendering strategies, and SVG generation for Mermaid diagrams
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Mermaid Diagram Optimization (v6.0.0)
|
|
7
|
+
|
|
8
|
+
## Rendering Performance
|
|
9
|
+
|
|
10
|
+
### 1. Mermaid Rendering Strategies
|
|
11
|
+
|
|
12
|
+
Strategy 1: Server-Side Rendering (SSR)
|
|
13
|
+
```javascript
|
|
14
|
+
// Node.js server with mermaid-cli
|
|
15
|
+
const { execSync } = require('child_process');
|
|
16
|
+
const fs = require('fs');
|
|
17
|
+
|
|
18
|
+
function generateSVG(mermaidCode, outputPath) {
|
|
19
|
+
const tempFile = '/tmp/diagram.mmd';
|
|
20
|
+
fs.writeFileSync(tempFile, mermaidCode);
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
// Use mermaid-cli for server-side rendering
|
|
24
|
+
execSync(`mmdc -i ${tempFile} -o ${outputPath} -t dark -s 4`);
|
|
25
|
+
|
|
26
|
+
return {
|
|
27
|
+
status: 'success',
|
|
28
|
+
path: outputPath,
|
|
29
|
+
size: fs.statSync(outputPath).size
|
|
30
|
+
};
|
|
31
|
+
} catch (error) {
|
|
32
|
+
return {
|
|
33
|
+
status: 'error',
|
|
34
|
+
message: error.message
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Cache generated diagrams
|
|
40
|
+
const diagrams = new Map();
|
|
41
|
+
|
|
42
|
+
app.get('/diagram/:id.svg', (req, res) => {
|
|
43
|
+
const cacheKey = `diagram-${req.params.id}`;
|
|
44
|
+
|
|
45
|
+
if (diagrams.has(cacheKey)) {
|
|
46
|
+
return res.sendFile(diagrams.get(cacheKey));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const mermaidCode = getMermaidCode(req.params.id);
|
|
50
|
+
const outputPath = generateSVG(mermaidCode, `/tmp/${cacheKey}.svg`);
|
|
51
|
+
|
|
52
|
+
diagrams.set(cacheKey, outputPath);
|
|
53
|
+
res.sendFile(outputPath);
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Strategy 2: Client-Side Rendering (CSR)
|
|
58
|
+
```typescript
|
|
59
|
+
// React component with lazy loading
|
|
60
|
+
import mermaid from 'mermaid';
|
|
61
|
+
|
|
62
|
+
export const MermaidDiagram = ({ code, theme = 'default' }: Props) => {
|
|
63
|
+
const ref = useRef<HTMLDivElement>(null);
|
|
64
|
+
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
// Initialize mermaid with optimized settings
|
|
67
|
+
mermaid.initialize({
|
|
68
|
+
startOnLoad: false,
|
|
69
|
+
theme: theme,
|
|
70
|
+
securityLevel: 'antiscript', // Prevent XSS
|
|
71
|
+
flowchart: { useMaxWidth: true },
|
|
72
|
+
// Disable animations for better performance
|
|
73
|
+
gantt: { useWidth: undefined }
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// Render only visible diagrams
|
|
77
|
+
if (ref.current && isInViewport(ref.current)) {
|
|
78
|
+
mermaid.contentLoaderAsync();
|
|
79
|
+
}
|
|
80
|
+
}, [code, theme]);
|
|
81
|
+
|
|
82
|
+
return <div ref={ref} className="mermaid">{code}</div>;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
// Intersection Observer for lazy loading
|
|
86
|
+
const useVisibilityObserver = (ref) => {
|
|
87
|
+
const [isVisible, setIsVisible] = useState(false);
|
|
88
|
+
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
const observer = new IntersectionObserver(([entry]) => {
|
|
91
|
+
if (entry.isIntersecting) {
|
|
92
|
+
setIsVisible(true);
|
|
93
|
+
observer.unobserve(entry.target);
|
|
94
|
+
}
|
|
95
|
+
}, { threshold: 0.1 });
|
|
96
|
+
|
|
97
|
+
if (ref.current) observer.observe(ref.current);
|
|
98
|
+
return () => observer.disconnect();
|
|
99
|
+
}, [ref]);
|
|
100
|
+
|
|
101
|
+
return isVisible;
|
|
102
|
+
};
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Strategy 3: Hybrid Rendering
|
|
106
|
+
```typescript
|
|
107
|
+
// Use SSR for complex diagrams, CSR for simple ones
|
|
108
|
+
interface DiagramConfig {
|
|
109
|
+
complexity: 'simple' | 'medium' | 'complex';
|
|
110
|
+
data: string;
|
|
111
|
+
format: 'svg' | 'png';
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
async function renderDiagram(config: DiagramConfig) {
|
|
115
|
+
if (config.complexity === 'simple') {
|
|
116
|
+
// Client-side for fast rendering
|
|
117
|
+
return renderClientSide(config.data);
|
|
118
|
+
} else if (config.complexity === 'complex') {
|
|
119
|
+
// Server-side for reliability
|
|
120
|
+
return await renderServerSide(config.data, config.format);
|
|
121
|
+
} else {
|
|
122
|
+
// Hybrid: SSR with caching
|
|
123
|
+
const cached = await checkCache(config.data);
|
|
124
|
+
if (cached) return cached;
|
|
125
|
+
|
|
126
|
+
const svg = await renderServerSide(config.data, 'svg');
|
|
127
|
+
await cache(config.data, svg);
|
|
128
|
+
return svg;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Caching Strategies
|
|
134
|
+
|
|
135
|
+
### 1. Multi-Layer Caching
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
class DiagramCache {
|
|
139
|
+
private memoryCache = new Map<string, CacheEntry>();
|
|
140
|
+
private redisClient = createRedisClient();
|
|
141
|
+
private S3Bucket = createS3Bucket();
|
|
142
|
+
|
|
143
|
+
async get(diagramId: string): Promise<SVG | null> {
|
|
144
|
+
// Layer 1: Memory cache (milliseconds)
|
|
145
|
+
let cached = this.memoryCache.get(diagramId);
|
|
146
|
+
if (cached && !this.isExpired(cached)) {
|
|
147
|
+
metrics.increment('cache.memory.hit');
|
|
148
|
+
return cached.svg;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Layer 2: Redis cache (seconds/minutes)
|
|
152
|
+
try {
|
|
153
|
+
cached = await this.redisClient.get(diagramId);
|
|
154
|
+
if (cached) {
|
|
155
|
+
metrics.increment('cache.redis.hit');
|
|
156
|
+
// Populate memory cache
|
|
157
|
+
this.memoryCache.set(diagramId, cached);
|
|
158
|
+
return cached.svg;
|
|
159
|
+
}
|
|
160
|
+
} catch (error) {
|
|
161
|
+
logger.warn('Redis cache miss', { diagramId });
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Layer 3: S3 cache (permanent)
|
|
165
|
+
try {
|
|
166
|
+
cached = await this.S3Bucket.get(`diagrams/${diagramId}.svg`);
|
|
167
|
+
if (cached) {
|
|
168
|
+
metrics.increment('cache.s3.hit');
|
|
169
|
+
// Populate Redis and memory
|
|
170
|
+
await this.redisClient.set(diagramId, cached, 3600); // 1 hour TTL
|
|
171
|
+
this.memoryCache.set(diagramId, cached);
|
|
172
|
+
return cached.svg;
|
|
173
|
+
}
|
|
174
|
+
} catch (error) {
|
|
175
|
+
logger.warn('S3 cache miss', { diagramId });
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Cache miss - generate new
|
|
179
|
+
metrics.increment('cache.miss');
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
async set(diagramId: string, svg: SVG, ttl: number = 3600) {
|
|
184
|
+
const entry = { svg, timestamp: Date.now(), ttl };
|
|
185
|
+
|
|
186
|
+
// All layers
|
|
187
|
+
this.memoryCache.set(diagramId, entry);
|
|
188
|
+
await this.redisClient.set(diagramId, entry, ttl);
|
|
189
|
+
await this.S3Bucket.put(`diagrams/${diagramId}.svg`, svg);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
invalidate(diagramId: string) {
|
|
193
|
+
this.memoryCache.delete(diagramId);
|
|
194
|
+
this.redisClient.del(diagramId);
|
|
195
|
+
// Keep S3 for history
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### 2. Cache Invalidation Strategies
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
// Event-based cache invalidation
|
|
204
|
+
class CacheInvalidator {
|
|
205
|
+
async invalidateOnDiagramUpdate(diagramId: string) {
|
|
206
|
+
// Publish invalidation event
|
|
207
|
+
await eventBus.publish('diagram.updated', { diagramId });
|
|
208
|
+
|
|
209
|
+
// Subscribe to updates
|
|
210
|
+
eventBus.subscribe('diagram.updated', async (event) => {
|
|
211
|
+
await this.cache.invalidate(event.diagramId);
|
|
212
|
+
|
|
213
|
+
// Pre-generate for frequently accessed diagrams
|
|
214
|
+
if (await this.isFavorite(event.diagramId)) {
|
|
215
|
+
await this.preGenerateSVG(event.diagramId);
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Time-based TTL
|
|
221
|
+
setTTL(diagramId: string, category: string) {
|
|
222
|
+
const ttls = {
|
|
223
|
+
'architecture': 86400, // 24 hours
|
|
224
|
+
'sequence': 3600, // 1 hour
|
|
225
|
+
'temporary': 600, // 10 minutes
|
|
226
|
+
'frequently_accessed': 0 // Never expire
|
|
227
|
+
};
|
|
228
|
+
return ttls[category] || 3600;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## SVG Optimization
|
|
234
|
+
|
|
235
|
+
### 1. SVG Size Reduction
|
|
236
|
+
|
|
237
|
+
```typescript
|
|
238
|
+
import { minify } from 'svgo';
|
|
239
|
+
|
|
240
|
+
class SVGOptimizer {
|
|
241
|
+
async optimize(svg: string): Promise<string> {
|
|
242
|
+
const optimized = minify(svg, {
|
|
243
|
+
plugins: [
|
|
244
|
+
{
|
|
245
|
+
name: 'preset-default',
|
|
246
|
+
params: {
|
|
247
|
+
overrides: {
|
|
248
|
+
cleanupIds: { minify: true },
|
|
249
|
+
removeViewBox: false, // Keep for responsiveness
|
|
250
|
+
removeHiddenElems: true,
|
|
251
|
+
removeEmptyContainers: true,
|
|
252
|
+
convertStyleToAttrs: true,
|
|
253
|
+
removeEmptyAttrs: true,
|
|
254
|
+
removeUnknownsAndDefaults: true,
|
|
255
|
+
removeUselessDefs: true,
|
|
256
|
+
removeUselessStrokeAndFill: true,
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
'convertColors',
|
|
261
|
+
'removeDoctype'
|
|
262
|
+
]
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
return optimized.data;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// Measure compression ratio
|
|
269
|
+
measureCompression(original: string, optimized: string) {
|
|
270
|
+
const ratio = ((original.length - optimized.length) / original.length * 100).toFixed(2);
|
|
271
|
+
return {
|
|
272
|
+
original: `${(original.length / 1024).toFixed(2)}KB`,
|
|
273
|
+
optimized: `${(optimized.length / 1024).toFixed(2)}KB`,
|
|
274
|
+
saved: `${ratio}%`
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Usage
|
|
280
|
+
const optimizer = new SVGOptimizer();
|
|
281
|
+
const original = generateMermaidSVG(code);
|
|
282
|
+
const optimized = await optimizer.optimize(original);
|
|
283
|
+
const stats = optimizer.measureCompression(original, optimized);
|
|
284
|
+
console.log(`Optimized: ${stats.saved}% reduction`);
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### 2. Responsive SVG
|
|
288
|
+
|
|
289
|
+
```typescript
|
|
290
|
+
function createResponsiveSVG(width: number, height: number) {
|
|
291
|
+
return `
|
|
292
|
+
<svg
|
|
293
|
+
viewBox="0 0 ${width} ${height}"
|
|
294
|
+
preserveAspectRatio="xMidYMid meet"
|
|
295
|
+
class="mermaid-responsive"
|
|
296
|
+
style="width: 100%; height: auto; max-width: 100%;"
|
|
297
|
+
>
|
|
298
|
+
<!-- diagram content -->
|
|
299
|
+
</svg>
|
|
300
|
+
`;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// CSS for responsive behavior
|
|
304
|
+
const styles = `
|
|
305
|
+
.mermaid-responsive {
|
|
306
|
+
display: block;
|
|
307
|
+
margin: 0 auto;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
@media (max-width: 768px) {
|
|
311
|
+
.mermaid-responsive {
|
|
312
|
+
font-size: 12px;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
.mermaid-node text {
|
|
316
|
+
font-size: 10px;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
`;
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
## Performance Monitoring
|
|
323
|
+
|
|
324
|
+
### 1. Metrics Collection
|
|
325
|
+
|
|
326
|
+
```typescript
|
|
327
|
+
class DiagramMetrics {
|
|
328
|
+
async trackRendering(diagramId: string, code: string) {
|
|
329
|
+
const startTime = performance.now();
|
|
330
|
+
|
|
331
|
+
const svg = await renderDiagram(code);
|
|
332
|
+
|
|
333
|
+
const duration = performance.now() - startTime;
|
|
334
|
+
const nodeCount = svg.match(/<g class="node"/g)?.length || 0;
|
|
335
|
+
const edgeCount = svg.match(/<line/g)?.length || 0;
|
|
336
|
+
const svgSize = new Blob([svg]).size;
|
|
337
|
+
|
|
338
|
+
// Send to metrics service
|
|
339
|
+
await metrics.record({
|
|
340
|
+
type: 'diagram.render',
|
|
341
|
+
diagramId,
|
|
342
|
+
duration_ms: duration,
|
|
343
|
+
node_count: nodeCount,
|
|
344
|
+
edge_count: edgeCount,
|
|
345
|
+
svg_size_bytes: svgSize,
|
|
346
|
+
complexity: this.calculateComplexity(nodeCount, edgeCount),
|
|
347
|
+
timestamp: new Date().toISOString()
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
return {
|
|
351
|
+
duration_ms: duration,
|
|
352
|
+
metrics: { nodeCount, edgeCount, svgSize }
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
calculateComplexity(nodes: number, edges: number): string {
|
|
357
|
+
const score = nodes + edges;
|
|
358
|
+
if (score < 20) return 'simple';
|
|
359
|
+
if (score < 50) return 'medium';
|
|
360
|
+
if (score < 100) return 'complex';
|
|
361
|
+
return 'very-complex';
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
### 2. Performance Budgets
|
|
367
|
+
|
|
368
|
+
```typescript
|
|
369
|
+
interface PerformanceBudget {
|
|
370
|
+
renderTime_ms: number;
|
|
371
|
+
svgSize_bytes: number;
|
|
372
|
+
nodeCount: number;
|
|
373
|
+
memory_mb: number;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
const budgets: Record<string, PerformanceBudget> = {
|
|
377
|
+
'simple': {
|
|
378
|
+
renderTime_ms: 100,
|
|
379
|
+
svgSize_bytes: 10000,
|
|
380
|
+
nodeCount: 20,
|
|
381
|
+
memory_mb: 10
|
|
382
|
+
},
|
|
383
|
+
'medium': {
|
|
384
|
+
renderTime_ms: 500,
|
|
385
|
+
svgSize_bytes: 100000,
|
|
386
|
+
nodeCount: 50,
|
|
387
|
+
memory_mb: 50
|
|
388
|
+
},
|
|
389
|
+
'complex': {
|
|
390
|
+
renderTime_ms: 2000,
|
|
391
|
+
svgSize_bytes: 500000,
|
|
392
|
+
nodeCount: 150,
|
|
393
|
+
memory_mb: 200
|
|
394
|
+
}
|
|
395
|
+
};
|
|
396
|
+
|
|
397
|
+
async function validatePerformance(diagramId: string, metrics: DiagramMetrics) {
|
|
398
|
+
const complexity = metrics.complexity;
|
|
399
|
+
const budget = budgets[complexity];
|
|
400
|
+
|
|
401
|
+
const issues = [];
|
|
402
|
+
if (metrics.duration_ms > budget.renderTime_ms) {
|
|
403
|
+
issues.push(`Render time exceeded: ${metrics.duration_ms}ms > ${budget.renderTime_ms}ms`);
|
|
404
|
+
}
|
|
405
|
+
if (metrics.svgSize_bytes > budget.svgSize_bytes) {
|
|
406
|
+
issues.push(`SVG size exceeded: ${metrics.svgSize_bytes}B > ${budget.svgSize_bytes}B`);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
if (issues.length > 0) {
|
|
410
|
+
logger.warn('Performance budget exceeded', { diagramId, issues });
|
|
411
|
+
await metrics.alert('diagram.performance.budget_exceeded', { diagramId, issues });
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
return issues.length === 0;
|
|
415
|
+
}
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
## Optimization Checklist
|
|
419
|
+
|
|
420
|
+
- [ ] Caching: Implement multi-layer caching (memory → Redis → S3)
|
|
421
|
+
- [ ] SVG Optimization: Minify SVG using SVGO with proper configuration
|
|
422
|
+
- [ ] Lazy Loading: Use Intersection Observer for diagrams below fold
|
|
423
|
+
- [ ] Code Splitting: Load mermaid library asynchronously
|
|
424
|
+
- [ ] Performance Monitoring: Track render times and SVG sizes
|
|
425
|
+
- [ ] Responsive Design: Use viewBox and preserveAspectRatio for scaling
|
|
426
|
+
- [ ] Content Delivery: Use CDN for cached SVG files
|
|
427
|
+
- [ ] Browser Compatibility: Test with Chrome, Firefox, Safari, Edge
|
|
428
|
+
|
|
429
|
+
## Best Practices for Large-Scale Deployments
|
|
430
|
+
|
|
431
|
+
1. Pre-generate Common Diagrams: Generate popular diagrams during off-peak hours
|
|
432
|
+
2. CDN Distribution: Cache SVGs on CDN for global delivery
|
|
433
|
+
3. Rate Limiting: Limit diagram generation requests per user/IP
|
|
434
|
+
4. Queue Processing: Use job queues for complex diagram generation
|
|
435
|
+
5. Error Recovery: Implement graceful degradation (show placeholder if rendering fails)
|
|
436
|
+
6. Monitoring: Alert on rendering failures or performance degradation
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
Version: 6.0.0 | Last Updated: 2025-11-22 | Enterprise Ready:
|