moai-adk 0.34.0__py3-none-any.whl → 1.1.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.
- moai_adk/__main__.py +136 -5
- moai_adk/astgrep/__init__.py +37 -0
- moai_adk/astgrep/analyzer.py +522 -0
- moai_adk/astgrep/models.py +124 -0
- moai_adk/astgrep/rules.py +179 -0
- moai_adk/cli/commands/analyze.py +11 -2
- moai_adk/cli/commands/doctor.py +7 -1
- moai_adk/cli/commands/init.py +321 -11
- moai_adk/cli/commands/language.py +7 -1
- moai_adk/cli/commands/rank.py +449 -0
- moai_adk/cli/commands/status.py +7 -1
- moai_adk/cli/commands/switch.py +325 -0
- moai_adk/cli/commands/update.py +296 -23
- moai_adk/cli/prompts/init_prompts.py +362 -66
- moai_adk/cli/prompts/translations/__init__.py +573 -0
- moai_adk/cli/ui/prompts.py +61 -2
- moai_adk/cli/worktree/cli.py +106 -1
- moai_adk/cli/worktree/manager.py +155 -0
- moai_adk/core/config/unified.py +244 -63
- moai_adk/core/credentials.py +264 -0
- moai_adk/core/error_recovery_system.py +22 -4
- moai_adk/core/git/conflict_detector.py +10 -1
- moai_adk/core/git/event_detector.py +16 -5
- moai_adk/core/integration/engine.py +2 -2
- moai_adk/core/integration/integration_tester.py +5 -5
- moai_adk/core/language_config_resolver.py +9 -3
- moai_adk/core/merge/analyzer.py +509 -324
- moai_adk/core/migration/alfred_to_moai_migrator.py +7 -1
- moai_adk/core/migration/backup_manager.py +54 -4
- moai_adk/core/migration/file_migrator.py +174 -2
- moai_adk/core/migration/interactive_checkbox_ui.py +42 -31
- moai_adk/core/migration/version_detector.py +123 -19
- moai_adk/core/migration/version_migrator.py +44 -9
- moai_adk/core/model_allocator.py +241 -0
- moai_adk/core/project/backup_utils.py +12 -2
- moai_adk/core/project/initializer.py +44 -87
- moai_adk/core/project/phase_executor.py +95 -33
- moai_adk/core/project/validator.py +16 -1
- moai_adk/core/quality/trust_checker.py +30 -10
- moai_adk/core/rollback_manager.py +60 -25
- moai_adk/core/template/backup.py +88 -6
- moai_adk/core/template/config.py +33 -9
- moai_adk/core/template/merger.py +34 -8
- moai_adk/core/template/processor.py +334 -11
- moai_adk/core/template_engine.py +10 -1
- moai_adk/core/template_variable_synchronizer.py +16 -2
- moai_adk/core/version_sync.py +54 -6
- moai_adk/foundation/__init__.py +1 -20
- moai_adk/foundation/testing.py +1 -1
- moai_adk/loop/__init__.py +54 -0
- moai_adk/loop/controller.py +305 -0
- moai_adk/loop/feedback.py +230 -0
- moai_adk/loop/state.py +209 -0
- moai_adk/loop/storage.py +220 -0
- moai_adk/lsp/__init__.py +70 -0
- moai_adk/lsp/client.py +320 -0
- moai_adk/lsp/models.py +261 -0
- moai_adk/lsp/protocol.py +404 -0
- moai_adk/lsp/server_manager.py +248 -0
- moai_adk/project/configuration.py +8 -1
- moai_adk/py.typed +0 -0
- moai_adk/ralph/__init__.py +37 -0
- moai_adk/ralph/engine.py +307 -0
- moai_adk/rank/__init__.py +21 -0
- moai_adk/rank/auth.py +425 -0
- moai_adk/rank/client.py +557 -0
- moai_adk/rank/config.py +147 -0
- moai_adk/rank/hook.py +1503 -0
- moai_adk/rank/py.typed +0 -0
- moai_adk/statusline/__init__.py +3 -0
- moai_adk/statusline/enhanced_output_style_detector.py +5 -5
- moai_adk/statusline/main.py +20 -1
- moai_adk/statusline/memory_collector.py +268 -0
- moai_adk/statusline/renderer.py +54 -38
- moai_adk/tag_system/__init__.py +48 -0
- moai_adk/tag_system/atomic_ops.py +117 -0
- moai_adk/tag_system/linkage.py +335 -0
- moai_adk/tag_system/parser.py +176 -0
- moai_adk/tag_system/validator.py +200 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +19 -3
- moai_adk/templates/.claude/agents/moai/builder-command.md +62 -16
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +763 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +21 -5
- moai_adk/templates/.claude/agents/moai/expert-backend.md +103 -39
- moai_adk/templates/.claude/agents/moai/expert-debug.md +9 -3
- moai_adk/templates/.claude/agents/moai/expert-devops.md +16 -14
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +45 -31
- moai_adk/templates/.claude/agents/moai/expert-performance.md +13 -9
- moai_adk/templates/.claude/agents/moai/expert-refactoring.md +228 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +19 -3
- moai_adk/templates/.claude/agents/moai/expert-testing.md +13 -9
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +8 -2
- moai_adk/templates/.claude/agents/moai/manager-docs.md +10 -5
- moai_adk/templates/.claude/agents/moai/manager-git.md +99 -27
- moai_adk/templates/.claude/agents/moai/manager-project.md +87 -7
- moai_adk/templates/.claude/agents/moai/manager-quality.md +22 -5
- moai_adk/templates/.claude/agents/moai/manager-spec.md +8 -2
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +45 -14
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +16 -3
- moai_adk/templates/.claude/commands/moai/0-project.md +239 -1185
- moai_adk/templates/.claude/commands/moai/1-plan.md +383 -363
- moai_adk/templates/.claude/commands/moai/2-run.md +254 -347
- moai_adk/templates/.claude/commands/moai/3-sync.md +174 -100
- moai_adk/templates/.claude/commands/moai/9-feedback.md +49 -33
- moai_adk/templates/.claude/commands/moai/alfred.md +339 -0
- moai_adk/templates/.claude/commands/moai/cancel-loop.md +163 -0
- moai_adk/templates/.claude/commands/moai/fix.md +264 -0
- moai_adk/templates/.claude/commands/moai/loop.md +363 -0
- moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +37 -81
- moai_adk/templates/.claude/hooks/moai/lib/alfred_detector.py +105 -0
- moai_adk/templates/.claude/hooks/moai/lib/atomic_write.py +122 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +4 -1
- moai_adk/templates/.claude/hooks/moai/lib/common.py +35 -5
- moai_adk/templates/.claude/hooks/moai/lib/config.py +376 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +24 -28
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +14 -14
- moai_adk/templates/.claude/hooks/moai/lib/enhanced_output_style_detector.py +372 -0
- moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
- moai_adk/templates/.claude/hooks/moai/lib/file_utils.py +95 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_collector.py +190 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +15 -13
- moai_adk/templates/.claude/hooks/moai/lib/language_detector.py +298 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +125 -25
- moai_adk/templates/.claude/hooks/moai/lib/main.py +341 -0
- moai_adk/templates/.claude/hooks/moai/lib/memory_collector.py +268 -0
- moai_adk/templates/.claude/hooks/moai/lib/metrics_tracker.py +78 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +9 -7
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +204 -13
- moai_adk/templates/.claude/hooks/moai/lib/project.py +23 -14
- moai_adk/templates/.claude/hooks/moai/lib/renderer.py +359 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_linkage.py +333 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_parser.py +176 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_validator.py +200 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +5 -5
- moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +896 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +30 -18
- moai_adk/templates/.claude/hooks/moai/lib/update_checker.py +129 -0
- moai_adk/templates/.claude/hooks/moai/lib/version_reader.py +741 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +276 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +255 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__coverage_guard.py +325 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +315 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__lsp_diagnostic.py +508 -0
- moai_adk/templates/.claude/hooks/moai/pre_commit__tag_validator.py +287 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +268 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__tdd_enforcer.py +208 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +93 -61
- moai_adk/templates/.claude/hooks/moai/session_end__rank_submit.py +69 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +165 -70
- moai_adk/templates/.claude/hooks/moai/shared/utils/announcement_translator.py +206 -0
- moai_adk/templates/.claude/hooks/moai/stop__loop_controller.py +621 -0
- moai_adk/templates/.claude/output-styles/moai/alfred.md +758 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +86 -3
- moai_adk/templates/.claude/output-styles/moai/yoda.md +2 -2
- moai_adk/templates/.claude/settings.json +154 -77
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +252 -198
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +169 -323
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +39 -27
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +115 -125
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +150 -150
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +182 -175
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +198 -138
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +226 -320
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +43 -222
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +75 -219
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +103 -463
- 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-uiux/SKILL.md +118 -339
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +74 -377
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +299 -70
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +205 -182
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -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 +32 -22
- 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 +110 -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 +640 -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-skills-official.md +425 -71
- 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 +325 -143
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +96 -316
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +116 -294
- 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 +121 -650
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -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 +37 -730
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +77 -819
- 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-philosopher/SKILL.md +14 -18
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +86 -270
- moai_adk/templates/.claude/skills/moai-framework-electron/SKILL.md +288 -0
- moai_adk/templates/.claude/skills/moai-framework-electron/examples.md +2082 -0
- moai_adk/templates/.claude/skills/moai-framework-electron/reference.md +1649 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +76 -582
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +1239 -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 +1136 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +82 -436
- 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 +65 -542
- moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +1171 -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 +889 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +32 -405
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +114 -293
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +83 -307
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +179 -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 +42 -279
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +94 -556
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +1608 -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 +1323 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +108 -358
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +84 -482
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +1154 -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 +1087 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +106 -610
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +1106 -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 +1024 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +51 -265
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +106 -442
- 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-swift/SKILL.md +88 -457
- 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-typescript/SKILL.md +75 -283
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +97 -252
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +64 -240
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +331 -12
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +330 -37
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +90 -287
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +200 -206
- 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 +75 -330
- moai_adk/templates/.claude/skills/moai-platform-clerk/examples.md +1426 -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 +100 -340
- 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 +113 -326
- 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 +71 -302
- 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 +101 -412
- 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 +96 -327
- 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 +103 -428
- 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 +96 -446
- 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-tool-ast-grep/SKILL.md +193 -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-workflow-jit-docs/SKILL.md +225 -423
- moai_adk/templates/.claude/skills/moai-workflow-loop/SKILL.md +197 -0
- moai_adk/templates/.claude/skills/moai-workflow-loop/examples.md +1063 -0
- moai_adk/templates/.claude/skills/moai-workflow-loop/reference.md +1414 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +211 -314
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +15 -43
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +119 -316
- moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +96 -203
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +201 -388
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +52 -3
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +263 -806
- 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 +191 -1344
- 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/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 +287 -1194
- 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 +262 -1192
- 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 +227 -1222
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +228 -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/.git-hooks/pre-push +162 -59
- moai_adk/templates/.github/workflows/ci-universal.yml +934 -133
- moai_adk/templates/.gitignore +65 -107
- moai_adk/templates/.lsp.json +152 -0
- moai_adk/templates/.mcp.json +2 -20
- moai_adk/templates/.moai/announcements/en.json +18 -0
- moai_adk/templates/.moai/announcements/ja.json +18 -0
- moai_adk/templates/.moai/announcements/ko.json +18 -0
- moai_adk/templates/.moai/announcements/zh.json +18 -0
- moai_adk/templates/.moai/config/config.yaml +8 -2
- moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
- moai_adk/templates/.moai/config/sections/language.yaml +2 -2
- moai_adk/templates/.moai/config/sections/llm.yaml +41 -0
- moai_adk/templates/.moai/config/sections/pricing.yaml +30 -0
- moai_adk/templates/.moai/config/sections/project.yaml +2 -2
- moai_adk/templates/.moai/config/sections/quality.yaml +43 -5
- moai_adk/templates/.moai/config/sections/ralph.yaml +55 -0
- moai_adk/templates/.moai/config/sections/system.yaml +46 -1
- moai_adk/templates/.moai/config/sections/user.yaml +1 -1
- moai_adk/templates/.moai/config/statusline-config.yaml +2 -2
- moai_adk/templates/.moai/llm-configs/glm.json +22 -0
- moai_adk/templates/CLAUDE.ja.md +343 -0
- moai_adk/templates/CLAUDE.ko.md +343 -0
- moai_adk/templates/CLAUDE.md +200 -499
- moai_adk/templates/CLAUDE.zh.md +343 -0
- moai_adk/utils/common.py +37 -0
- moai_adk/version.py +1 -1
- moai_adk-1.1.0.dist-info/METADATA +2443 -0
- moai_adk-1.1.0.dist-info/RECORD +701 -0
- {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/entry_points.txt +2 -0
- moai_adk-1.1.0.dist-info/licenses/LICENSE +99 -0
- moai_adk/core/config/auto_spec_config.py +0 -340
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +0 -901
- moai_adk/core/spec/confidence_scoring.py +0 -680
- moai_adk/core/spec/ears_template_engine.py +0 -1247
- moai_adk/core/spec/quality_validator.py +0 -687
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +0 -670
- moai_adk/templates/.claude/agents/moai/expert-database.md +0 -777
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +0 -1041
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +0 -458
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +0 -1607
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +0 -789
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +0 -469
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +0 -1032
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +0 -438
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +0 -431
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +0 -405
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +0 -336
- moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +0 -402
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +0 -607
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +0 -300
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +0 -537
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +0 -520
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +0 -574
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +0 -317
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +0 -663
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +0 -190
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +0 -175
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +0 -196
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +0 -17
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +0 -158
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +0 -340
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +0 -713
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +0 -538
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +0 -1336
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +0 -730
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +0 -608
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +0 -1005
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +0 -436
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +0 -411
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +0 -982
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +0 -778
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +0 -646
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +0 -782
- moai_adk/templates/.moai/config/questions/_schema.yaml +0 -151
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +0 -251
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +0 -108
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +0 -81
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +0 -634
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +0 -170
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +0 -87
- moai_adk/templates/.moai/scripts/setup-glm.py +0 -136
- moai_adk-0.34.0.dist-info/METADATA +0 -2999
- moai_adk-0.34.0.dist-info/RECORD +0 -463
- moai_adk-0.34.0.dist-info/licenses/LICENSE +0 -21
- /moai_adk/foundation/{git.py → git/__init__.py} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-nextra/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/examples.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/reference.md +0 -0
- {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/WHEEL +0 -0
|
@@ -6,8 +6,14 @@ Handles automatic migration from legacy alfred/ folders to new moai/ structure.
|
|
|
6
6
|
- Installs fresh moai/ templates from package
|
|
7
7
|
- Deletes alfred/ folders
|
|
8
8
|
- Updates settings.json Hook paths
|
|
9
|
-
- Records migration status in config.json
|
|
9
|
+
- Records migration status in config.json (legacy) or config.yaml
|
|
10
10
|
- Provides automatic rollback on failure
|
|
11
|
+
|
|
12
|
+
BACKWARD COMPATIBILITY NOTE:
|
|
13
|
+
- This migration tool maintains compatibility with legacy config.json format
|
|
14
|
+
- New projects use modular section-based YAML configs (.moai/config/sections/*.yaml)
|
|
15
|
+
- Migration status is recorded in whichever config format the project uses
|
|
16
|
+
- Both formats are supported during migration process
|
|
11
17
|
"""
|
|
12
18
|
|
|
13
19
|
import json
|
|
@@ -3,6 +3,11 @@ Backup management module for MoAI-ADK migrations
|
|
|
3
3
|
|
|
4
4
|
Creates and manages backups during migration processes
|
|
5
5
|
to ensure data safety and enable rollback.
|
|
6
|
+
|
|
7
|
+
Supports backup of:
|
|
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
|
|
|
8
13
|
import json
|
|
@@ -46,15 +51,25 @@ class BackupManager:
|
|
|
46
51
|
|
|
47
52
|
logger.info(f"Creating backup at {backup_dir}")
|
|
48
53
|
|
|
49
|
-
# Files to backup
|
|
54
|
+
# Files to backup (supporting all config formats)
|
|
50
55
|
backup_targets = [
|
|
56
|
+
# Legacy config.json (pre-v0.24.0)
|
|
51
57
|
self.project_root / ".moai" / "config.json",
|
|
58
|
+
# Intermediate config.json (v0.24.0)
|
|
52
59
|
self.project_root / ".moai" / "config" / "config.json",
|
|
60
|
+
# Statusline configs
|
|
53
61
|
self.project_root / ".claude" / "statusline-config.yaml",
|
|
54
62
|
self.project_root / ".moai" / "config" / "statusline-config.yaml",
|
|
55
63
|
]
|
|
56
64
|
|
|
65
|
+
# Add section YAML files (v0.36.0+)
|
|
66
|
+
sections_dir = self.project_root / ".moai" / "config" / "sections"
|
|
67
|
+
if sections_dir.exists():
|
|
68
|
+
for yaml_file in sections_dir.glob("*.yaml"):
|
|
69
|
+
backup_targets.append(yaml_file)
|
|
70
|
+
|
|
57
71
|
backed_up_files = []
|
|
72
|
+
backed_up_dirs = []
|
|
58
73
|
|
|
59
74
|
for target in backup_targets:
|
|
60
75
|
if target.exists():
|
|
@@ -70,21 +85,47 @@ class BackupManager:
|
|
|
70
85
|
backed_up_files.append(str(rel_path))
|
|
71
86
|
logger.debug(f"Backed up: {rel_path}")
|
|
72
87
|
|
|
88
|
+
# Track sections directory if it exists
|
|
89
|
+
if sections_dir.exists():
|
|
90
|
+
backed_up_dirs.append(str(sections_dir.relative_to(self.project_root)))
|
|
91
|
+
|
|
73
92
|
# Save backup metadata
|
|
74
93
|
metadata = {
|
|
75
94
|
"timestamp": timestamp,
|
|
76
95
|
"description": description,
|
|
77
96
|
"backed_up_files": backed_up_files,
|
|
97
|
+
"backed_up_dirs": backed_up_dirs,
|
|
78
98
|
"project_root": str(self.project_root),
|
|
99
|
+
"config_format": self._detect_config_format(),
|
|
79
100
|
}
|
|
80
101
|
|
|
81
102
|
metadata_path = backup_dir / "backup_metadata.json"
|
|
82
103
|
with open(metadata_path, "w", encoding="utf-8") as f:
|
|
83
104
|
json.dump(metadata, f, indent=2, ensure_ascii=False)
|
|
84
105
|
|
|
85
|
-
logger.info(f"
|
|
106
|
+
logger.info(f"Backup created successfully: {backup_dir}")
|
|
86
107
|
return backup_dir
|
|
87
108
|
|
|
109
|
+
def _detect_config_format(self) -> str:
|
|
110
|
+
"""
|
|
111
|
+
Detect the current configuration format
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
One of: "section_yaml", "intermediate_json", "legacy_json", "none"
|
|
115
|
+
"""
|
|
116
|
+
sections_dir = self.project_root / ".moai" / "config" / "sections"
|
|
117
|
+
system_yaml = sections_dir / "system.yaml"
|
|
118
|
+
intermediate_config = self.project_root / ".moai" / "config" / "config.json"
|
|
119
|
+
legacy_config = self.project_root / ".moai" / "config.json"
|
|
120
|
+
|
|
121
|
+
if sections_dir.exists() and system_yaml.exists():
|
|
122
|
+
return "section_yaml"
|
|
123
|
+
elif intermediate_config.exists():
|
|
124
|
+
return "intermediate_json"
|
|
125
|
+
elif legacy_config.exists():
|
|
126
|
+
return "legacy_json"
|
|
127
|
+
return "none"
|
|
128
|
+
|
|
88
129
|
def list_backups(self) -> List[Dict[str, str]]:
|
|
89
130
|
"""
|
|
90
131
|
List all available backups
|
|
@@ -110,6 +151,7 @@ class BackupManager:
|
|
|
110
151
|
"timestamp": metadata.get("timestamp", "unknown"),
|
|
111
152
|
"description": metadata.get("description", "unknown"),
|
|
112
153
|
"files": len(metadata.get("backed_up_files", [])),
|
|
154
|
+
"config_format": metadata.get("config_format", "unknown"),
|
|
113
155
|
}
|
|
114
156
|
)
|
|
115
157
|
except Exception as e:
|
|
@@ -158,7 +200,7 @@ class BackupManager:
|
|
|
158
200
|
shutil.copy2(backup_file, target_file)
|
|
159
201
|
logger.debug(f"Restored: {rel_path}")
|
|
160
202
|
|
|
161
|
-
logger.info("
|
|
203
|
+
logger.info("Backup restored successfully")
|
|
162
204
|
return True
|
|
163
205
|
|
|
164
206
|
except Exception as e:
|
|
@@ -213,6 +255,9 @@ class BackupManager:
|
|
|
213
255
|
- .claude/ (entire directory)
|
|
214
256
|
- .moai/ (entire directory)
|
|
215
257
|
- CLAUDE.md (file)
|
|
258
|
+
- .mcp.json (MCP server configuration) (v2.0.0)
|
|
259
|
+
- .lsp.json (LSP server configuration) (v2.0.0)
|
|
260
|
+
- .git-hooks/ (custom git hooks) (v2.0.0)
|
|
216
261
|
|
|
217
262
|
Args:
|
|
218
263
|
description: Description of this backup (default: "pre-update-backup")
|
|
@@ -232,6 +277,11 @@ class BackupManager:
|
|
|
232
277
|
(self.project_root / ".claude", True), # (path, is_directory)
|
|
233
278
|
(self.project_root / ".moai", True),
|
|
234
279
|
(self.project_root / "CLAUDE.md", False),
|
|
280
|
+
# MCP/LSP configuration (v2.0.0)
|
|
281
|
+
(self.project_root / ".mcp.json", False), # MCP server configuration
|
|
282
|
+
(self.project_root / ".lsp.json", False), # LSP server configuration
|
|
283
|
+
# Git hooks (v2.0.0)
|
|
284
|
+
(self.project_root / ".git-hooks", True), # Custom git hooks
|
|
235
285
|
]
|
|
236
286
|
|
|
237
287
|
backed_up_items = []
|
|
@@ -273,5 +323,5 @@ class BackupManager:
|
|
|
273
323
|
with open(metadata_path, "w", encoding="utf-8") as f:
|
|
274
324
|
json.dump(metadata, f, indent=2, ensure_ascii=False)
|
|
275
325
|
|
|
276
|
-
logger.info(f"
|
|
326
|
+
logger.info(f"Full project backup created successfully: {backup_dir}")
|
|
277
327
|
return backup_dir
|
|
@@ -3,13 +3,21 @@ File migration module for MoAI-ADK version upgrades
|
|
|
3
3
|
|
|
4
4
|
Handles the actual file movement and directory creation
|
|
5
5
|
during migration processes.
|
|
6
|
+
|
|
7
|
+
Supports migration between:
|
|
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
|
import shutil
|
|
10
16
|
from pathlib import Path
|
|
11
17
|
from typing import Any, Dict, List
|
|
12
18
|
|
|
19
|
+
import yaml
|
|
20
|
+
|
|
13
21
|
logger = logging.getLogger(__name__)
|
|
14
22
|
|
|
15
23
|
|
|
@@ -111,10 +119,26 @@ class FileMigrator:
|
|
|
111
119
|
# Safety check for safe mode
|
|
112
120
|
if safe:
|
|
113
121
|
safe_patterns = [
|
|
122
|
+
# Legacy and intermediate config.json
|
|
114
123
|
".moai/config.json",
|
|
124
|
+
".moai/config/config.json",
|
|
125
|
+
# Statusline configs
|
|
115
126
|
".claude/statusline-config.yaml",
|
|
127
|
+
".moai/config/statusline-config.yaml",
|
|
128
|
+
# Section YAML files (v0.36.0+)
|
|
129
|
+
".moai/config/sections/user.yaml",
|
|
130
|
+
".moai/config/sections/language.yaml",
|
|
131
|
+
".moai/config/sections/project.yaml",
|
|
132
|
+
".moai/config/sections/git-strategy.yaml",
|
|
133
|
+
".moai/config/sections/quality.yaml",
|
|
134
|
+
".moai/config/sections/system.yaml",
|
|
116
135
|
]
|
|
117
|
-
|
|
136
|
+
try:
|
|
137
|
+
rel_path = str(file_path.relative_to(self.project_root))
|
|
138
|
+
is_safe = any(rel_path.endswith(pattern) for pattern in safe_patterns)
|
|
139
|
+
except ValueError:
|
|
140
|
+
is_safe = False
|
|
141
|
+
|
|
118
142
|
if not is_safe:
|
|
119
143
|
logger.warning(f"Refusing to delete non-safe file: {file_path}")
|
|
120
144
|
return False
|
|
@@ -132,7 +156,7 @@ class FileMigrator:
|
|
|
132
156
|
Execute a migration plan
|
|
133
157
|
|
|
134
158
|
Args:
|
|
135
|
-
plan: Migration plan dictionary with 'create', 'move', 'cleanup' keys
|
|
159
|
+
plan: Migration plan dictionary with 'create', 'move', 'convert', 'cleanup' keys
|
|
136
160
|
|
|
137
161
|
Returns:
|
|
138
162
|
Dictionary with execution results
|
|
@@ -141,6 +165,7 @@ class FileMigrator:
|
|
|
141
165
|
"success": True,
|
|
142
166
|
"created_dirs": 0,
|
|
143
167
|
"moved_files": 0,
|
|
168
|
+
"converted_files": 0,
|
|
144
169
|
"cleaned_files": 0,
|
|
145
170
|
"errors": [],
|
|
146
171
|
}
|
|
@@ -166,8 +191,155 @@ class FileMigrator:
|
|
|
166
191
|
results["errors"].append(f"Failed to move: {move_op['from']} → {move_op['to']}")
|
|
167
192
|
results["success"] = False
|
|
168
193
|
|
|
194
|
+
# Convert config.json to section YAML files (v0.36.0+ migration)
|
|
195
|
+
for convert_op in plan.get("convert", []):
|
|
196
|
+
source = self.project_root / convert_op["from"]
|
|
197
|
+
target_dir = self.project_root / convert_op["to_dir"]
|
|
198
|
+
|
|
199
|
+
if self.convert_json_to_section_yaml(source, target_dir):
|
|
200
|
+
results["converted_files"] += 1
|
|
201
|
+
logger.info(f"✅ {convert_op['description']}: {convert_op['from']} → {convert_op['to_dir']}/")
|
|
202
|
+
else:
|
|
203
|
+
results["errors"].append(f"Failed to convert: {convert_op['from']} → {convert_op['to_dir']}/")
|
|
204
|
+
results["success"] = False
|
|
205
|
+
|
|
169
206
|
return results
|
|
170
207
|
|
|
208
|
+
def convert_json_to_section_yaml(self, source_json: Path, target_dir: Path) -> bool:
|
|
209
|
+
"""
|
|
210
|
+
Convert a config.json file to section YAML files
|
|
211
|
+
|
|
212
|
+
Args:
|
|
213
|
+
source_json: Path to the source config.json file
|
|
214
|
+
target_dir: Path to the target sections directory
|
|
215
|
+
|
|
216
|
+
Returns:
|
|
217
|
+
True if conversion was successful
|
|
218
|
+
"""
|
|
219
|
+
if not source_json.exists():
|
|
220
|
+
logger.warning(f"Source JSON file not found: {source_json}")
|
|
221
|
+
return False
|
|
222
|
+
|
|
223
|
+
try:
|
|
224
|
+
# Read the source JSON
|
|
225
|
+
with open(source_json, "r", encoding="utf-8") as f:
|
|
226
|
+
config_data = json.load(f)
|
|
227
|
+
|
|
228
|
+
# Ensure target directory exists
|
|
229
|
+
target_dir.mkdir(parents=True, exist_ok=True)
|
|
230
|
+
|
|
231
|
+
# Map JSON keys to section files
|
|
232
|
+
section_mapping = self._get_section_mapping(config_data)
|
|
233
|
+
|
|
234
|
+
# Write each section to its YAML file
|
|
235
|
+
for section_name, section_data in section_mapping.items():
|
|
236
|
+
if section_data:
|
|
237
|
+
yaml_file = target_dir / f"{section_name}.yaml"
|
|
238
|
+
# Skip if file already exists (don't overwrite)
|
|
239
|
+
if yaml_file.exists():
|
|
240
|
+
logger.debug(f"Section file already exists, skipping: {yaml_file}")
|
|
241
|
+
continue
|
|
242
|
+
|
|
243
|
+
with open(yaml_file, "w", encoding="utf-8") as f:
|
|
244
|
+
# Add header comment
|
|
245
|
+
f.write(f"# {section_name.replace('-', ' ').title()} Settings\n")
|
|
246
|
+
f.write("# Migrated from config.json\n\n")
|
|
247
|
+
yaml.dump(section_data, f, default_flow_style=False, allow_unicode=True)
|
|
248
|
+
logger.debug(f"Created section file: {yaml_file}")
|
|
249
|
+
|
|
250
|
+
logger.info(f"Successfully converted {source_json} to section YAML files")
|
|
251
|
+
return True
|
|
252
|
+
|
|
253
|
+
except Exception as e:
|
|
254
|
+
logger.error(f"Failed to convert {source_json} to section YAML: {e}")
|
|
255
|
+
return False
|
|
256
|
+
|
|
257
|
+
def _get_section_mapping(self, config_data: Dict[str, Any]) -> Dict[str, Dict[str, Any]]:
|
|
258
|
+
"""
|
|
259
|
+
Map config.json data to section YAML structure
|
|
260
|
+
|
|
261
|
+
Args:
|
|
262
|
+
config_data: The config.json data as a dictionary
|
|
263
|
+
|
|
264
|
+
Returns:
|
|
265
|
+
Dictionary mapping section names to their data
|
|
266
|
+
"""
|
|
267
|
+
sections: Dict[str, Dict[str, Any]] = {
|
|
268
|
+
"user": {},
|
|
269
|
+
"language": {},
|
|
270
|
+
"project": {},
|
|
271
|
+
"git-strategy": {},
|
|
272
|
+
"quality": {},
|
|
273
|
+
"system": {},
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
# Map user settings
|
|
277
|
+
if "user_name" in config_data:
|
|
278
|
+
sections["user"]["user"] = {"name": config_data["user_name"]}
|
|
279
|
+
if "user" in config_data:
|
|
280
|
+
sections["user"]["user"] = config_data["user"]
|
|
281
|
+
|
|
282
|
+
# Map language settings
|
|
283
|
+
language_keys = ["conversation_language", "agent_prompt_language", "documentation_language", "code_comments"]
|
|
284
|
+
language_data = {}
|
|
285
|
+
for key in language_keys:
|
|
286
|
+
if key in config_data:
|
|
287
|
+
language_data[key] = config_data[key]
|
|
288
|
+
if "language" in config_data:
|
|
289
|
+
language_data.update(config_data["language"])
|
|
290
|
+
if language_data:
|
|
291
|
+
sections["language"]["language"] = language_data
|
|
292
|
+
|
|
293
|
+
# Map project settings
|
|
294
|
+
project_keys = ["project_name", "project_type", "project_description", "locale", "created_at", "initialized"]
|
|
295
|
+
project_data = {}
|
|
296
|
+
for key in project_keys:
|
|
297
|
+
if key in config_data:
|
|
298
|
+
# Normalize key names
|
|
299
|
+
normalized_key = key.replace("project_", "")
|
|
300
|
+
project_data[normalized_key] = config_data[key]
|
|
301
|
+
if "project" in config_data:
|
|
302
|
+
project_data.update(config_data["project"])
|
|
303
|
+
if project_data:
|
|
304
|
+
sections["project"]["project"] = project_data
|
|
305
|
+
|
|
306
|
+
# Map git strategy settings
|
|
307
|
+
git_keys = ["git_strategy", "auto_branch", "branch_prefix", "commit_style"]
|
|
308
|
+
git_data = {}
|
|
309
|
+
for key in git_keys:
|
|
310
|
+
if key in config_data:
|
|
311
|
+
git_data[key] = config_data[key]
|
|
312
|
+
if "git" in config_data:
|
|
313
|
+
git_data.update(config_data["git"])
|
|
314
|
+
if git_data:
|
|
315
|
+
sections["git-strategy"]["git"] = git_data
|
|
316
|
+
|
|
317
|
+
# Map quality settings
|
|
318
|
+
quality_keys = ["tdd_enabled", "test_framework", "coverage_threshold"]
|
|
319
|
+
quality_data = {}
|
|
320
|
+
for key in quality_keys:
|
|
321
|
+
if key in config_data:
|
|
322
|
+
quality_data[key] = config_data[key]
|
|
323
|
+
if "quality" in config_data:
|
|
324
|
+
quality_data.update(config_data["quality"])
|
|
325
|
+
if "tdd" in config_data:
|
|
326
|
+
quality_data["tdd"] = config_data["tdd"]
|
|
327
|
+
if quality_data:
|
|
328
|
+
sections["quality"]["quality"] = quality_data
|
|
329
|
+
|
|
330
|
+
# Map system settings
|
|
331
|
+
system_data: Dict[str, Any] = {}
|
|
332
|
+
if "moai_version" in config_data:
|
|
333
|
+
system_data["moai"] = {"version": config_data["moai_version"]}
|
|
334
|
+
if "moai" in config_data:
|
|
335
|
+
system_data["moai"] = config_data["moai"]
|
|
336
|
+
if "github" in config_data:
|
|
337
|
+
system_data["github"] = config_data["github"]
|
|
338
|
+
if system_data:
|
|
339
|
+
sections["system"] = system_data
|
|
340
|
+
|
|
341
|
+
return sections
|
|
342
|
+
|
|
171
343
|
def cleanup_old_files(self, cleanup_list: List[str], dry_run: bool = False) -> int:
|
|
172
344
|
"""
|
|
173
345
|
Clean up old files after successful migration
|
|
@@ -4,7 +4,7 @@ This module provides an enhanced interactive CLI interface with checkbox-style s
|
|
|
4
4
|
arrow key navigation, and proper element preservation during updates.
|
|
5
5
|
|
|
6
6
|
Key Features:
|
|
7
|
-
- Arrow key navigation
|
|
7
|
+
- Arrow key navigation to move between elements
|
|
8
8
|
- Spacebar to toggle selection with [x] checkbox markers
|
|
9
9
|
- Category grouping (Agents, Commands, Skills, Hooks)
|
|
10
10
|
- Preserve unselected elements (fixes disappearing issue)
|
|
@@ -55,13 +55,13 @@ class InteractiveCheckboxUI:
|
|
|
55
55
|
flattened_elements = self._flatten_elements(elements_by_category)
|
|
56
56
|
|
|
57
57
|
if not flattened_elements:
|
|
58
|
-
print("\n
|
|
58
|
+
print("\n[OK] No custom elements found in project.")
|
|
59
59
|
print(" All elements are part of the official MoAI-ADK template.")
|
|
60
60
|
return None
|
|
61
61
|
|
|
62
62
|
if not backup_available:
|
|
63
|
-
print("\n
|
|
64
|
-
print("
|
|
63
|
+
print("\n[WARNING] No backup available. Cannot restore custom elements.")
|
|
64
|
+
print("[TIP] Run 'moai-adk update' without --force to create a backup first.")
|
|
65
65
|
return None
|
|
66
66
|
|
|
67
67
|
# Launch curses interface
|
|
@@ -69,16 +69,16 @@ class InteractiveCheckboxUI:
|
|
|
69
69
|
selected_indices = self._run_curses_interface(flattened_elements, elements_by_category)
|
|
70
70
|
except ImportError:
|
|
71
71
|
# Curses not available, use enhanced fallback immediately
|
|
72
|
-
print("\n
|
|
72
|
+
print("\n[INFO] Terminal doesn't support interactive mode, using enhanced selection...")
|
|
73
73
|
return self._fallback_selection(flattened_elements)
|
|
74
74
|
except Exception as e:
|
|
75
75
|
# Fallback to simple selection if curses fails
|
|
76
|
-
print(f"\n
|
|
76
|
+
print(f"\n[WARNING] Interactive mode failed: {e}")
|
|
77
77
|
print("Falling back to enhanced selection mode...")
|
|
78
78
|
return self._fallback_selection(flattened_elements)
|
|
79
79
|
|
|
80
80
|
if selected_indices is None:
|
|
81
|
-
print("\n
|
|
81
|
+
print("\n[WARNING] Selection cancelled.")
|
|
82
82
|
return None
|
|
83
83
|
|
|
84
84
|
# Convert indices to element paths
|
|
@@ -88,7 +88,7 @@ class InteractiveCheckboxUI:
|
|
|
88
88
|
selected_paths.append(flattened_elements[idx]["path"])
|
|
89
89
|
|
|
90
90
|
if not selected_paths:
|
|
91
|
-
print("\n
|
|
91
|
+
print("\n[WARNING] No elements selected for restoration.")
|
|
92
92
|
return None
|
|
93
93
|
|
|
94
94
|
return selected_paths
|
|
@@ -180,14 +180,20 @@ class InteractiveCheckboxUI:
|
|
|
180
180
|
"""
|
|
181
181
|
|
|
182
182
|
def interface(stdscr):
|
|
183
|
-
# Initialize curses
|
|
183
|
+
# Initialize curses with adaptive colors
|
|
184
184
|
curses.curs_set(0) # Hide cursor
|
|
185
|
-
curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_WHITE) # Selected
|
|
186
|
-
curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_BLUE) # Header
|
|
187
|
-
curses.init_pair(3, curses.COLOR_GREEN, curses.COLOR_BLACK) # Success
|
|
188
|
-
curses.init_pair(4, curses.COLOR_YELLOW, curses.COLOR_BLACK) # Warning
|
|
189
185
|
|
|
190
|
-
|
|
186
|
+
# Enable default terminal colors (transparent background)
|
|
187
|
+
curses.use_default_colors()
|
|
188
|
+
|
|
189
|
+
# Color pairs using -1 for transparent/default background
|
|
190
|
+
curses.init_pair(1, curses.COLOR_CYAN, -1) # Current selection (highlighted)
|
|
191
|
+
curses.init_pair(2, curses.COLOR_YELLOW, -1) # Category headers
|
|
192
|
+
curses.init_pair(3, curses.COLOR_GREEN, -1) # Checked items / Success
|
|
193
|
+
curses.init_pair(4, curses.COLOR_RED, -1) # Warnings / Errors
|
|
194
|
+
curses.init_pair(5, curses.COLOR_MAGENTA, -1) # Special emphasis
|
|
195
|
+
|
|
196
|
+
stdscr.erase() # Use erase() instead of clear() to preserve background
|
|
191
197
|
stdscr.refresh()
|
|
192
198
|
|
|
193
199
|
# Main input loop
|
|
@@ -224,20 +230,20 @@ class InteractiveCheckboxUI:
|
|
|
224
230
|
elements: Flattened list of elements and headers
|
|
225
231
|
elements_by_category: Categorized elements for reference
|
|
226
232
|
"""
|
|
227
|
-
stdscr.clear()
|
|
233
|
+
stdscr.erase() # Use erase() instead of clear() to preserve background
|
|
228
234
|
h, w = stdscr.getmaxyx()
|
|
229
235
|
|
|
230
236
|
# Title
|
|
231
|
-
title = "
|
|
237
|
+
title = "[SEARCH] Custom Elements Restoration"
|
|
232
238
|
stdscr.addstr(1, (w - len(title)) // 2, title, curses.A_BOLD)
|
|
233
239
|
|
|
234
240
|
# Instructions
|
|
235
|
-
instructions = ["
|
|
241
|
+
instructions = ["Up/Down Navigate | Space Toggle | A:All N:None | Enter:Confirm | Q/ESC:Cancel"]
|
|
236
242
|
for i, instruction in enumerate(instructions):
|
|
237
243
|
stdscr.addstr(3, 2, instruction)
|
|
238
244
|
|
|
239
245
|
# Separator
|
|
240
|
-
stdscr.addstr(4, 0, "
|
|
246
|
+
stdscr.addstr(4, 0, "-" * w)
|
|
241
247
|
|
|
242
248
|
# Display elements with checkboxes
|
|
243
249
|
y_offset = 6
|
|
@@ -247,7 +253,7 @@ class InteractiveCheckboxUI:
|
|
|
247
253
|
|
|
248
254
|
if element["type"] == "header":
|
|
249
255
|
# Category header
|
|
250
|
-
header_text = f"
|
|
256
|
+
header_text = f"[FOLDER] {element['text']}"
|
|
251
257
|
stdscr.addstr(y_offset, 2, header_text, curses.color_pair(2) | curses.A_BOLD)
|
|
252
258
|
y_offset += 1
|
|
253
259
|
else:
|
|
@@ -261,8 +267,13 @@ class InteractiveCheckboxUI:
|
|
|
261
267
|
line = f"{checkbox} {display_name}"
|
|
262
268
|
|
|
263
269
|
if is_current:
|
|
270
|
+
# Current selection: cyan color with bold
|
|
264
271
|
stdscr.addstr(y_offset, 4, line, curses.color_pair(1) | curses.A_BOLD)
|
|
272
|
+
elif is_selected:
|
|
273
|
+
# Selected but not current: green color
|
|
274
|
+
stdscr.addstr(y_offset, 4, line, curses.color_pair(3))
|
|
265
275
|
else:
|
|
276
|
+
# Not selected: default color
|
|
266
277
|
stdscr.addstr(y_offset, 4, line)
|
|
267
278
|
|
|
268
279
|
y_offset += 1
|
|
@@ -356,14 +367,14 @@ class InteractiveCheckboxUI:
|
|
|
356
367
|
h, w = stdscr.getmaxyx()
|
|
357
368
|
|
|
358
369
|
# Clear screen for confirmation
|
|
359
|
-
stdscr.clear()
|
|
370
|
+
stdscr.erase() # Use erase() instead of clear() to preserve background
|
|
360
371
|
stdscr.addstr(1, (w - 20) // 2, "Confirm Selection", curses.A_BOLD)
|
|
361
372
|
stdscr.addstr(3, 2, f"Selected {len(selected_paths)} elements:")
|
|
362
373
|
|
|
363
374
|
for i, path in enumerate(selected_paths[:10]): # Show max 10 items
|
|
364
375
|
if i >= h - 8:
|
|
365
376
|
break
|
|
366
|
-
stdscr.addstr(5 + i, 4, f"
|
|
377
|
+
stdscr.addstr(5 + i, 4, f"* {path}")
|
|
367
378
|
|
|
368
379
|
if len(selected_paths) > 10:
|
|
369
380
|
stdscr.addstr(h - 4, 4, f"... and {len(selected_paths) - 10} more")
|
|
@@ -384,7 +395,7 @@ class InteractiveCheckboxUI:
|
|
|
384
395
|
List of selected paths or None if cancelled
|
|
385
396
|
"""
|
|
386
397
|
print("\n" + "=" * 60)
|
|
387
|
-
print("
|
|
398
|
+
print("[SEARCH] Custom Elements Detected (Simple Mode)")
|
|
388
399
|
print("=" * 60)
|
|
389
400
|
print("These elements are not part of the official MoAI-ADK template:")
|
|
390
401
|
print()
|
|
@@ -393,15 +404,15 @@ class InteractiveCheckboxUI:
|
|
|
393
404
|
for i, element in enumerate(element_list, 1):
|
|
394
405
|
print(f" {i:2d}. [{element['category']}] {element['name']}")
|
|
395
406
|
|
|
396
|
-
print("\n
|
|
397
|
-
print("
|
|
398
|
-
print("
|
|
399
|
-
print("
|
|
407
|
+
print("\n[TIP] Selection Instructions:")
|
|
408
|
+
print(" * Enter numbers separated by commas (e.g., 1,3,5)")
|
|
409
|
+
print(" * Use 'all' to select all elements")
|
|
410
|
+
print(" * Press Enter with empty input to cancel")
|
|
400
411
|
|
|
401
412
|
try:
|
|
402
413
|
user_input = input("\nSelect elements to restore: ").strip()
|
|
403
414
|
except (KeyboardInterrupt, EOFError):
|
|
404
|
-
print("\n
|
|
415
|
+
print("\n[WARNING] Selection cancelled.")
|
|
405
416
|
return None
|
|
406
417
|
|
|
407
418
|
if not user_input:
|
|
@@ -418,9 +429,9 @@ class InteractiveCheckboxUI:
|
|
|
418
429
|
if 1 <= idx <= len(element_list):
|
|
419
430
|
selected_paths.append(element_list[idx - 1]["path"])
|
|
420
431
|
else:
|
|
421
|
-
print(f"
|
|
432
|
+
print(f"[WARNING] Invalid number: {idx}")
|
|
422
433
|
except ValueError:
|
|
423
|
-
print("
|
|
434
|
+
print("[WARNING] Invalid input. Please enter numbers separated by commas.")
|
|
424
435
|
return None
|
|
425
436
|
|
|
426
437
|
return selected_paths if selected_paths else None
|
|
@@ -434,7 +445,7 @@ class InteractiveCheckboxUI:
|
|
|
434
445
|
Returns:
|
|
435
446
|
True if user confirms, False otherwise
|
|
436
447
|
"""
|
|
437
|
-
print("\n
|
|
448
|
+
print("\n[LIST] Selection Summary:")
|
|
438
449
|
print("-" * 40)
|
|
439
450
|
|
|
440
451
|
for i, element_path in enumerate(selected_elements, 1):
|
|
@@ -449,7 +460,7 @@ class InteractiveCheckboxUI:
|
|
|
449
460
|
confirm = input("\nConfirm restoration? (y/N): ").strip().lower()
|
|
450
461
|
return confirm in ["y", "yes"]
|
|
451
462
|
except (KeyboardInterrupt, EOFError):
|
|
452
|
-
print("\n
|
|
463
|
+
print("\n[WARNING] Restoration cancelled.")
|
|
453
464
|
return False
|
|
454
465
|
|
|
455
466
|
def _get_element_type(self, element_path: str) -> str:
|