moai-adk 0.35.1__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 +10 -0
- moai_adk/__main__.py +199 -0
- moai_adk/cli/__init__.py +6 -0
- moai_adk/cli/commands/__init__.py +17 -0
- moai_adk/cli/commands/analyze.py +116 -0
- moai_adk/cli/commands/doctor.py +272 -0
- moai_adk/cli/commands/init.py +372 -0
- moai_adk/cli/commands/language.py +248 -0
- moai_adk/cli/commands/status.py +104 -0
- moai_adk/cli/commands/update.py +2686 -0
- moai_adk/cli/main.py +13 -0
- moai_adk/cli/prompts/__init__.py +5 -0
- moai_adk/cli/prompts/init_prompts.py +219 -0
- 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/__init__.py +1 -0
- moai_adk/core/analysis/__init__.py +9 -0
- moai_adk/core/analysis/session_analyzer.py +400 -0
- moai_adk/core/claude_integration.py +393 -0
- moai_adk/core/command_helpers.py +270 -0
- moai_adk/core/comprehensive_monitoring_system.py +1183 -0
- moai_adk/core/config/__init__.py +19 -0
- moai_adk/core/config/auto_spec_config.py +340 -0
- moai_adk/core/config/migration.py +244 -0
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +273 -0
- moai_adk/core/diagnostics/__init__.py +19 -0
- moai_adk/core/diagnostics/slash_commands.py +159 -0
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +1902 -0
- moai_adk/core/event_driven_hook_system.py +1371 -0
- moai_adk/core/git/__init__.py +31 -0
- moai_adk/core/git/branch.py +25 -0
- moai_adk/core/git/branch_manager.py +129 -0
- moai_adk/core/git/checkpoint.py +134 -0
- moai_adk/core/git/commit.py +67 -0
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/event_detector.py +79 -0
- moai_adk/core/git/manager.py +216 -0
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/__init__.py +22 -0
- moai_adk/core/integration/engine.py +157 -0
- moai_adk/core/integration/integration_tester.py +226 -0
- moai_adk/core/integration/models.py +88 -0
- moai_adk/core/integration/utils.py +211 -0
- moai_adk/core/issue_creator.py +305 -0
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config.py +202 -0
- moai_adk/core/language_config_resolver.py +572 -0
- moai_adk/core/language_validator.py +543 -0
- moai_adk/core/mcp/setup.py +116 -0
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +605 -0
- moai_adk/core/migration/__init__.py +18 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
- moai_adk/core/migration/backup_manager.py +277 -0
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +209 -0
- moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
- moai_adk/core/migration/selective_restorer.py +470 -0
- moai_adk/core/migration/template_utils.py +74 -0
- moai_adk/core/migration/user_selection_ui.py +338 -0
- moai_adk/core/migration/version_detector.py +139 -0
- moai_adk/core/migration/version_migrator.py +228 -0
- moai_adk/core/performance/__init__.py +6 -0
- moai_adk/core/performance/cache_system.py +316 -0
- moai_adk/core/performance/parallel_processor.py +116 -0
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/__init__.py +1 -0
- moai_adk/core/project/backup_utils.py +70 -0
- moai_adk/core/project/checker.py +300 -0
- moai_adk/core/project/detector.py +293 -0
- moai_adk/core/project/initializer.py +387 -0
- moai_adk/core/project/phase_executor.py +716 -0
- moai_adk/core/project/validator.py +139 -0
- moai_adk/core/quality/__init__.py +6 -0
- moai_adk/core/quality/trust_checker.py +377 -0
- moai_adk/core/quality/validators/__init__.py +6 -0
- moai_adk/core/quality/validators/base_validator.py +19 -0
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +918 -0
- moai_adk/core/session_manager.py +651 -0
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec/confidence_scoring.py +680 -0
- moai_adk/core/spec/ears_template_engine.py +1247 -0
- moai_adk/core/spec/quality_validator.py +687 -0
- moai_adk/core/spec_status_manager.py +478 -0
- moai_adk/core/template/__init__.py +7 -0
- moai_adk/core/template/backup.py +174 -0
- moai_adk/core/template/config.py +191 -0
- moai_adk/core/template/languages.py +43 -0
- moai_adk/core/template/merger.py +233 -0
- moai_adk/core/template/processor.py +1200 -0
- moai_adk/core/template_engine.py +310 -0
- moai_adk/core/template_variable_synchronizer.py +417 -0
- moai_adk/core/unified_permission_manager.py +745 -0
- moai_adk/core/user_behavior_analytics.py +851 -0
- moai_adk/core/version_sync.py +429 -0
- moai_adk/foundation/__init__.py +56 -0
- moai_adk/foundation/backend.py +1027 -0
- moai_adk/foundation/database.py +1115 -0
- moai_adk/foundation/devops.py +1585 -0
- moai_adk/foundation/ears.py +431 -0
- moai_adk/foundation/frontend.py +870 -0
- moai_adk/foundation/git/commit_templates.py +557 -0
- 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 +676 -0
- moai_adk/foundation/trust/validation_checklist.py +1573 -0
- 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/__init__.py +38 -0
- moai_adk/statusline/alfred_detector.py +105 -0
- moai_adk/statusline/config.py +376 -0
- moai_adk/statusline/enhanced_output_style_detector.py +372 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +322 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +343 -0
- moai_adk/statusline/update_checker.py +129 -0
- moai_adk/statusline/version_reader.py +741 -0
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +714 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +637 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
- moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +513 -0
- moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +1060 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1386 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
- moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
- moai_adk/templates/.claude/hooks/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
- moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
- moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
- moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
- moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1083 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
- moai_adk/templates/.claude/settings.json +172 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +307 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -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 +249 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +320 -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 +323 -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 +497 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -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 +492 -0
- moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
- moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -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 +420 -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-patterns.md +757 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -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 +364 -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 +649 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +478 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -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 +376 -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 +385 -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-kotlin/SKILL.md +382 -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 +644 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +481 -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 +579 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +687 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +372 -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 +497 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +368 -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 +300 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -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 +17 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -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-mcp-figma/SKILL.md +402 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +291 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/migration.md +341 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +463 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/validation.md +373 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/SKILL.md +275 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/akamai-integration.md +215 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-log-events.md +225 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/customize-mfa.md +178 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mdl-verification.md +211 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/ropg-flow-mfa.md +217 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/state-parameters.md +178 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/tenant-access-control.md +180 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/webauthn-fido.md +235 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/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 +390 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/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-project/test_integration_simple.py +436 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -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 +456 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/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-worktree/SKILL.md +411 -0
- moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
- moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
- moai_adk/templates/.git-hooks/pre-commit +128 -0
- moai_adk/templates/.git-hooks/pre-push +365 -0
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +337 -0
- moai_adk/templates/.gitignore +222 -0
- moai_adk/templates/.mcp.json +13 -0
- moai_adk/templates/.moai/config/config.yaml +58 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -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 +182 -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 +17 -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 +642 -0
- moai_adk/utils/__init__.py +30 -0
- moai_adk/utils/banner.py +38 -0
- moai_adk/utils/common.py +294 -0
- moai_adk/utils/link_validator.py +241 -0
- moai_adk/utils/logger.py +147 -0
- moai_adk/utils/safe_file_reader.py +206 -0
- moai_adk/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.35.1.dist-info/METADATA +3018 -0
- moai_adk-0.35.1.dist-info/RECORD +502 -0
- moai_adk-0.35.1.dist-info/WHEEL +4 -0
- moai_adk-0.35.1.dist-info/entry_points.txt +3 -0
- moai_adk-0.35.1.dist-info/licenses/LICENSE +21 -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())
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Version detection module for MoAI-ADK projects
|
|
3
|
+
|
|
4
|
+
Detects the current version of a project and determines
|
|
5
|
+
which migrations are needed.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import json
|
|
9
|
+
import logging
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Any, Dict
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class VersionDetector:
|
|
17
|
+
"""Detects project version and migration requirements"""
|
|
18
|
+
|
|
19
|
+
def __init__(self, project_root: Path):
|
|
20
|
+
"""
|
|
21
|
+
Initialize version detector
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
project_root: Root directory of the project
|
|
25
|
+
"""
|
|
26
|
+
self.project_root = Path(project_root)
|
|
27
|
+
self.old_config = self.project_root / ".moai" / "config.json"
|
|
28
|
+
self.new_config = self.project_root / ".moai" / "config" / "config.json"
|
|
29
|
+
self.old_statusline = self.project_root / ".claude" / "statusline-config.yaml"
|
|
30
|
+
self.new_statusline = self.project_root / ".moai" / "config" / "statusline-config.yaml"
|
|
31
|
+
|
|
32
|
+
def detect_version(self) -> str:
|
|
33
|
+
"""
|
|
34
|
+
Detect current project version based on file structure
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
Version string (e.g., "0.23.0", "0.24.0+", "unknown")
|
|
38
|
+
"""
|
|
39
|
+
# Check if already migrated to v0.24.0+
|
|
40
|
+
if self.new_config.exists():
|
|
41
|
+
return "0.24.0+"
|
|
42
|
+
|
|
43
|
+
# Check if v0.23.0 or earlier
|
|
44
|
+
if self.old_config.exists():
|
|
45
|
+
try:
|
|
46
|
+
with open(self.old_config, "r") as f:
|
|
47
|
+
config_data = json.load(f)
|
|
48
|
+
# Try to get version from config
|
|
49
|
+
if "moai_version" in config_data:
|
|
50
|
+
return config_data["moai_version"]
|
|
51
|
+
return "0.23.0"
|
|
52
|
+
except Exception as e:
|
|
53
|
+
logger.warning(f"Failed to read old config: {e}")
|
|
54
|
+
return "0.23.0"
|
|
55
|
+
|
|
56
|
+
return "unknown"
|
|
57
|
+
|
|
58
|
+
def needs_migration(self) -> bool:
|
|
59
|
+
"""
|
|
60
|
+
Check if project needs migration
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
True if migration is needed, False otherwise
|
|
64
|
+
"""
|
|
65
|
+
version = self.detect_version()
|
|
66
|
+
if version == "unknown":
|
|
67
|
+
logger.info("Unknown version, assuming no migration needed")
|
|
68
|
+
return False
|
|
69
|
+
|
|
70
|
+
if version == "0.24.0+":
|
|
71
|
+
logger.info("Project already on v0.24.0+")
|
|
72
|
+
return False
|
|
73
|
+
|
|
74
|
+
# Version 0.23.0 or earlier needs migration
|
|
75
|
+
return True
|
|
76
|
+
|
|
77
|
+
def get_migration_plan(self) -> Dict[str, Any]:
|
|
78
|
+
"""
|
|
79
|
+
Get detailed migration plan
|
|
80
|
+
|
|
81
|
+
Returns:
|
|
82
|
+
Dictionary with migration actions:
|
|
83
|
+
{
|
|
84
|
+
"move": [{"from": "...", "to": "..."}],
|
|
85
|
+
"create": ["directory1", "directory2"],
|
|
86
|
+
"cleanup": ["old_file1", "old_file2"]
|
|
87
|
+
}
|
|
88
|
+
"""
|
|
89
|
+
plan: Dict[str, Any] = {"move": [], "create": [], "cleanup": []}
|
|
90
|
+
|
|
91
|
+
if not self.needs_migration():
|
|
92
|
+
return plan
|
|
93
|
+
|
|
94
|
+
# Create config directory
|
|
95
|
+
plan["create"].append(str(self.project_root / ".moai" / "config"))
|
|
96
|
+
|
|
97
|
+
# Move config.json
|
|
98
|
+
if self.old_config.exists() and not self.new_config.exists():
|
|
99
|
+
plan["move"].append(
|
|
100
|
+
{
|
|
101
|
+
"from": str(self.old_config.relative_to(self.project_root)),
|
|
102
|
+
"to": str(self.new_config.relative_to(self.project_root)),
|
|
103
|
+
"description": "Main configuration file",
|
|
104
|
+
}
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
# Move statusline-config.yaml
|
|
108
|
+
if self.old_statusline.exists() and not self.new_statusline.exists():
|
|
109
|
+
plan["move"].append(
|
|
110
|
+
{
|
|
111
|
+
"from": str(self.old_statusline.relative_to(self.project_root)),
|
|
112
|
+
"to": str(self.new_statusline.relative_to(self.project_root)),
|
|
113
|
+
"description": "Statusline configuration",
|
|
114
|
+
}
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
# Cleanup old files (after successful migration)
|
|
118
|
+
if self.old_config.exists():
|
|
119
|
+
plan["cleanup"].append(str(self.old_config.relative_to(self.project_root)))
|
|
120
|
+
if self.old_statusline.exists():
|
|
121
|
+
plan["cleanup"].append(str(self.old_statusline.relative_to(self.project_root)))
|
|
122
|
+
|
|
123
|
+
return plan
|
|
124
|
+
|
|
125
|
+
def get_version_info(self) -> Dict[str, Any]:
|
|
126
|
+
"""
|
|
127
|
+
Get detailed version information
|
|
128
|
+
|
|
129
|
+
Returns:
|
|
130
|
+
Dictionary with version details
|
|
131
|
+
"""
|
|
132
|
+
return {
|
|
133
|
+
"detected_version": self.detect_version(),
|
|
134
|
+
"needs_migration": self.needs_migration(),
|
|
135
|
+
"has_old_config": self.old_config.exists(),
|
|
136
|
+
"has_new_config": self.new_config.exists(),
|
|
137
|
+
"has_old_statusline": self.old_statusline.exists(),
|
|
138
|
+
"has_new_statusline": self.new_statusline.exists(),
|
|
139
|
+
}
|