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
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
"""User Selection UI for MoAI-ADK Custom Element Restoration
|
|
2
|
+
|
|
3
|
+
This module provides enhanced CLI-based user interface for selecting custom elements
|
|
4
|
+
to restore from backup during MoAI-ADK updates. It features:
|
|
5
|
+
|
|
6
|
+
- Interactive checkbox selection with arrow key navigation (preferred)
|
|
7
|
+
- Fallback to numbered selection when curses is not available
|
|
8
|
+
- Category grouping (Agents, Commands, Skills, Hooks)
|
|
9
|
+
- Proper element preservation (unselected elements remain intact)
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
from typing import Any, Dict, List, Optional
|
|
14
|
+
|
|
15
|
+
from .custom_element_scanner import create_custom_element_scanner
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class UserSelectionUI:
|
|
19
|
+
"""Enhanced CLI-based user interface for selecting custom elements to restore.
|
|
20
|
+
|
|
21
|
+
This class provides an improved CLI interface with interactive checkbox selection
|
|
22
|
+
when available, falling back to numbered selection when curses is not supported.
|
|
23
|
+
It properly preserves unselected elements and includes all categories.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(self, project_path: str | Path):
|
|
27
|
+
"""Initialize the user selection UI.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
project_path: Path to the MoAI-ADK project directory
|
|
31
|
+
"""
|
|
32
|
+
self.project_path = Path(project_path).resolve()
|
|
33
|
+
self.scanner = create_custom_element_scanner(self.project_path)
|
|
34
|
+
|
|
35
|
+
# Try to import interactive UI, fall back to basic UI if not available
|
|
36
|
+
try:
|
|
37
|
+
from .interactive_checkbox_ui import create_interactive_checkbox_ui
|
|
38
|
+
|
|
39
|
+
self.interactive_ui = create_interactive_checkbox_ui(self.project_path)
|
|
40
|
+
self.use_interactive = True
|
|
41
|
+
except Exception:
|
|
42
|
+
self.interactive_ui = None
|
|
43
|
+
self.use_interactive = False
|
|
44
|
+
|
|
45
|
+
def prompt_user_selection(self, backup_available: bool = True) -> Optional[List[str]]:
|
|
46
|
+
"""Prompt user to select custom elements for restoration.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
backup_available: Whether backup is available for restoration
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
List of selected element paths, or None if no selection made
|
|
53
|
+
or no elements available
|
|
54
|
+
|
|
55
|
+
Example:
|
|
56
|
+
>>> ui = UserSelectionUI("/project")
|
|
57
|
+
>>> selected = ui.prompt_user_selection()
|
|
58
|
+
>>> print(f"Selected {len(selected)} elements")
|
|
59
|
+
"""
|
|
60
|
+
# Try interactive UI first
|
|
61
|
+
if self.use_interactive and self.interactive_ui:
|
|
62
|
+
try:
|
|
63
|
+
return self.interactive_ui.prompt_user_selection(backup_available)
|
|
64
|
+
except Exception as e:
|
|
65
|
+
print(f"⚠️ Interactive UI failed: {e}")
|
|
66
|
+
print("Falling back to basic selection mode...")
|
|
67
|
+
|
|
68
|
+
# Fallback to basic selection
|
|
69
|
+
return self._basic_selection_mode(backup_available)
|
|
70
|
+
|
|
71
|
+
def _basic_selection_mode(self, backup_available: bool) -> Optional[List[str]]:
|
|
72
|
+
"""Basic numbered selection mode (fallback when interactive UI not available).
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
backup_available: Whether backup is available for restoration
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
List of selected element paths, or None if cancelled
|
|
79
|
+
"""
|
|
80
|
+
# Get custom elements organized by category
|
|
81
|
+
elements_by_category = self._get_elements_by_category()
|
|
82
|
+
|
|
83
|
+
# No custom elements found
|
|
84
|
+
if not any(elements_by_category.values()):
|
|
85
|
+
print("\n✅ No custom elements found in project.")
|
|
86
|
+
print(" All elements are part of the official MoAI-ADK template.")
|
|
87
|
+
return None
|
|
88
|
+
|
|
89
|
+
# Display elements by category
|
|
90
|
+
print("\n" + "=" * 60)
|
|
91
|
+
print("🔍 Custom Elements Detected (Basic Mode)")
|
|
92
|
+
print("=" * 60)
|
|
93
|
+
print("These elements are not part of the official MoAI-ADK template:")
|
|
94
|
+
print()
|
|
95
|
+
|
|
96
|
+
element_index = 1
|
|
97
|
+
element_map = {} # Map index to element path
|
|
98
|
+
|
|
99
|
+
for category, elements in elements_by_category.items():
|
|
100
|
+
if not elements:
|
|
101
|
+
continue
|
|
102
|
+
|
|
103
|
+
print(f"\n📁 {category} ({len(elements)}):")
|
|
104
|
+
for element in elements:
|
|
105
|
+
status = "✓ Available" if backup_available else "⚠ No backup"
|
|
106
|
+
print(f" {element_index:2d}. {element['name']:<35} {status}")
|
|
107
|
+
element_map[element_index] = element["path"]
|
|
108
|
+
element_index += 1
|
|
109
|
+
|
|
110
|
+
# Show selection instructions
|
|
111
|
+
print()
|
|
112
|
+
if not backup_available:
|
|
113
|
+
print("⚠️ No backup available. Cannot restore custom elements.")
|
|
114
|
+
print("💡 Run 'moai-adk update' without --force to create a backup first.")
|
|
115
|
+
return None
|
|
116
|
+
|
|
117
|
+
print("💡 Selection Instructions:")
|
|
118
|
+
print(" • Enter numbers separated by commas (e.g., 1,3,5)")
|
|
119
|
+
print(" • Use 'all' to select all elements")
|
|
120
|
+
print(" • Press Enter with empty input to cancel")
|
|
121
|
+
|
|
122
|
+
# Get user input
|
|
123
|
+
try:
|
|
124
|
+
user_input = input("\nSelect elements to restore: ").strip()
|
|
125
|
+
except (KeyboardInterrupt, EOFError):
|
|
126
|
+
print("\n⚠️ Selection cancelled.")
|
|
127
|
+
return None
|
|
128
|
+
|
|
129
|
+
# Process user input
|
|
130
|
+
if not user_input:
|
|
131
|
+
print("No elements selected.")
|
|
132
|
+
return None
|
|
133
|
+
|
|
134
|
+
# Check for "all" shortcut
|
|
135
|
+
if user_input.lower() == "all":
|
|
136
|
+
all_elements = list(element_map.values())
|
|
137
|
+
# Ask for confirmation when selecting all elements
|
|
138
|
+
if self.confirm_selection(all_elements):
|
|
139
|
+
return all_elements
|
|
140
|
+
else:
|
|
141
|
+
return None
|
|
142
|
+
|
|
143
|
+
# Parse numbered selection
|
|
144
|
+
selected_elements = []
|
|
145
|
+
try:
|
|
146
|
+
indices = [int(x.strip()) for x in user_input.split(",") if x.strip()]
|
|
147
|
+
for idx in indices:
|
|
148
|
+
if idx in element_map:
|
|
149
|
+
selected_elements.append(element_map[idx])
|
|
150
|
+
else:
|
|
151
|
+
print(f"⚠️ Invalid number: {idx}")
|
|
152
|
+
except ValueError:
|
|
153
|
+
print("⚠️ Invalid input. Please enter numbers separated by commas.")
|
|
154
|
+
return None
|
|
155
|
+
|
|
156
|
+
if not selected_elements:
|
|
157
|
+
print("No valid selections made.")
|
|
158
|
+
return None
|
|
159
|
+
|
|
160
|
+
# Ask for confirmation
|
|
161
|
+
if self.confirm_selection(selected_elements):
|
|
162
|
+
return selected_elements
|
|
163
|
+
else:
|
|
164
|
+
return None
|
|
165
|
+
|
|
166
|
+
def _get_elements_by_category(self) -> Dict[str, List[Dict]]:
|
|
167
|
+
"""Organize custom elements by category.
|
|
168
|
+
|
|
169
|
+
Returns:
|
|
170
|
+
Dictionary mapping category names to lists of elements
|
|
171
|
+
"""
|
|
172
|
+
custom_elements = self.scanner.scan_custom_elements()
|
|
173
|
+
organized: Dict[str, List[Dict[str, Any]]] = {
|
|
174
|
+
"Agents": [],
|
|
175
|
+
"Commands": [],
|
|
176
|
+
"Skills": [],
|
|
177
|
+
"Hooks": [],
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
# Add skills (which are directories)
|
|
181
|
+
if "skills" in custom_elements:
|
|
182
|
+
for skill in custom_elements["skills"]:
|
|
183
|
+
organized["Skills"].append({"name": skill.name, "path": str(skill.path), "type": "skill"})
|
|
184
|
+
|
|
185
|
+
# Add file-based elements
|
|
186
|
+
for element_type in ["agents", "commands", "hooks"]:
|
|
187
|
+
if element_type in custom_elements:
|
|
188
|
+
category_name = element_type.capitalize()
|
|
189
|
+
for element_path in custom_elements[element_type]:
|
|
190
|
+
element_name = Path(element_path).name
|
|
191
|
+
organized[category_name].append(
|
|
192
|
+
{
|
|
193
|
+
"name": element_name,
|
|
194
|
+
"path": str(element_path),
|
|
195
|
+
"type": element_type.rstrip("s"), # Remove plural 's'
|
|
196
|
+
}
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
return organized
|
|
200
|
+
|
|
201
|
+
def _parse_selection(self, user_input: str, custom_elements: List[Dict[str, str]]) -> List[str]:
|
|
202
|
+
"""Parse user selection input with enhanced support for multiple separators.
|
|
203
|
+
|
|
204
|
+
Args:
|
|
205
|
+
user_input: User's input string (can use commas, spaces, semicolons, etc.)
|
|
206
|
+
custom_elements: List of available custom elements
|
|
207
|
+
|
|
208
|
+
Returns:
|
|
209
|
+
List of selected element paths
|
|
210
|
+
"""
|
|
211
|
+
selected_paths = []
|
|
212
|
+
|
|
213
|
+
# Enhanced parsing: handle multiple separator types (comma, space, semicolon, backslash)
|
|
214
|
+
import re
|
|
215
|
+
|
|
216
|
+
# Split by common separators and clean up
|
|
217
|
+
selections = re.split(r"[,\s;\\]+", user_input.strip())
|
|
218
|
+
selections = [s.strip() for s in selections if s.strip()]
|
|
219
|
+
|
|
220
|
+
for selection in selections:
|
|
221
|
+
try:
|
|
222
|
+
# Parse as number
|
|
223
|
+
index = int(selection)
|
|
224
|
+
# Find element with this index (1-based)
|
|
225
|
+
for element in custom_elements:
|
|
226
|
+
if element["index"] == index:
|
|
227
|
+
selected_paths.append(element["path"])
|
|
228
|
+
break
|
|
229
|
+
else:
|
|
230
|
+
print(f"⚠️ Invalid selection: {selection} (not in available list)")
|
|
231
|
+
except ValueError:
|
|
232
|
+
# Try to parse as element name (for enhanced UX)
|
|
233
|
+
found = False
|
|
234
|
+
for element in custom_elements:
|
|
235
|
+
if (
|
|
236
|
+
selection.lower() in element["name"].lower()
|
|
237
|
+
or selection.lower() in element["display_name"].lower()
|
|
238
|
+
):
|
|
239
|
+
selected_paths.append(element["path"])
|
|
240
|
+
found = True
|
|
241
|
+
break
|
|
242
|
+
|
|
243
|
+
if not found:
|
|
244
|
+
print(f"⚠️ Invalid selection: {selection} (not a number or matching element name)")
|
|
245
|
+
|
|
246
|
+
return selected_paths
|
|
247
|
+
|
|
248
|
+
def confirm_selection(self, selected_elements: List[str]) -> bool:
|
|
249
|
+
"""Confirm user's selection before proceeding with restoration.
|
|
250
|
+
|
|
251
|
+
Args:
|
|
252
|
+
selected_elements: List of selected element paths
|
|
253
|
+
|
|
254
|
+
Returns:
|
|
255
|
+
True if user confirms, False otherwise
|
|
256
|
+
"""
|
|
257
|
+
print("\n📋 Selection Summary:")
|
|
258
|
+
print("-" * 40)
|
|
259
|
+
for i, element_path in enumerate(selected_elements, 1):
|
|
260
|
+
element_name = Path(element_path).name
|
|
261
|
+
element_type = self._get_element_type(element_path)
|
|
262
|
+
print(f" {i}. {element_name} ({element_type})")
|
|
263
|
+
|
|
264
|
+
print("-" * 40)
|
|
265
|
+
print(f"Total elements selected: {len(selected_elements)}")
|
|
266
|
+
|
|
267
|
+
try:
|
|
268
|
+
confirm = input("\nConfirm restoration? (y/N): ").strip().lower()
|
|
269
|
+
return confirm in ["y", "yes", ""]
|
|
270
|
+
except (KeyboardInterrupt, EOFError):
|
|
271
|
+
print("\n⚠️ Restoration cancelled.")
|
|
272
|
+
return False
|
|
273
|
+
|
|
274
|
+
def _get_element_type(self, element_path: str) -> str:
|
|
275
|
+
"""Get element type from path.
|
|
276
|
+
|
|
277
|
+
Args:
|
|
278
|
+
element_path: Path to element
|
|
279
|
+
|
|
280
|
+
Returns:
|
|
281
|
+
Element type string (agent, command, skill, hook)
|
|
282
|
+
"""
|
|
283
|
+
path = Path(element_path)
|
|
284
|
+
parts = path.parts
|
|
285
|
+
|
|
286
|
+
if "agents" in parts:
|
|
287
|
+
return "agent"
|
|
288
|
+
elif "commands" in parts:
|
|
289
|
+
return "command"
|
|
290
|
+
elif "skills" in parts:
|
|
291
|
+
return "skill"
|
|
292
|
+
elif "hooks" in parts:
|
|
293
|
+
return "hook"
|
|
294
|
+
else:
|
|
295
|
+
return "unknown"
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
def display_selection_instructions():
|
|
299
|
+
"""Display instructions for using the enhanced selection interface."""
|
|
300
|
+
print(
|
|
301
|
+
"""
|
|
302
|
+
📖 Enhanced Selection Instructions:
|
|
303
|
+
• Enter numbers separated by spaces, commas, semicolons (e.g., 1 3,4 or 1;3\\4)
|
|
304
|
+
• Use 'all' to select all elements
|
|
305
|
+
• Try partial names for convenience (e.g., 'yoda' or 'agent')
|
|
306
|
+
• Press Enter with empty input to cancel
|
|
307
|
+
• Use Ctrl+C to interrupt selection
|
|
308
|
+
|
|
309
|
+
📂 Element Types:
|
|
310
|
+
• agent: Custom agent for specific tasks
|
|
311
|
+
• command: Custom slash command for workflows
|
|
312
|
+
• skill: Custom skill with enhanced capabilities
|
|
313
|
+
• hook: Custom hook for system integration
|
|
314
|
+
|
|
315
|
+
💡 Pro Tips:
|
|
316
|
+
• Mixed separators work: "1,3;5\\7"
|
|
317
|
+
• Partial name matching: "my-agen" matches "my-agent"
|
|
318
|
+
• Case insensitive: "YODA" matches "yoda"
|
|
319
|
+
"""
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
def create_user_selection_ui(project_path: str | Path) -> UserSelectionUI:
|
|
324
|
+
"""Factory function to create a UserSelectionUI.
|
|
325
|
+
|
|
326
|
+
Args:
|
|
327
|
+
project_path: Path to the MoAI-ADK project directory
|
|
328
|
+
|
|
329
|
+
Returns:
|
|
330
|
+
Configured UserSelectionUI instance
|
|
331
|
+
|
|
332
|
+
Example:
|
|
333
|
+
>>> ui = create_user_selection_ui("/path/to/project")
|
|
334
|
+
>>> selected = ui.prompt_user_selection()
|
|
335
|
+
>>> if selected:
|
|
336
|
+
>>> ui.confirm_selection(selected)
|
|
337
|
+
"""
|
|
338
|
+
return UserSelectionUI(Path(project_path).resolve())
|
|
@@ -8,7 +8,9 @@ which migrations are needed.
|
|
|
8
8
|
import json
|
|
9
9
|
import logging
|
|
10
10
|
from pathlib import Path
|
|
11
|
-
from typing import
|
|
11
|
+
from typing import Any, Dict, Optional
|
|
12
|
+
|
|
13
|
+
import yaml
|
|
12
14
|
|
|
13
15
|
logger = logging.getLogger(__name__)
|
|
14
16
|
|
|
@@ -24,28 +26,79 @@ class VersionDetector:
|
|
|
24
26
|
project_root: Root directory of the project
|
|
25
27
|
"""
|
|
26
28
|
self.project_root = Path(project_root)
|
|
29
|
+
# Legacy config paths (pre-v0.24.0)
|
|
27
30
|
self.old_config = self.project_root / ".moai" / "config.json"
|
|
28
|
-
|
|
31
|
+
# Intermediate config path (v0.24.0)
|
|
32
|
+
self.intermediate_config = self.project_root / ".moai" / "config" / "config.json"
|
|
33
|
+
# New section YAML paths (v0.36.0+)
|
|
34
|
+
self.sections_dir = self.project_root / ".moai" / "config" / "sections"
|
|
35
|
+
self.system_yaml = self.sections_dir / "system.yaml"
|
|
36
|
+
# Statusline config paths
|
|
29
37
|
self.old_statusline = self.project_root / ".claude" / "statusline-config.yaml"
|
|
30
|
-
self.new_statusline =
|
|
31
|
-
|
|
32
|
-
|
|
38
|
+
self.new_statusline = self.project_root / ".moai" / "config" / "statusline-config.yaml"
|
|
39
|
+
|
|
40
|
+
def _read_yaml_file(self, file_path: Path) -> Optional[Dict[str, Any]]:
|
|
41
|
+
"""
|
|
42
|
+
Read a YAML file safely
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
file_path: Path to the YAML file
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
Dictionary with file contents, or None if read failed
|
|
49
|
+
"""
|
|
50
|
+
try:
|
|
51
|
+
if file_path.exists():
|
|
52
|
+
with open(file_path, "r", encoding="utf-8") as f:
|
|
53
|
+
return yaml.safe_load(f)
|
|
54
|
+
except Exception as e:
|
|
55
|
+
logger.warning(f"Failed to read YAML file {file_path}: {e}")
|
|
56
|
+
return None
|
|
57
|
+
|
|
58
|
+
def _get_version_from_section_yaml(self) -> Optional[str]:
|
|
59
|
+
"""
|
|
60
|
+
Get version from section YAML files (new format)
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
Version string from system.yaml, or None if not found
|
|
64
|
+
"""
|
|
65
|
+
system_data = self._read_yaml_file(self.system_yaml)
|
|
66
|
+
if system_data and "moai" in system_data:
|
|
67
|
+
version = system_data["moai"].get("version")
|
|
68
|
+
if version:
|
|
69
|
+
return str(version)
|
|
70
|
+
return None
|
|
33
71
|
|
|
34
72
|
def detect_version(self) -> str:
|
|
35
73
|
"""
|
|
36
74
|
Detect current project version based on file structure
|
|
37
75
|
|
|
38
76
|
Returns:
|
|
39
|
-
Version string (e.g., "0.23.0", "0.24.0+", "unknown")
|
|
77
|
+
Version string (e.g., "0.23.0", "0.24.0+", "0.36.0+", "unknown")
|
|
40
78
|
"""
|
|
41
|
-
# Check if
|
|
42
|
-
if self.
|
|
43
|
-
|
|
79
|
+
# Check if using new section YAML format (v0.36.0+)
|
|
80
|
+
if self.sections_dir.exists() and self.system_yaml.exists():
|
|
81
|
+
version = self._get_version_from_section_yaml()
|
|
82
|
+
if version:
|
|
83
|
+
return version
|
|
84
|
+
return "0.36.0+"
|
|
85
|
+
|
|
86
|
+
# Check if already migrated to v0.24.0+ (intermediate config.json)
|
|
87
|
+
if self.intermediate_config.exists():
|
|
88
|
+
try:
|
|
89
|
+
with open(self.intermediate_config, "r", encoding="utf-8") as f:
|
|
90
|
+
config_data = json.load(f)
|
|
91
|
+
if "moai_version" in config_data:
|
|
92
|
+
return config_data["moai_version"]
|
|
93
|
+
return "0.24.0+"
|
|
94
|
+
except Exception as e:
|
|
95
|
+
logger.warning(f"Failed to read intermediate config: {e}")
|
|
96
|
+
return "0.24.0+"
|
|
44
97
|
|
|
45
|
-
# Check if v0.23.0 or earlier
|
|
98
|
+
# Check if v0.23.0 or earlier (old config.json at .moai/config.json)
|
|
46
99
|
if self.old_config.exists():
|
|
47
100
|
try:
|
|
48
|
-
with open(self.old_config, "r") as f:
|
|
101
|
+
with open(self.old_config, "r", encoding="utf-8") as f:
|
|
49
102
|
config_data = json.load(f)
|
|
50
103
|
# Try to get version from config
|
|
51
104
|
if "moai_version" in config_data:
|
|
@@ -69,14 +122,20 @@ class VersionDetector:
|
|
|
69
122
|
logger.info("Unknown version, assuming no migration needed")
|
|
70
123
|
return False
|
|
71
124
|
|
|
72
|
-
if
|
|
73
|
-
|
|
125
|
+
# Check if using new section YAML format (v0.36.0+)
|
|
126
|
+
if self.sections_dir.exists() and self.system_yaml.exists():
|
|
127
|
+
logger.info("Project already using section YAML format (v0.36.0+)")
|
|
74
128
|
return False
|
|
75
129
|
|
|
130
|
+
if version == "0.24.0+":
|
|
131
|
+
logger.info("Project on v0.24.0+, may need migration to section YAML format")
|
|
132
|
+
# Could still need migration to section YAML format
|
|
133
|
+
return not self.sections_dir.exists()
|
|
134
|
+
|
|
76
135
|
# Version 0.23.0 or earlier needs migration
|
|
77
136
|
return True
|
|
78
137
|
|
|
79
|
-
def get_migration_plan(self) -> Dict[str,
|
|
138
|
+
def get_migration_plan(self) -> Dict[str, Any]:
|
|
80
139
|
"""
|
|
81
140
|
Get detailed migration plan
|
|
82
141
|
|
|
@@ -85,24 +144,46 @@ class VersionDetector:
|
|
|
85
144
|
{
|
|
86
145
|
"move": [{"from": "...", "to": "..."}],
|
|
87
146
|
"create": ["directory1", "directory2"],
|
|
88
|
-
"cleanup": ["old_file1", "old_file2"]
|
|
147
|
+
"cleanup": ["old_file1", "old_file2"],
|
|
148
|
+
"convert": [{"from": "...", "to_dir": "...", "description": "..."}]
|
|
89
149
|
}
|
|
90
150
|
"""
|
|
91
|
-
plan = {"move": [], "create": [], "cleanup": []}
|
|
151
|
+
plan: Dict[str, Any] = {"move": [], "create": [], "cleanup": [], "convert": []}
|
|
92
152
|
|
|
93
153
|
if not self.needs_migration():
|
|
94
154
|
return plan
|
|
95
155
|
|
|
96
|
-
# Create config directory
|
|
97
|
-
|
|
156
|
+
# Create config directory structure
|
|
157
|
+
config_dir = self.project_root / ".moai" / "config"
|
|
158
|
+
plan["create"].append(str(config_dir))
|
|
98
159
|
|
|
99
|
-
#
|
|
100
|
-
if
|
|
160
|
+
# Create sections directory for new YAML format
|
|
161
|
+
if not self.sections_dir.exists():
|
|
162
|
+
plan["create"].append(str(self.sections_dir))
|
|
163
|
+
|
|
164
|
+
# Handle old config.json migration (pre-v0.24.0)
|
|
165
|
+
if self.old_config.exists() and not self.intermediate_config.exists():
|
|
101
166
|
plan["move"].append(
|
|
102
167
|
{
|
|
103
168
|
"from": str(self.old_config.relative_to(self.project_root)),
|
|
104
|
-
"to": str(self.
|
|
105
|
-
"description": "Main configuration file",
|
|
169
|
+
"to": str(self.intermediate_config.relative_to(self.project_root)),
|
|
170
|
+
"description": "Main configuration file (legacy)",
|
|
171
|
+
}
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
# Mark config.json files for conversion to section YAML
|
|
175
|
+
config_json_to_convert = None
|
|
176
|
+
if self.intermediate_config.exists():
|
|
177
|
+
config_json_to_convert = self.intermediate_config
|
|
178
|
+
elif self.old_config.exists():
|
|
179
|
+
config_json_to_convert = self.old_config
|
|
180
|
+
|
|
181
|
+
if config_json_to_convert and not self.system_yaml.exists():
|
|
182
|
+
plan["convert"].append(
|
|
183
|
+
{
|
|
184
|
+
"from": str(config_json_to_convert.relative_to(self.project_root)),
|
|
185
|
+
"to_dir": str(self.sections_dir.relative_to(self.project_root)),
|
|
186
|
+
"description": "Convert config.json to section YAML files",
|
|
106
187
|
}
|
|
107
188
|
)
|
|
108
189
|
|
|
@@ -120,13 +201,14 @@ class VersionDetector:
|
|
|
120
201
|
if self.old_config.exists():
|
|
121
202
|
plan["cleanup"].append(str(self.old_config.relative_to(self.project_root)))
|
|
122
203
|
if self.old_statusline.exists():
|
|
123
|
-
plan["cleanup"].append(
|
|
124
|
-
|
|
125
|
-
|
|
204
|
+
plan["cleanup"].append(str(self.old_statusline.relative_to(self.project_root)))
|
|
205
|
+
# Also cleanup intermediate config.json after conversion to YAML
|
|
206
|
+
if self.intermediate_config.exists() and self.sections_dir.exists():
|
|
207
|
+
plan["cleanup"].append(str(self.intermediate_config.relative_to(self.project_root)))
|
|
126
208
|
|
|
127
209
|
return plan
|
|
128
210
|
|
|
129
|
-
def get_version_info(self) -> Dict[str,
|
|
211
|
+
def get_version_info(self) -> Dict[str, Any]:
|
|
130
212
|
"""
|
|
131
213
|
Get detailed version information
|
|
132
214
|
|
|
@@ -137,7 +219,25 @@ class VersionDetector:
|
|
|
137
219
|
"detected_version": self.detect_version(),
|
|
138
220
|
"needs_migration": self.needs_migration(),
|
|
139
221
|
"has_old_config": self.old_config.exists(),
|
|
140
|
-
"
|
|
222
|
+
"has_intermediate_config": self.intermediate_config.exists(),
|
|
223
|
+
"has_sections_dir": self.sections_dir.exists(),
|
|
224
|
+
"has_system_yaml": self.system_yaml.exists(),
|
|
141
225
|
"has_old_statusline": self.old_statusline.exists(),
|
|
142
226
|
"has_new_statusline": self.new_statusline.exists(),
|
|
227
|
+
"config_format": self._get_config_format(),
|
|
143
228
|
}
|
|
229
|
+
|
|
230
|
+
def _get_config_format(self) -> str:
|
|
231
|
+
"""
|
|
232
|
+
Determine the current configuration format
|
|
233
|
+
|
|
234
|
+
Returns:
|
|
235
|
+
One of: "section_yaml", "intermediate_json", "legacy_json", "none"
|
|
236
|
+
"""
|
|
237
|
+
if self.sections_dir.exists() and self.system_yaml.exists():
|
|
238
|
+
return "section_yaml"
|
|
239
|
+
elif self.intermediate_config.exists():
|
|
240
|
+
return "intermediate_json"
|
|
241
|
+
elif self.old_config.exists():
|
|
242
|
+
return "legacy_json"
|
|
243
|
+
return "none"
|
|
@@ -3,11 +3,19 @@ Main version migration orchestrator for MoAI-ADK
|
|
|
3
3
|
|
|
4
4
|
Coordinates version detection, backup creation, file migration,
|
|
5
5
|
and cleanup processes for automatic project upgrades.
|
|
6
|
+
|
|
7
|
+
Supports migration from:
|
|
8
|
+
- Legacy config.json (.moai/config.json) - pre-v0.24.0
|
|
9
|
+
- Intermediate config.json (.moai/config/config.json) - v0.24.0
|
|
10
|
+
- Section YAML files (.moai/config/sections/*.yaml) - v0.36.0+
|
|
6
11
|
"""
|
|
7
12
|
|
|
13
|
+
import json
|
|
8
14
|
import logging
|
|
9
15
|
from pathlib import Path
|
|
10
|
-
from typing import Dict
|
|
16
|
+
from typing import Any, Dict
|
|
17
|
+
|
|
18
|
+
import yaml
|
|
11
19
|
|
|
12
20
|
from .backup_manager import BackupManager
|
|
13
21
|
from .file_migrator import FileMigrator
|
|
@@ -49,7 +57,7 @@ class VersionMigrator:
|
|
|
49
57
|
"""
|
|
50
58
|
return self.detector.needs_migration()
|
|
51
59
|
|
|
52
|
-
def get_migration_info(self) -> Dict[str,
|
|
60
|
+
def get_migration_info(self) -> Dict[str, Any]:
|
|
53
61
|
"""
|
|
54
62
|
Get detailed migration information
|
|
55
63
|
|
|
@@ -165,6 +173,13 @@ class VersionMigrator:
|
|
|
165
173
|
print(f" • {move_op['description']}")
|
|
166
174
|
print(f" {move_op['from']} → {move_op['to']}")
|
|
167
175
|
|
|
176
|
+
# Show conversion operations (config.json to section YAML)
|
|
177
|
+
if plan.get("convert"):
|
|
178
|
+
print("\n🔄 Files to convert:")
|
|
179
|
+
for convert_op in plan.get("convert", []):
|
|
180
|
+
print(f" • {convert_op['description']}")
|
|
181
|
+
print(f" {convert_op['from']} → {convert_op['to_dir']}/")
|
|
182
|
+
|
|
168
183
|
print("\n🗑️ Files to cleanup after migration:")
|
|
169
184
|
for cleanup_file in plan.get("cleanup", []):
|
|
170
185
|
print(f" - {cleanup_file}")
|
|
@@ -176,22 +191,42 @@ class VersionMigrator:
|
|
|
176
191
|
Returns:
|
|
177
192
|
True if verification passed
|
|
178
193
|
"""
|
|
179
|
-
# Check that
|
|
180
|
-
new_config = self.project_root / ".moai" / "config" / "config.json"
|
|
181
|
-
if not new_config.exists():
|
|
182
|
-
logger.error("Verification failed: new config.json not found")
|
|
183
|
-
return False
|
|
184
|
-
|
|
185
|
-
# Check that new config directory exists
|
|
194
|
+
# Check that config directory exists
|
|
186
195
|
config_dir = self.project_root / ".moai" / "config"
|
|
187
196
|
if not config_dir.is_dir():
|
|
188
197
|
logger.error("Verification failed: config directory not found")
|
|
189
198
|
return False
|
|
190
199
|
|
|
191
|
-
|
|
192
|
-
|
|
200
|
+
# Check for section YAML format (preferred v0.36.0+)
|
|
201
|
+
sections_dir = self.project_root / ".moai" / "config" / "sections"
|
|
202
|
+
system_yaml = sections_dir / "system.yaml"
|
|
203
|
+
|
|
204
|
+
if sections_dir.exists() and system_yaml.exists():
|
|
205
|
+
# Verify system.yaml is valid
|
|
206
|
+
try:
|
|
207
|
+
with open(system_yaml, "r", encoding="utf-8") as f:
|
|
208
|
+
data = yaml.safe_load(f)
|
|
209
|
+
if data and "moai" in data:
|
|
210
|
+
logger.debug("Section YAML format verification passed")
|
|
211
|
+
return True
|
|
212
|
+
except Exception as e:
|
|
213
|
+
logger.warning(f"Failed to verify system.yaml: {e}")
|
|
214
|
+
|
|
215
|
+
# Fallback: check for intermediate config.json (v0.24.0 format)
|
|
216
|
+
intermediate_config = self.project_root / ".moai" / "config" / "config.json"
|
|
217
|
+
if intermediate_config.exists():
|
|
218
|
+
try:
|
|
219
|
+
with open(intermediate_config, "r", encoding="utf-8") as f:
|
|
220
|
+
json.load(f)
|
|
221
|
+
logger.debug("Intermediate config.json verification passed")
|
|
222
|
+
return True
|
|
223
|
+
except Exception as e:
|
|
224
|
+
logger.warning(f"Failed to verify config.json: {e}")
|
|
225
|
+
|
|
226
|
+
logger.error("Verification failed: no valid configuration found")
|
|
227
|
+
return False
|
|
193
228
|
|
|
194
|
-
def check_status(self) -> Dict[str,
|
|
229
|
+
def check_status(self) -> Dict[str, Any]:
|
|
195
230
|
"""
|
|
196
231
|
Check migration status and return detailed information
|
|
197
232
|
|