moai-adk 0.25.4__py3-none-any.whl → 0.41.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.
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 +60 -126
- moai_adk/cli/commands/language.py +14 -35
- moai_adk/cli/commands/status.py +9 -15
- moai_adk/cli/commands/update.py +1560 -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 +683 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +493 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +422 -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/migration.py +19 -9
- moai_adk/core/config/unified.py +610 -0
- moai_adk/core/context_manager.py +6 -12
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +747 -116
- 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 +422 -0
- moai_adk/core/git/event_detector.py +16 -5
- moai_adk/core/git/manager.py +91 -1
- 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 +578 -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 +666 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +389 -0
- moai_adk/core/migration/backup_manager.py +131 -12
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +181 -18
- moai_adk/core/migration/interactive_checkbox_ui.py +499 -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 +127 -27
- moai_adk/core/migration/version_migrator.py +47 -12
- moai_adk/core/performance/cache_system.py +8 -10
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/backup_utils.py +9 -1
- moai_adk/core/project/checker.py +2 -4
- moai_adk/core/project/detector.py +1 -3
- moai_adk/core/project/initializer.py +142 -93
- moai_adk/core/project/phase_executor.py +130 -111
- moai_adk/core/project/validator.py +6 -12
- moai_adk/core/quality/trust_checker.py +39 -37
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +116 -164
- moai_adk/core/session_manager.py +10 -26
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec_status_manager.py +64 -74
- moai_adk/core/template/backup.py +48 -22
- moai_adk/core/template/config.py +142 -45
- moai_adk/core/template/merger.py +45 -27
- moai_adk/core/template/processor.py +391 -152
- moai_adk/core/template_engine.py +83 -41
- moai_adk/core/template_variable_synchronizer.py +431 -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 +477 -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 +18 -6
- moai_adk/statusline/enhanced_output_style_detector.py +23 -15
- moai_adk/statusline/main.py +109 -15
- moai_adk/statusline/renderer.py +85 -69
- 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 +716 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +480 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1194 -0
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +753 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +672 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +903 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +782 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +407 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +722 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +727 -0
- moai_adk/templates/.claude/agents/moai/expert-performance.md +661 -0
- moai_adk/templates/.claude/agents/moai/expert-refactoring.md +218 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +525 -0
- moai_adk/templates/.claude/agents/moai/expert-testing.md +737 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1047 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +438 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +578 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +1092 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +897 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +640 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +815 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +786 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +797 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +464 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1588 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +795 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +475 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1038 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1339 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1367 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +825 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +1358 -0
- moai_adk/templates/.claude/commands/moai/9-feedback.md +320 -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/README.md +143 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +104 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +247 -0
- moai_adk/templates/.claude/hooks/moai/lib/common.py +161 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +444 -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/exceptions.py +171 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +407 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +104 -0
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +219 -0
- moai_adk/templates/.claude/hooks/moai/lib/project.py +777 -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/tool_registry.py +804 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +542 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +256 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +253 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +307 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +231 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +866 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1125 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +643 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
- moai_adk/templates/.claude/settings.json +209 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +302 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/reference.md +139 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +302 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +252 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +56 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +120 -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 +185 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +207 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +234 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +324 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +326 -0
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -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-database/reference.md +545 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +194 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +454 -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/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 +280 -0
- moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +327 -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-formats-data/reference.md +585 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +243 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -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-cli-reference-official.md +420 -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-devcontainers-official.md +381 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +670 -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-plugin-marketplaces-official.md +308 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +432 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -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 +467 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +420 -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-claude/reference.md +209 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +449 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +414 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -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 +359 -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-advanced.md +279 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +228 -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/patterns.md +22 -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-ears-format.md +200 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +171 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -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 +239 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +311 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +363 -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-lang-cpp/SKILL.md +430 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +193 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +585 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +403 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +394 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +472 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +386 -0
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +418 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +973 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1543 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +383 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +504 -0
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +389 -0
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +432 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +211 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +191 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +364 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +164 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/modules/advanced-patterns.md +465 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/modules/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 +335 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -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 +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +350 -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/modules/optimization.md +303 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +373 -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-auth0/SKILL.md +283 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +425 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +228 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +249 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +230 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +205 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +223 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +206 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +209 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +473 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/modules/migration.md +341 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/modules/validation.md +373 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +464 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +306 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/SKILL.md +214 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/examples.md +697 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/index.md +96 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/acp.md +115 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/agents.md +241 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/commands.md +197 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/custom-tools.md +197 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/formatters.md +164 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/keybinds.md +150 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/lsp-servers.md +156 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/mcp-servers.md +214 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/models.md +197 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/permissions.md +162 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/rules.md +129 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/skills.md +192 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/themes.md +200 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/tools.md +169 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/config.md +211 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/enterprise.md +68 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/intro.md +127 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/migration-1.0.md +82 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/network.md +72 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/providers.md +310 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/troubleshooting.md +124 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/ecosystem.md +75 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/plugins.md +218 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/sdk.md +266 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/server.md +207 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/cli.md +159 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/github.md +181 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/gitlab.md +122 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/ide.md +74 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/share.md +106 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/tui.md +129 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/zen.md +118 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/reference.md +790 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +211 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/modules/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/modules/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +260 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -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 +1434 -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 +92 -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-spec/SKILL.md +336 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +386 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -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-templates/reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +307 -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/examples.md +672 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +269 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/advanced-patterns.md +576 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +302 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +263 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/optimization.md +505 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +327 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +313 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +265 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -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-workflow-worktree/SKILL.md +227 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/examples.md +606 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/reference.md +357 -0
- moai_adk/templates/.git-hooks/pre-commit +103 -41
- moai_adk/templates/.git-hooks/pre-push +244 -31
- 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 +181 -44
- moai_adk/templates/.lsp.json +152 -0
- moai_adk/templates/.mcp.json +6 -15
- moai_adk/templates/.moai/config/config.yaml +58 -0
- moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +259 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +183 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -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 +18 -0
- moai_adk/templates/.moai/config/sections/system.yaml +24 -0
- moai_adk/templates/.moai/config/sections/user.yaml +5 -0
- moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +804 -499
- moai_adk/utils/__init__.py +24 -1
- moai_adk/utils/banner.py +7 -10
- moai_adk/utils/common.py +49 -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.41.0.dist-info/METADATA +3274 -0
- moai_adk-0.41.0.dist-info/RECORD +683 -0
- {moai_adk-0.25.4.dist-info → moai_adk-0.41.0.dist-info}/WHEEL +1 -1
- {moai_adk-0.25.4.dist-info → moai_adk-0.41.0.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/core/config/auto_spec_config.py +0 -346
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +0 -925
- moai_adk/core/spec/confidence_scoring.py +0 -749
- moai_adk/core/spec/ears_template_engine.py +0 -1182
- moai_adk/core/spec/quality_validator.py +0 -721
- 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.41.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -39,9 +39,7 @@ def migrate_config_to_nested_structure(config: dict[str, Any]) -> dict[str, Any]
|
|
|
39
39
|
from ..language_config import LANGUAGE_CONFIG
|
|
40
40
|
|
|
41
41
|
# Extract language names from enhanced config
|
|
42
|
-
language_names = {
|
|
43
|
-
code: info["native_name"] for code, info in LANGUAGE_CONFIG.items()
|
|
44
|
-
}
|
|
42
|
+
language_names = {code: info["native_name"] for code, info in LANGUAGE_CONFIG.items()}
|
|
45
43
|
|
|
46
44
|
language_name = language_names.get(conversation_language, "English")
|
|
47
45
|
|
|
@@ -51,6 +49,22 @@ def migrate_config_to_nested_structure(config: dict[str, Any]) -> dict[str, Any]
|
|
|
51
49
|
"conversation_language_name": language_name,
|
|
52
50
|
}
|
|
53
51
|
|
|
52
|
+
# 2. Language settings migration
|
|
53
|
+
# Old: "language": "ko"
|
|
54
|
+
# New: "language": {"conversation_language": "ko", "conversation_language_name": "Korean"}
|
|
55
|
+
if "language" in config and isinstance(config["language"], str):
|
|
56
|
+
old_lang = config["language"]
|
|
57
|
+
lang_names = {
|
|
58
|
+
"ko": "Korean",
|
|
59
|
+
"en": "English",
|
|
60
|
+
"ja": "Japanese",
|
|
61
|
+
"zh": "Chinese",
|
|
62
|
+
}
|
|
63
|
+
config["language"] = {
|
|
64
|
+
"conversation_language": old_lang,
|
|
65
|
+
"conversation_language_name": lang_names.get(old_lang, "English"),
|
|
66
|
+
}
|
|
67
|
+
|
|
54
68
|
return config
|
|
55
69
|
|
|
56
70
|
|
|
@@ -106,9 +120,7 @@ def get_conversation_language_name(config: dict[str, Any]) -> str:
|
|
|
106
120
|
from ..language_config import LANGUAGE_CONFIG
|
|
107
121
|
|
|
108
122
|
# Extract language names from enhanced config
|
|
109
|
-
language_names = {
|
|
110
|
-
code: info["native_name"] for code, info in LANGUAGE_CONFIG.items()
|
|
111
|
-
}
|
|
123
|
+
language_names = {code: info["native_name"] for code, info in LANGUAGE_CONFIG.items()}
|
|
112
124
|
return language_names.get(language_code, "English")
|
|
113
125
|
|
|
114
126
|
|
|
@@ -164,9 +176,7 @@ def migrate_config_schema_v0_17_0(config: dict[str, Any]) -> dict[str, Any]:
|
|
|
164
176
|
if "spec_git_workflow" not in github_config:
|
|
165
177
|
github_config["spec_git_workflow"] = "per_spec"
|
|
166
178
|
github_config["spec_git_workflow_configured"] = False
|
|
167
|
-
github_config["spec_git_workflow_rationale"] = (
|
|
168
|
-
"Ask per SPEC (flexible, user controls each workflow)"
|
|
169
|
-
)
|
|
179
|
+
github_config["spec_git_workflow_rationale"] = "Ask per SPEC (flexible, user controls each workflow)"
|
|
170
180
|
|
|
171
181
|
# Add notes for new fields if missing
|
|
172
182
|
if "notes_new_fields" not in github_config:
|
|
@@ -0,0 +1,610 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Unified Configuration Manager for MoAI-ADK
|
|
3
|
+
|
|
4
|
+
Thread-safe singleton configuration manager that consolidates all config management
|
|
5
|
+
patterns from across the codebase into a single, robust implementation.
|
|
6
|
+
|
|
7
|
+
Features:
|
|
8
|
+
- Thread-safe singleton with double-checked locking
|
|
9
|
+
- Lazy loading with in-memory caching
|
|
10
|
+
- Atomic writes with backup creation
|
|
11
|
+
- Schema validation support
|
|
12
|
+
- Smart defaults with auto-detection
|
|
13
|
+
- Deep merge for nested configs
|
|
14
|
+
- Configuration migration between versions
|
|
15
|
+
- Domain-specific facades for different subsystems
|
|
16
|
+
- Modular section-based YAML configuration (new in v0.36.0)
|
|
17
|
+
|
|
18
|
+
Design Philosophy:
|
|
19
|
+
- Primary: Modular section files `.moai/config/sections/*.yaml`
|
|
20
|
+
- Fallback: Legacy monolithic `.moai/config/config.yaml` or `config.json`
|
|
21
|
+
- Best patterns from StatuslineConfig, UnifiedConfigManager, ConfigurationManager
|
|
22
|
+
- Backward compatible with existing ConfigManager interfaces
|
|
23
|
+
- Performance optimized with caching and minimal I/O
|
|
24
|
+
|
|
25
|
+
Configuration Architecture:
|
|
26
|
+
- New projects: Modular sections (language.yaml, user.yaml, project.yaml, etc.)
|
|
27
|
+
- Legacy projects: Monolithic config.json/config.yaml (auto-migrated on update)
|
|
28
|
+
- Priority: Section files override monolithic config if both exist
|
|
29
|
+
|
|
30
|
+
Usage:
|
|
31
|
+
>>> from moai_adk.core.config.unified import get_unified_config
|
|
32
|
+
>>> config = get_unified_config()
|
|
33
|
+
>>> timeout = config.get("hooks.timeout_ms", 2000)
|
|
34
|
+
>>> config.update({"hooks.timeout_ms": 3000})
|
|
35
|
+
>>> config.save()
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
import json
|
|
39
|
+
import logging
|
|
40
|
+
import shutil
|
|
41
|
+
import threading
|
|
42
|
+
from datetime import datetime
|
|
43
|
+
from functools import lru_cache
|
|
44
|
+
from pathlib import Path
|
|
45
|
+
from typing import Any, Dict, Optional, Union
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
import yaml
|
|
49
|
+
|
|
50
|
+
YAML_AVAILABLE = True
|
|
51
|
+
except ImportError:
|
|
52
|
+
YAML_AVAILABLE = False
|
|
53
|
+
|
|
54
|
+
logger = logging.getLogger(__name__)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class UnifiedConfigManager:
|
|
58
|
+
"""
|
|
59
|
+
Thread-safe singleton configuration manager for MoAI-ADK.
|
|
60
|
+
|
|
61
|
+
This class consolidates all configuration management patterns from:
|
|
62
|
+
- StatuslineConfig: Thread-safe singleton pattern
|
|
63
|
+
- UnifiedConfigManager (skills): Backup, migration, validation
|
|
64
|
+
- ConfigurationManager (project): Smart defaults, auto-detection
|
|
65
|
+
- ConfigManager (hooks): Convenience functions
|
|
66
|
+
|
|
67
|
+
Attributes:
|
|
68
|
+
_instance: Singleton instance
|
|
69
|
+
_config: Cached configuration dictionary
|
|
70
|
+
_lock: Thread lock for singleton pattern
|
|
71
|
+
_config_path: Path to configuration file
|
|
72
|
+
_last_modified: Last modification timestamp for cache invalidation
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
_instance: Optional["UnifiedConfigManager"] = None
|
|
76
|
+
_config: Dict[str, Any] = {}
|
|
77
|
+
_lock = threading.Lock()
|
|
78
|
+
_config_path: Optional[Path] = None
|
|
79
|
+
_last_modified: Optional[float] = None
|
|
80
|
+
|
|
81
|
+
def __new__(cls, config_path: Optional[Union[str, Path]] = None):
|
|
82
|
+
"""
|
|
83
|
+
Create or return singleton instance with double-checked locking.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
config_path: Optional path to config file (default: .moai/config/config.json)
|
|
87
|
+
|
|
88
|
+
Returns:
|
|
89
|
+
UnifiedConfigManager: Singleton instance
|
|
90
|
+
"""
|
|
91
|
+
# Double-checked locking pattern for thread-safe singleton
|
|
92
|
+
if cls._instance is None:
|
|
93
|
+
with cls._lock:
|
|
94
|
+
# Double-check after acquiring lock
|
|
95
|
+
if cls._instance is None:
|
|
96
|
+
cls._instance = super().__new__(cls)
|
|
97
|
+
cls._instance._initialize(config_path)
|
|
98
|
+
return cls._instance
|
|
99
|
+
|
|
100
|
+
def _initialize(self, config_path: Optional[Union[str, Path]] = None) -> None:
|
|
101
|
+
"""
|
|
102
|
+
Initialize configuration manager (called once by singleton).
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
config_path: Optional path to config file (legacy mode) or sections directory
|
|
106
|
+
"""
|
|
107
|
+
# Set config path with auto-detection
|
|
108
|
+
if config_path:
|
|
109
|
+
self._config_path = Path(config_path)
|
|
110
|
+
else:
|
|
111
|
+
# Auto-detect configuration strategy
|
|
112
|
+
base_path = Path.cwd() / ".moai" / "config"
|
|
113
|
+
sections_dir = base_path / "sections"
|
|
114
|
+
|
|
115
|
+
# Priority 1: Section-based configuration (new approach)
|
|
116
|
+
if sections_dir.exists() and sections_dir.is_dir():
|
|
117
|
+
self._config_path = sections_dir
|
|
118
|
+
else:
|
|
119
|
+
# Priority 2: Monolithic YAML (legacy)
|
|
120
|
+
yaml_path = base_path / "config.yaml"
|
|
121
|
+
json_path = base_path / "config.json"
|
|
122
|
+
|
|
123
|
+
if YAML_AVAILABLE and yaml_path.exists():
|
|
124
|
+
self._config_path = yaml_path
|
|
125
|
+
elif json_path.exists():
|
|
126
|
+
self._config_path = json_path
|
|
127
|
+
else:
|
|
128
|
+
# Default to sections for new projects
|
|
129
|
+
self._config_path = sections_dir if YAML_AVAILABLE else yaml_path
|
|
130
|
+
|
|
131
|
+
# Load configuration
|
|
132
|
+
self._load_config()
|
|
133
|
+
|
|
134
|
+
def _load_config(self) -> None:
|
|
135
|
+
"""
|
|
136
|
+
Load configuration from file or sections with caching.
|
|
137
|
+
|
|
138
|
+
Implements cache invalidation based on file modification time.
|
|
139
|
+
Falls back to default configuration if file doesn't exist.
|
|
140
|
+
Supports three modes:
|
|
141
|
+
1. Section-based YAML (new): Load from .moai/config/sections/*.yaml
|
|
142
|
+
2. Monolithic YAML (legacy): Load from .moai/config/config.yaml
|
|
143
|
+
3. Monolithic JSON (legacy): Load from .moai/config/config.json
|
|
144
|
+
"""
|
|
145
|
+
try:
|
|
146
|
+
# Check if path exists
|
|
147
|
+
if not self._config_path.exists():
|
|
148
|
+
logger.warning(f"Config path not found: {self._config_path}")
|
|
149
|
+
self._config = self._get_default_config()
|
|
150
|
+
return
|
|
151
|
+
|
|
152
|
+
# Section-based configuration (new approach)
|
|
153
|
+
if self._config_path.is_dir():
|
|
154
|
+
self._load_from_sections()
|
|
155
|
+
else:
|
|
156
|
+
# Monolithic configuration (legacy)
|
|
157
|
+
self._load_from_monolithic()
|
|
158
|
+
|
|
159
|
+
except (
|
|
160
|
+
json.JSONDecodeError,
|
|
161
|
+
yaml.YAMLError if YAML_AVAILABLE else Exception,
|
|
162
|
+
OSError,
|
|
163
|
+
UnicodeDecodeError,
|
|
164
|
+
) as e:
|
|
165
|
+
logger.error(f"Failed to load config: {e}")
|
|
166
|
+
self._config = self._get_default_config()
|
|
167
|
+
|
|
168
|
+
def _load_from_sections(self) -> None:
|
|
169
|
+
"""
|
|
170
|
+
Load configuration from modular section YAML files.
|
|
171
|
+
|
|
172
|
+
Loads and merges all *.yaml files from sections directory:
|
|
173
|
+
- sections/language.yaml
|
|
174
|
+
- sections/user.yaml
|
|
175
|
+
- sections/project.yaml
|
|
176
|
+
- sections/system.yaml
|
|
177
|
+
- sections/git-strategy.yaml
|
|
178
|
+
- sections/quality.yaml
|
|
179
|
+
"""
|
|
180
|
+
# Check cache validity (use directory mtime)
|
|
181
|
+
current_mtime = self._config_path.stat().st_mtime
|
|
182
|
+
if self._last_modified and current_mtime == self._last_modified:
|
|
183
|
+
# Cache is still valid
|
|
184
|
+
return
|
|
185
|
+
|
|
186
|
+
if not YAML_AVAILABLE:
|
|
187
|
+
raise ImportError("PyYAML is required for section-based config. Install with: pip install pyyaml")
|
|
188
|
+
|
|
189
|
+
# Merge all section files
|
|
190
|
+
merged_config: dict[str, Any] = {}
|
|
191
|
+
section_files = sorted(self._config_path.glob("*.yaml"))
|
|
192
|
+
|
|
193
|
+
for section_file in section_files:
|
|
194
|
+
try:
|
|
195
|
+
with open(section_file, "r", encoding="utf-8") as f:
|
|
196
|
+
section_data = yaml.safe_load(f) or {}
|
|
197
|
+
merged_config = self._deep_merge(merged_config, section_data)
|
|
198
|
+
logger.debug(f"Loaded section: {section_file.name}")
|
|
199
|
+
except Exception as e:
|
|
200
|
+
logger.warning(f"Failed to load section {section_file.name}: {e}")
|
|
201
|
+
|
|
202
|
+
self._config = merged_config
|
|
203
|
+
self._last_modified = current_mtime
|
|
204
|
+
logger.debug(f"Loaded config from {len(section_files)} section files")
|
|
205
|
+
|
|
206
|
+
def _load_from_monolithic(self) -> None:
|
|
207
|
+
"""
|
|
208
|
+
Load configuration from single monolithic file (legacy).
|
|
209
|
+
|
|
210
|
+
Supports both YAML and JSON formats.
|
|
211
|
+
"""
|
|
212
|
+
# Check cache validity
|
|
213
|
+
current_mtime = self._config_path.stat().st_mtime
|
|
214
|
+
if self._last_modified and current_mtime == self._last_modified:
|
|
215
|
+
# Cache is still valid
|
|
216
|
+
return
|
|
217
|
+
|
|
218
|
+
# Load from file (auto-detect format)
|
|
219
|
+
with open(self._config_path, "r", encoding="utf-8") as f:
|
|
220
|
+
if self._config_path.suffix == ".yaml" or self._config_path.suffix == ".yml":
|
|
221
|
+
if not YAML_AVAILABLE:
|
|
222
|
+
raise ImportError("PyYAML is required for YAML config files. Install with: pip install pyyaml")
|
|
223
|
+
self._config = yaml.safe_load(f) or {}
|
|
224
|
+
else:
|
|
225
|
+
self._config = json.load(f)
|
|
226
|
+
|
|
227
|
+
# Update cache timestamp
|
|
228
|
+
self._last_modified = current_mtime
|
|
229
|
+
logger.debug(f"Loaded config from {self._config_path}")
|
|
230
|
+
|
|
231
|
+
def get(self, key: str, default: Any = None) -> Any:
|
|
232
|
+
"""
|
|
233
|
+
Get configuration value with dot-notation support.
|
|
234
|
+
|
|
235
|
+
Args:
|
|
236
|
+
key: Configuration key (supports dot notation, e.g., "hooks.timeout_ms")
|
|
237
|
+
default: Default value if key not found
|
|
238
|
+
|
|
239
|
+
Returns:
|
|
240
|
+
Configuration value or default
|
|
241
|
+
|
|
242
|
+
Examples:
|
|
243
|
+
>>> config.get("hooks.timeout_ms", 2000)
|
|
244
|
+
2000
|
|
245
|
+
>>> config.get("project.name")
|
|
246
|
+
"MoAI-ADK"
|
|
247
|
+
"""
|
|
248
|
+
# Reload if file changed
|
|
249
|
+
self._reload_if_modified()
|
|
250
|
+
|
|
251
|
+
# Navigate nested dict with dot notation
|
|
252
|
+
keys = key.split(".")
|
|
253
|
+
value = self._config
|
|
254
|
+
|
|
255
|
+
for k in keys:
|
|
256
|
+
if isinstance(value, dict):
|
|
257
|
+
value = value.get(k)
|
|
258
|
+
if value is None:
|
|
259
|
+
return default
|
|
260
|
+
else:
|
|
261
|
+
return default
|
|
262
|
+
|
|
263
|
+
return value if value is not None else default
|
|
264
|
+
|
|
265
|
+
def set(self, key: str, value: Any) -> None:
|
|
266
|
+
"""
|
|
267
|
+
Set configuration value with dot-notation support.
|
|
268
|
+
|
|
269
|
+
Args:
|
|
270
|
+
key: Configuration key (supports dot notation)
|
|
271
|
+
value: Value to set
|
|
272
|
+
|
|
273
|
+
Examples:
|
|
274
|
+
>>> config.set("hooks.timeout_ms", 3000)
|
|
275
|
+
>>> config.set("project.name", "MyProject")
|
|
276
|
+
"""
|
|
277
|
+
# Navigate to parent dict
|
|
278
|
+
keys = key.split(".")
|
|
279
|
+
target = self._config
|
|
280
|
+
|
|
281
|
+
for k in keys[:-1]:
|
|
282
|
+
if k not in target:
|
|
283
|
+
target[k] = {}
|
|
284
|
+
target = target[k]
|
|
285
|
+
|
|
286
|
+
# Set value
|
|
287
|
+
target[keys[-1]] = value
|
|
288
|
+
|
|
289
|
+
def update(self, updates: Dict[str, Any], deep_merge: bool = True) -> None:
|
|
290
|
+
"""
|
|
291
|
+
Update configuration with dictionary.
|
|
292
|
+
|
|
293
|
+
Args:
|
|
294
|
+
updates: Dictionary of updates
|
|
295
|
+
deep_merge: If True, recursively merge nested dicts (default: True)
|
|
296
|
+
|
|
297
|
+
Examples:
|
|
298
|
+
>>> config.update({"hooks": {"timeout_ms": 3000}})
|
|
299
|
+
>>> config.update({"project.name": "MyProject"}, deep_merge=False)
|
|
300
|
+
"""
|
|
301
|
+
if deep_merge:
|
|
302
|
+
self._config = self._deep_merge(self._config, updates)
|
|
303
|
+
else:
|
|
304
|
+
self._config.update(updates)
|
|
305
|
+
|
|
306
|
+
def save(self, backup: bool = True) -> bool:
|
|
307
|
+
"""
|
|
308
|
+
Save configuration to file or sections with atomic write.
|
|
309
|
+
|
|
310
|
+
Args:
|
|
311
|
+
backup: If True, create backup before saving (default: True)
|
|
312
|
+
|
|
313
|
+
Returns:
|
|
314
|
+
bool: True if save successful, False otherwise
|
|
315
|
+
|
|
316
|
+
Pattern: Temp file → Atomic rename (prevents corruption)
|
|
317
|
+
|
|
318
|
+
Note: For section-based configs, saves to individual section files.
|
|
319
|
+
For monolithic configs, saves to single file.
|
|
320
|
+
"""
|
|
321
|
+
try:
|
|
322
|
+
# Section-based configuration
|
|
323
|
+
if self._config_path.is_dir():
|
|
324
|
+
return self._save_to_sections(backup)
|
|
325
|
+
else:
|
|
326
|
+
# Monolithic configuration (legacy)
|
|
327
|
+
return self._save_to_monolithic(backup)
|
|
328
|
+
|
|
329
|
+
except (OSError, PermissionError) as e:
|
|
330
|
+
logger.error(f"Failed to save config: {e}")
|
|
331
|
+
return False
|
|
332
|
+
|
|
333
|
+
def _save_to_sections(self, backup: bool) -> bool:
|
|
334
|
+
"""
|
|
335
|
+
Save configuration to modular section YAML files.
|
|
336
|
+
|
|
337
|
+
Args:
|
|
338
|
+
backup: If True, create backup before saving
|
|
339
|
+
|
|
340
|
+
Returns:
|
|
341
|
+
bool: True if successful
|
|
342
|
+
"""
|
|
343
|
+
if not YAML_AVAILABLE:
|
|
344
|
+
raise ImportError("PyYAML is required for section-based config. Install with: pip install pyyaml")
|
|
345
|
+
|
|
346
|
+
# Create backup if requested
|
|
347
|
+
if backup and self._config_path.exists():
|
|
348
|
+
self._create_backup()
|
|
349
|
+
|
|
350
|
+
# Define section mapping (top-level keys to section files)
|
|
351
|
+
section_mapping = {
|
|
352
|
+
"language": "language.yaml",
|
|
353
|
+
"user": "user.yaml",
|
|
354
|
+
"project": "project.yaml",
|
|
355
|
+
"moai": "system.yaml",
|
|
356
|
+
"github": "system.yaml",
|
|
357
|
+
"git": "git-strategy.yaml",
|
|
358
|
+
"quality": "quality.yaml",
|
|
359
|
+
"tdd": "quality.yaml",
|
|
360
|
+
"hooks": "system.yaml",
|
|
361
|
+
"session": "system.yaml",
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
# Group config data by section file
|
|
365
|
+
section_data: Dict[str, Dict[str, Any]] = {}
|
|
366
|
+
for key, value in self._config.items():
|
|
367
|
+
section_file = section_mapping.get(key, "system.yaml")
|
|
368
|
+
if section_file not in section_data:
|
|
369
|
+
section_data[section_file] = {}
|
|
370
|
+
section_data[section_file][key] = value
|
|
371
|
+
|
|
372
|
+
# Write each section file atomically
|
|
373
|
+
for section_file, data in section_data.items():
|
|
374
|
+
section_path = self._config_path / section_file
|
|
375
|
+
temp_path = section_path.with_suffix(".tmp")
|
|
376
|
+
|
|
377
|
+
with open(temp_path, "w", encoding="utf-8") as f:
|
|
378
|
+
yaml.safe_dump(
|
|
379
|
+
data,
|
|
380
|
+
f,
|
|
381
|
+
default_flow_style=False,
|
|
382
|
+
allow_unicode=True,
|
|
383
|
+
sort_keys=False,
|
|
384
|
+
)
|
|
385
|
+
|
|
386
|
+
# Atomic rename
|
|
387
|
+
temp_path.replace(section_path)
|
|
388
|
+
|
|
389
|
+
# Update cache timestamp
|
|
390
|
+
self._last_modified = self._config_path.stat().st_mtime
|
|
391
|
+
logger.info(f"Saved config to {len(section_data)} section files")
|
|
392
|
+
return True
|
|
393
|
+
|
|
394
|
+
def _save_to_monolithic(self, backup: bool) -> bool:
|
|
395
|
+
"""
|
|
396
|
+
Save configuration to single monolithic file (legacy).
|
|
397
|
+
|
|
398
|
+
Args:
|
|
399
|
+
backup: If True, create backup before saving
|
|
400
|
+
|
|
401
|
+
Returns:
|
|
402
|
+
bool: True if successful
|
|
403
|
+
"""
|
|
404
|
+
# Create backup if requested
|
|
405
|
+
if backup and self._config_path.exists():
|
|
406
|
+
self._create_backup()
|
|
407
|
+
|
|
408
|
+
# Atomic write pattern: temp file → rename
|
|
409
|
+
temp_path = self._config_path.with_suffix(".tmp")
|
|
410
|
+
|
|
411
|
+
# Write to temp file (auto-detect format)
|
|
412
|
+
with open(temp_path, "w", encoding="utf-8") as f:
|
|
413
|
+
if self._config_path.suffix == ".yaml" or self._config_path.suffix == ".yml":
|
|
414
|
+
if not YAML_AVAILABLE:
|
|
415
|
+
raise ImportError("PyYAML is required for YAML config files. Install with: pip install pyyaml")
|
|
416
|
+
yaml.safe_dump(
|
|
417
|
+
self._config,
|
|
418
|
+
f,
|
|
419
|
+
default_flow_style=False,
|
|
420
|
+
allow_unicode=True,
|
|
421
|
+
sort_keys=False,
|
|
422
|
+
)
|
|
423
|
+
else:
|
|
424
|
+
json.dump(self._config, f, indent=2, ensure_ascii=False)
|
|
425
|
+
|
|
426
|
+
# Atomic rename
|
|
427
|
+
temp_path.replace(self._config_path)
|
|
428
|
+
|
|
429
|
+
# Update cache timestamp
|
|
430
|
+
self._last_modified = self._config_path.stat().st_mtime
|
|
431
|
+
|
|
432
|
+
logger.info(f"Saved config to {self._config_path}")
|
|
433
|
+
return True
|
|
434
|
+
|
|
435
|
+
def _create_backup(self) -> None:
|
|
436
|
+
"""Create timestamped backup of config file."""
|
|
437
|
+
try:
|
|
438
|
+
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
439
|
+
backup_dir = self._config_path.parent / "backups"
|
|
440
|
+
backup_dir.mkdir(parents=True, exist_ok=True)
|
|
441
|
+
|
|
442
|
+
backup_path = backup_dir / f"config_backup_{timestamp}.json"
|
|
443
|
+
shutil.copy2(self._config_path, backup_path)
|
|
444
|
+
|
|
445
|
+
logger.debug(f"Created backup: {backup_path}")
|
|
446
|
+
|
|
447
|
+
except (OSError, PermissionError) as e:
|
|
448
|
+
logger.warning(f"Failed to create backup: {e}")
|
|
449
|
+
|
|
450
|
+
def _reload_if_modified(self) -> None:
|
|
451
|
+
"""Reload config if file has been modified."""
|
|
452
|
+
try:
|
|
453
|
+
if self._config_path.exists():
|
|
454
|
+
current_mtime = self._config_path.stat().st_mtime
|
|
455
|
+
if self._last_modified is None or current_mtime != self._last_modified:
|
|
456
|
+
self._load_config()
|
|
457
|
+
except OSError:
|
|
458
|
+
pass
|
|
459
|
+
|
|
460
|
+
@staticmethod
|
|
461
|
+
def _deep_merge(base: Dict[str, Any], updates: Dict[str, Any]) -> Dict[str, Any]:
|
|
462
|
+
"""
|
|
463
|
+
Recursively merge two dictionaries.
|
|
464
|
+
|
|
465
|
+
Args:
|
|
466
|
+
base: Base dictionary
|
|
467
|
+
updates: Updates to merge
|
|
468
|
+
|
|
469
|
+
Returns:
|
|
470
|
+
Merged dictionary
|
|
471
|
+
"""
|
|
472
|
+
result = base.copy()
|
|
473
|
+
|
|
474
|
+
for key, value in updates.items():
|
|
475
|
+
if key in result and isinstance(result[key], dict) and isinstance(value, dict):
|
|
476
|
+
result[key] = UnifiedConfigManager._deep_merge(result[key], value)
|
|
477
|
+
else:
|
|
478
|
+
result[key] = value
|
|
479
|
+
|
|
480
|
+
return result
|
|
481
|
+
|
|
482
|
+
@staticmethod
|
|
483
|
+
def _get_default_config() -> Dict[str, Any]:
|
|
484
|
+
"""
|
|
485
|
+
Get default configuration when file doesn't exist.
|
|
486
|
+
|
|
487
|
+
Returns:
|
|
488
|
+
Default configuration dictionary
|
|
489
|
+
"""
|
|
490
|
+
return {
|
|
491
|
+
"moai": {"version": "0.28.0", "update_check_frequency": "daily"},
|
|
492
|
+
"project": {"name": "MyProject", "initialized": False},
|
|
493
|
+
"hooks": {"timeout_ms": 2000, "graceful_degradation": True},
|
|
494
|
+
"session": {"suppress_setup_messages": False},
|
|
495
|
+
"language": {"conversation_language": "en", "agent_prompt_language": "en"},
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
def get_all(self) -> Dict[str, Any]:
|
|
499
|
+
"""
|
|
500
|
+
Get entire configuration dictionary.
|
|
501
|
+
|
|
502
|
+
Returns:
|
|
503
|
+
Complete configuration dictionary
|
|
504
|
+
"""
|
|
505
|
+
self._reload_if_modified()
|
|
506
|
+
return self._config.copy()
|
|
507
|
+
|
|
508
|
+
def reset_to_defaults(self) -> None:
|
|
509
|
+
"""Reset configuration to defaults without saving."""
|
|
510
|
+
self._config = self._get_default_config()
|
|
511
|
+
|
|
512
|
+
|
|
513
|
+
# Module-level singleton instance
|
|
514
|
+
_unified_config_instance: Optional[UnifiedConfigManager] = None
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
def get_unified_config(
|
|
518
|
+
config_path: Optional[Union[str, Path]] = None,
|
|
519
|
+
) -> UnifiedConfigManager:
|
|
520
|
+
"""
|
|
521
|
+
Get or create unified configuration manager instance.
|
|
522
|
+
|
|
523
|
+
Args:
|
|
524
|
+
config_path: Optional path to config file
|
|
525
|
+
|
|
526
|
+
Returns:
|
|
527
|
+
UnifiedConfigManager: Singleton instance
|
|
528
|
+
|
|
529
|
+
Examples:
|
|
530
|
+
>>> config = get_unified_config()
|
|
531
|
+
>>> timeout = config.get("hooks.timeout_ms", 2000)
|
|
532
|
+
"""
|
|
533
|
+
global _unified_config_instance
|
|
534
|
+
|
|
535
|
+
if _unified_config_instance is None:
|
|
536
|
+
_unified_config_instance = UnifiedConfigManager(config_path)
|
|
537
|
+
|
|
538
|
+
return _unified_config_instance
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
# Convenience functions for common operations
|
|
542
|
+
@lru_cache(maxsize=1)
|
|
543
|
+
def get_config_path() -> Path:
|
|
544
|
+
"""
|
|
545
|
+
Get path to configuration file or sections directory.
|
|
546
|
+
|
|
547
|
+
Returns:
|
|
548
|
+
Path: Path to sections directory (new) or config file (legacy)
|
|
549
|
+
|
|
550
|
+
Note: Prioritizes section-based config over monolithic files.
|
|
551
|
+
Legacy projects may still use config.json or config.yaml.
|
|
552
|
+
"""
|
|
553
|
+
base_path = Path.cwd() / ".moai" / "config"
|
|
554
|
+
sections_dir = base_path / "sections"
|
|
555
|
+
|
|
556
|
+
# Priority 1: Section-based configuration (new approach)
|
|
557
|
+
if sections_dir.exists() and sections_dir.is_dir():
|
|
558
|
+
return sections_dir
|
|
559
|
+
|
|
560
|
+
# Priority 2: Monolithic YAML (legacy)
|
|
561
|
+
yaml_path = base_path / "config.yaml"
|
|
562
|
+
if yaml_path.exists():
|
|
563
|
+
return yaml_path
|
|
564
|
+
|
|
565
|
+
# Priority 3: Monolithic JSON (legacy)
|
|
566
|
+
json_path = base_path / "config.json"
|
|
567
|
+
if json_path.exists():
|
|
568
|
+
return json_path
|
|
569
|
+
|
|
570
|
+
# Default: Prefer sections for new projects
|
|
571
|
+
return sections_dir if YAML_AVAILABLE else yaml_path
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
def get_config_value(key: str, default: Any = None) -> Any:
|
|
575
|
+
"""
|
|
576
|
+
Get configuration value (convenience function).
|
|
577
|
+
|
|
578
|
+
Args:
|
|
579
|
+
key: Configuration key with dot notation
|
|
580
|
+
default: Default value if key not found
|
|
581
|
+
|
|
582
|
+
Returns:
|
|
583
|
+
Configuration value or default
|
|
584
|
+
"""
|
|
585
|
+
return get_unified_config().get(key, default)
|
|
586
|
+
|
|
587
|
+
|
|
588
|
+
def set_config_value(key: str, value: Any) -> None:
|
|
589
|
+
"""
|
|
590
|
+
Set configuration value (convenience function).
|
|
591
|
+
|
|
592
|
+
Args:
|
|
593
|
+
key: Configuration key with dot notation
|
|
594
|
+
value: Value to set
|
|
595
|
+
"""
|
|
596
|
+
config = get_unified_config()
|
|
597
|
+
config.set(key, value)
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
def save_config(backup: bool = True) -> bool:
|
|
601
|
+
"""
|
|
602
|
+
Save configuration (convenience function).
|
|
603
|
+
|
|
604
|
+
Args:
|
|
605
|
+
backup: Create backup before saving
|
|
606
|
+
|
|
607
|
+
Returns:
|
|
608
|
+
bool: True if successful
|
|
609
|
+
"""
|
|
610
|
+
return get_unified_config().save(backup)
|