moai-adk 0.32.8__py3-none-any.whl → 0.41.2__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/cli/commands/init.py +4 -1
- moai_adk/cli/commands/update.py +31 -26
- moai_adk/cli/worktree/cli.py +54 -43
- moai_adk/cli/worktree/manager.py +17 -14
- moai_adk/cli/worktree/registry.py +313 -19
- moai_adk/core/config/unified.py +237 -63
- 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/language_config_resolver.py +96 -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/project/backup_utils.py +9 -1
- moai_adk/core/project/initializer.py +33 -96
- moai_adk/core/project/phase_executor.py +79 -33
- moai_adk/core/quality/trust_checker.py +30 -10
- moai_adk/core/realtime_monitoring_dashboard.py +3 -3
- moai_adk/core/rollback_manager.py +46 -19
- moai_adk/core/template/backup.py +4 -3
- moai_adk/core/template/config.py +33 -9
- moai_adk/core/template/merger.py +34 -8
- moai_adk/core/template/processor.py +144 -9
- 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/project/configuration.py +1 -1
- moai_adk/statusline/config.py +5 -2
- moai_adk/statusline/main.py +58 -0
- moai_adk/statusline/renderer.py +56 -84
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +218 -51
- moai_adk/templates/.claude/agents/moai/builder-agent.md +46 -11
- moai_adk/templates/.claude/agents/moai/builder-command.md +88 -26
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +753 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +79 -8
- moai_adk/templates/.claude/agents/moai/expert-backend.md +100 -28
- moai_adk/templates/.claude/agents/moai/expert-database.md +20 -12
- moai_adk/templates/.claude/agents/moai/expert-debug.md +19 -8
- moai_adk/templates/.claude/agents/moai/expert-devops.md +36 -25
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +99 -38
- moai_adk/templates/.claude/agents/moai/expert-performance.md +661 -0
- moai_adk/templates/.claude/agents/moai/expert-refactoring.md +218 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +55 -4
- moai_adk/templates/.claude/agents/moai/expert-testing.md +737 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +20 -11
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +13 -4
- moai_adk/templates/.claude/agents/moai/manager-docs.md +15 -7
- moai_adk/templates/.claude/agents/moai/manager-git.md +192 -37
- moai_adk/templates/.claude/agents/moai/manager-project.md +13 -7
- moai_adk/templates/.claude/agents/moai/manager-quality.md +48 -6
- moai_adk/templates/.claude/agents/moai/manager-spec.md +110 -8
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +203 -17
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +217 -23
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +102 -7
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +107 -86
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +50 -4
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +52 -4
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +49 -5
- moai_adk/templates/.claude/commands/moai/0-project.md +503 -307
- moai_adk/templates/.claude/commands/moai/1-plan.md +255 -323
- moai_adk/templates/.claude/commands/moai/2-run.md +257 -315
- moai_adk/templates/.claude/commands/moai/3-sync.md +421 -56
- moai_adk/templates/.claude/commands/moai/9-feedback.md +40 -34
- moai_adk/templates/.claude/hooks/moai/__init__.py +0 -0
- moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +19 -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_manager.py +12 -14
- moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +1 -1
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +104 -14
- 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/tool_registry.py +804 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +14 -2
- moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +256 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +253 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +307 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +231 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +40 -24
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +248 -32
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +265 -2
- moai_adk/templates/.claude/output-styles/moai/yoda.md +23 -2
- moai_adk/templates/.claude/settings.json +44 -6
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +303 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/reference.md +139 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +252 -196
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +252 -0
- 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 +234 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +19 -13
- 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 +21 -14
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
- moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +124 -425
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +17 -15
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +105 -315
- moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +299 -70
- moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +6 -6
- moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +197 -154
- moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +110 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +2 -2
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +432 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-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-claude/reference.md +209 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +12 -1
- 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 +33 -134
- moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +31 -18
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +30 -30
- 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-core/reference.md +478 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +311 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +17 -16
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +431 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +194 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +585 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +403 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +395 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +473 -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 +378 -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 +387 -0
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +419 -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 +384 -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 +505 -0
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +490 -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 +390 -0
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +433 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +378 -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 +212 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +192 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +365 -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 +94 -227
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +26 -6
- moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
- 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-nextra/reference.md +379 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +17 -13
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +1 -1
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +284 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +426 -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 +229 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +250 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +231 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +206 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +207 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +210 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/modules/migration.md +341 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/modules/validation.md +373 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +464 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +307 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/SKILL.md +215 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/examples.md +697 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/index.md +96 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/acp.md +115 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/agents.md +241 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/commands.md +197 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/custom-tools.md +197 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/formatters.md +164 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/keybinds.md +150 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/lsp-servers.md +156 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/mcp-servers.md +214 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/models.md +197 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/permissions.md +162 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/rules.md +129 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/skills.md +192 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/themes.md +200 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/tools.md +169 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/config.md +211 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/enterprise.md +68 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/intro.md +127 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/migration-1.0.md +82 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/network.md +72 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/providers.md +310 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/troubleshooting.md +124 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/ecosystem.md +75 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/plugins.md +218 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/sdk.md +266 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/server.md +207 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/cli.md +159 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/github.md +181 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/gitlab.md +122 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/ide.md +74 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/share.md +106 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/tui.md +129 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/zen.md +118 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/reference.md +790 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +190 -424
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +188 -314
- moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +284 -212
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +2 -2
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +1 -1
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +22 -1
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +337 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +13 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +222 -367
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
- 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-testing/reference.md +440 -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 +168 -50
- moai_adk/templates/.gitignore +0 -3
- moai_adk/templates/.lsp.json +152 -0
- moai_adk/templates/.mcp.json +5 -12
- moai_adk/templates/.moai/config/config.yaml +20 -306
- moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +105 -10
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +259 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +4 -5
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +12 -55
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +111 -21
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +34 -18
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +19 -75
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +83 -7
- moai_adk/templates/.moai/config/sections/language.yaml +7 -7
- moai_adk/templates/.moai/config/sections/project.yaml +1 -1
- moai_adk/templates/.moai/config/sections/quality.yaml +7 -4
- moai_adk/templates/.moai/config/sections/system.yaml +11 -1
- moai_adk/templates/.moai/config/statusline-config.yaml +19 -13
- moai_adk/templates/.moai/scripts/setup-glm.py +4 -4
- moai_adk/templates/CLAUDE.md +578 -154
- moai_adk/utils/common.py +33 -0
- moai_adk/version.py +1 -1
- {moai_adk-0.32.8.dist-info → moai_adk-0.41.2.dist-info}/METADATA +905 -109
- moai_adk-0.41.2.dist-info/RECORD +683 -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/skills/moai-domain-uiux/modules/design-system-tokens.md +0 -405
- moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +0 -352
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +0 -52
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +0 -334
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +0 -310
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +0 -256
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +0 -253
- moai_adk/templates/.claude/skills/moai-lang-unified/README.md +0 -133
- moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +0 -296
- moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +0 -1269
- moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +0 -331
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +0 -336
- moai_adk/templates/.claude/skills/moai-platform-baas/README.md +0 -186
- moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +0 -290
- moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +0 -1225
- moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +0 -567
- moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +0 -323
- moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +0 -204
- 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 -135
- 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 -410
- 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/cache/personalization.json +0 -10
- moai_adk/templates/.moai/config/presets/manual.yaml +0 -28
- moai_adk/templates/.moai/config/presets/personal.yaml +0 -30
- moai_adk/templates/.moai/config/presets/team.yaml +0 -33
- moai_adk-0.32.8.dist-info/RECORD +0 -396
- /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.32.8.dist-info → moai_adk-0.41.2.dist-info}/WHEEL +0 -0
- {moai_adk-0.32.8.dist-info → moai_adk-0.41.2.dist-info}/entry_points.txt +0 -0
- {moai_adk-0.32.8.dist-info → moai_adk-0.41.2.dist-info}/licenses/LICENSE +0 -0
moai_adk/core/config/unified.py
CHANGED
|
@@ -13,13 +13,20 @@ Features:
|
|
|
13
13
|
- Deep merge for nested configs
|
|
14
14
|
- Configuration migration between versions
|
|
15
15
|
- Domain-specific facades for different subsystems
|
|
16
|
+
- Modular section-based YAML configuration (new in v0.36.0)
|
|
16
17
|
|
|
17
18
|
Design Philosophy:
|
|
18
|
-
-
|
|
19
|
+
- Primary: Modular section files `.moai/config/sections/*.yaml`
|
|
20
|
+
- Fallback: Legacy monolithic `.moai/config/config.yaml` or `config.json`
|
|
19
21
|
- Best patterns from StatuslineConfig, UnifiedConfigManager, ConfigurationManager
|
|
20
22
|
- Backward compatible with existing ConfigManager interfaces
|
|
21
23
|
- Performance optimized with caching and minimal I/O
|
|
22
24
|
|
|
25
|
+
Configuration Architecture:
|
|
26
|
+
- New projects: Modular sections (language.yaml, user.yaml, project.yaml, etc.)
|
|
27
|
+
- Legacy projects: Monolithic config.json/config.yaml (auto-migrated on update)
|
|
28
|
+
- Priority: Section files override monolithic config if both exist
|
|
29
|
+
|
|
23
30
|
Usage:
|
|
24
31
|
>>> from moai_adk.core.config.unified import get_unified_config
|
|
25
32
|
>>> config = get_unified_config()
|
|
@@ -95,62 +102,59 @@ class UnifiedConfigManager:
|
|
|
95
102
|
Initialize configuration manager (called once by singleton).
|
|
96
103
|
|
|
97
104
|
Args:
|
|
98
|
-
config_path: Optional path to config file
|
|
105
|
+
config_path: Optional path to config file (legacy mode) or sections directory
|
|
99
106
|
"""
|
|
100
107
|
# Set config path with auto-detection
|
|
101
108
|
if config_path:
|
|
102
109
|
self._config_path = Path(config_path)
|
|
103
110
|
else:
|
|
104
|
-
# Auto-detect
|
|
111
|
+
# Auto-detect configuration strategy
|
|
105
112
|
base_path = Path.cwd() / ".moai" / "config"
|
|
106
|
-
|
|
107
|
-
json_path = base_path / "config.json"
|
|
113
|
+
sections_dir = base_path / "sections"
|
|
108
114
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
self._config_path = json_path
|
|
115
|
+
# Priority 1: Section-based configuration (new approach)
|
|
116
|
+
if sections_dir.exists() and sections_dir.is_dir():
|
|
117
|
+
self._config_path = sections_dir
|
|
113
118
|
else:
|
|
114
|
-
#
|
|
115
|
-
|
|
119
|
+
# Priority 2: Monolithic YAML (legacy)
|
|
120
|
+
yaml_path = base_path / "config.yaml"
|
|
121
|
+
json_path = base_path / "config.json"
|
|
122
|
+
|
|
123
|
+
if YAML_AVAILABLE and yaml_path.exists():
|
|
124
|
+
self._config_path = yaml_path
|
|
125
|
+
elif json_path.exists():
|
|
126
|
+
self._config_path = json_path
|
|
127
|
+
else:
|
|
128
|
+
# Default to sections for new projects
|
|
129
|
+
self._config_path = sections_dir if YAML_AVAILABLE else yaml_path
|
|
116
130
|
|
|
117
131
|
# Load configuration
|
|
118
132
|
self._load_config()
|
|
119
133
|
|
|
120
134
|
def _load_config(self) -> None:
|
|
121
135
|
"""
|
|
122
|
-
Load configuration from file with caching.
|
|
136
|
+
Load configuration from file or sections with caching.
|
|
123
137
|
|
|
124
138
|
Implements cache invalidation based on file modification time.
|
|
125
139
|
Falls back to default configuration if file doesn't exist.
|
|
126
|
-
Supports
|
|
140
|
+
Supports three modes:
|
|
141
|
+
1. Section-based YAML (new): Load from .moai/config/sections/*.yaml
|
|
142
|
+
2. Monolithic YAML (legacy): Load from .moai/config/config.yaml
|
|
143
|
+
3. Monolithic JSON (legacy): Load from .moai/config/config.json
|
|
127
144
|
"""
|
|
128
145
|
try:
|
|
129
|
-
# Check if
|
|
146
|
+
# Check if path exists
|
|
130
147
|
if not self._config_path.exists():
|
|
131
|
-
logger.warning(f"Config
|
|
148
|
+
logger.warning(f"Config path not found: {self._config_path}")
|
|
132
149
|
self._config = self._get_default_config()
|
|
133
150
|
return
|
|
134
151
|
|
|
135
|
-
#
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
# Load from file (auto-detect format)
|
|
142
|
-
with open(self._config_path, "r", encoding="utf-8") as f:
|
|
143
|
-
if self._config_path.suffix == ".yaml" or self._config_path.suffix == ".yml":
|
|
144
|
-
if not YAML_AVAILABLE:
|
|
145
|
-
raise ImportError("PyYAML is required for YAML config files. Install with: pip install pyyaml")
|
|
146
|
-
self._config = yaml.safe_load(f) or {}
|
|
147
|
-
else:
|
|
148
|
-
self._config = json.load(f)
|
|
149
|
-
|
|
150
|
-
# Update cache timestamp
|
|
151
|
-
self._last_modified = current_mtime
|
|
152
|
-
|
|
153
|
-
logger.debug(f"Loaded config from {self._config_path}")
|
|
152
|
+
# Section-based configuration (new approach)
|
|
153
|
+
if self._config_path.is_dir():
|
|
154
|
+
self._load_from_sections()
|
|
155
|
+
else:
|
|
156
|
+
# Monolithic configuration (legacy)
|
|
157
|
+
self._load_from_monolithic()
|
|
154
158
|
|
|
155
159
|
except (
|
|
156
160
|
json.JSONDecodeError,
|
|
@@ -161,6 +165,69 @@ class UnifiedConfigManager:
|
|
|
161
165
|
logger.error(f"Failed to load config: {e}")
|
|
162
166
|
self._config = self._get_default_config()
|
|
163
167
|
|
|
168
|
+
def _load_from_sections(self) -> None:
|
|
169
|
+
"""
|
|
170
|
+
Load configuration from modular section YAML files.
|
|
171
|
+
|
|
172
|
+
Loads and merges all *.yaml files from sections directory:
|
|
173
|
+
- sections/language.yaml
|
|
174
|
+
- sections/user.yaml
|
|
175
|
+
- sections/project.yaml
|
|
176
|
+
- sections/system.yaml
|
|
177
|
+
- sections/git-strategy.yaml
|
|
178
|
+
- sections/quality.yaml
|
|
179
|
+
"""
|
|
180
|
+
# Check cache validity (use directory mtime)
|
|
181
|
+
current_mtime = self._config_path.stat().st_mtime
|
|
182
|
+
if self._last_modified and current_mtime == self._last_modified:
|
|
183
|
+
# Cache is still valid
|
|
184
|
+
return
|
|
185
|
+
|
|
186
|
+
if not YAML_AVAILABLE:
|
|
187
|
+
raise ImportError("PyYAML is required for section-based config. Install with: pip install pyyaml")
|
|
188
|
+
|
|
189
|
+
# Merge all section files
|
|
190
|
+
merged_config: dict[str, Any] = {}
|
|
191
|
+
section_files = sorted(self._config_path.glob("*.yaml"))
|
|
192
|
+
|
|
193
|
+
for section_file in section_files:
|
|
194
|
+
try:
|
|
195
|
+
with open(section_file, "r", encoding="utf-8") as f:
|
|
196
|
+
section_data = yaml.safe_load(f) or {}
|
|
197
|
+
merged_config = self._deep_merge(merged_config, section_data)
|
|
198
|
+
logger.debug(f"Loaded section: {section_file.name}")
|
|
199
|
+
except Exception as e:
|
|
200
|
+
logger.warning(f"Failed to load section {section_file.name}: {e}")
|
|
201
|
+
|
|
202
|
+
self._config = merged_config
|
|
203
|
+
self._last_modified = current_mtime
|
|
204
|
+
logger.debug(f"Loaded config from {len(section_files)} section files")
|
|
205
|
+
|
|
206
|
+
def _load_from_monolithic(self) -> None:
|
|
207
|
+
"""
|
|
208
|
+
Load configuration from single monolithic file (legacy).
|
|
209
|
+
|
|
210
|
+
Supports both YAML and JSON formats.
|
|
211
|
+
"""
|
|
212
|
+
# Check cache validity
|
|
213
|
+
current_mtime = self._config_path.stat().st_mtime
|
|
214
|
+
if self._last_modified and current_mtime == self._last_modified:
|
|
215
|
+
# Cache is still valid
|
|
216
|
+
return
|
|
217
|
+
|
|
218
|
+
# Load from file (auto-detect format)
|
|
219
|
+
with open(self._config_path, "r", encoding="utf-8") as f:
|
|
220
|
+
if self._config_path.suffix == ".yaml" or self._config_path.suffix == ".yml":
|
|
221
|
+
if not YAML_AVAILABLE:
|
|
222
|
+
raise ImportError("PyYAML is required for YAML config files. Install with: pip install pyyaml")
|
|
223
|
+
self._config = yaml.safe_load(f) or {}
|
|
224
|
+
else:
|
|
225
|
+
self._config = json.load(f)
|
|
226
|
+
|
|
227
|
+
# Update cache timestamp
|
|
228
|
+
self._last_modified = current_mtime
|
|
229
|
+
logger.debug(f"Loaded config from {self._config_path}")
|
|
230
|
+
|
|
164
231
|
def get(self, key: str, default: Any = None) -> Any:
|
|
165
232
|
"""
|
|
166
233
|
Get configuration value with dot-notation support.
|
|
@@ -238,7 +305,7 @@ class UnifiedConfigManager:
|
|
|
238
305
|
|
|
239
306
|
def save(self, backup: bool = True) -> bool:
|
|
240
307
|
"""
|
|
241
|
-
Save configuration to file with atomic write.
|
|
308
|
+
Save configuration to file or sections with atomic write.
|
|
242
309
|
|
|
243
310
|
Args:
|
|
244
311
|
backup: If True, create backup before saving (default: True)
|
|
@@ -247,42 +314,123 @@ class UnifiedConfigManager:
|
|
|
247
314
|
bool: True if save successful, False otherwise
|
|
248
315
|
|
|
249
316
|
Pattern: Temp file → Atomic rename (prevents corruption)
|
|
317
|
+
|
|
318
|
+
Note: For section-based configs, saves to individual section files.
|
|
319
|
+
For monolithic configs, saves to single file.
|
|
250
320
|
"""
|
|
251
321
|
try:
|
|
252
|
-
#
|
|
253
|
-
if
|
|
254
|
-
self.
|
|
322
|
+
# Section-based configuration
|
|
323
|
+
if self._config_path.is_dir():
|
|
324
|
+
return self._save_to_sections(backup)
|
|
325
|
+
else:
|
|
326
|
+
# Monolithic configuration (legacy)
|
|
327
|
+
return self._save_to_monolithic(backup)
|
|
255
328
|
|
|
256
|
-
|
|
257
|
-
|
|
329
|
+
except (OSError, PermissionError) as e:
|
|
330
|
+
logger.error(f"Failed to save config: {e}")
|
|
331
|
+
return False
|
|
332
|
+
|
|
333
|
+
def _save_to_sections(self, backup: bool) -> bool:
|
|
334
|
+
"""
|
|
335
|
+
Save configuration to modular section YAML files.
|
|
336
|
+
|
|
337
|
+
Args:
|
|
338
|
+
backup: If True, create backup before saving
|
|
339
|
+
|
|
340
|
+
Returns:
|
|
341
|
+
bool: True if successful
|
|
342
|
+
"""
|
|
343
|
+
if not YAML_AVAILABLE:
|
|
344
|
+
raise ImportError("PyYAML is required for section-based config. Install with: pip install pyyaml")
|
|
345
|
+
|
|
346
|
+
# Create backup if requested
|
|
347
|
+
if backup and self._config_path.exists():
|
|
348
|
+
self._create_backup()
|
|
349
|
+
|
|
350
|
+
# Define section mapping (top-level keys to section files)
|
|
351
|
+
section_mapping = {
|
|
352
|
+
"language": "language.yaml",
|
|
353
|
+
"user": "user.yaml",
|
|
354
|
+
"project": "project.yaml",
|
|
355
|
+
"moai": "system.yaml",
|
|
356
|
+
"github": "system.yaml",
|
|
357
|
+
"git": "git-strategy.yaml",
|
|
358
|
+
"quality": "quality.yaml",
|
|
359
|
+
"tdd": "quality.yaml",
|
|
360
|
+
"hooks": "system.yaml",
|
|
361
|
+
"session": "system.yaml",
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
# Group config data by section file
|
|
365
|
+
section_data: Dict[str, Dict[str, Any]] = {}
|
|
366
|
+
for key, value in self._config.items():
|
|
367
|
+
section_file = section_mapping.get(key, "system.yaml")
|
|
368
|
+
if section_file not in section_data:
|
|
369
|
+
section_data[section_file] = {}
|
|
370
|
+
section_data[section_file][key] = value
|
|
371
|
+
|
|
372
|
+
# Write each section file atomically
|
|
373
|
+
for section_file, data in section_data.items():
|
|
374
|
+
section_path = self._config_path / section_file
|
|
375
|
+
temp_path = section_path.with_suffix(".tmp")
|
|
258
376
|
|
|
259
|
-
# Write to temp file (auto-detect format)
|
|
260
377
|
with open(temp_path, "w", encoding="utf-8") as f:
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
allow_unicode=True,
|
|
269
|
-
sort_keys=False,
|
|
270
|
-
)
|
|
271
|
-
else:
|
|
272
|
-
json.dump(self._config, f, indent=2, ensure_ascii=False)
|
|
378
|
+
yaml.safe_dump(
|
|
379
|
+
data,
|
|
380
|
+
f,
|
|
381
|
+
default_flow_style=False,
|
|
382
|
+
allow_unicode=True,
|
|
383
|
+
sort_keys=False,
|
|
384
|
+
)
|
|
273
385
|
|
|
274
386
|
# Atomic rename
|
|
275
|
-
temp_path.replace(
|
|
387
|
+
temp_path.replace(section_path)
|
|
276
388
|
|
|
277
|
-
|
|
278
|
-
|
|
389
|
+
# Update cache timestamp
|
|
390
|
+
self._last_modified = self._config_path.stat().st_mtime
|
|
391
|
+
logger.info(f"Saved config to {len(section_data)} section files")
|
|
392
|
+
return True
|
|
279
393
|
|
|
280
|
-
|
|
281
|
-
|
|
394
|
+
def _save_to_monolithic(self, backup: bool) -> bool:
|
|
395
|
+
"""
|
|
396
|
+
Save configuration to single monolithic file (legacy).
|
|
282
397
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
398
|
+
Args:
|
|
399
|
+
backup: If True, create backup before saving
|
|
400
|
+
|
|
401
|
+
Returns:
|
|
402
|
+
bool: True if successful
|
|
403
|
+
"""
|
|
404
|
+
# Create backup if requested
|
|
405
|
+
if backup and self._config_path.exists():
|
|
406
|
+
self._create_backup()
|
|
407
|
+
|
|
408
|
+
# Atomic write pattern: temp file → rename
|
|
409
|
+
temp_path = self._config_path.with_suffix(".tmp")
|
|
410
|
+
|
|
411
|
+
# Write to temp file (auto-detect format)
|
|
412
|
+
with open(temp_path, "w", encoding="utf-8") as f:
|
|
413
|
+
if self._config_path.suffix == ".yaml" or self._config_path.suffix == ".yml":
|
|
414
|
+
if not YAML_AVAILABLE:
|
|
415
|
+
raise ImportError("PyYAML is required for YAML config files. Install with: pip install pyyaml")
|
|
416
|
+
yaml.safe_dump(
|
|
417
|
+
self._config,
|
|
418
|
+
f,
|
|
419
|
+
default_flow_style=False,
|
|
420
|
+
allow_unicode=True,
|
|
421
|
+
sort_keys=False,
|
|
422
|
+
)
|
|
423
|
+
else:
|
|
424
|
+
json.dump(self._config, f, indent=2, ensure_ascii=False)
|
|
425
|
+
|
|
426
|
+
# Atomic rename
|
|
427
|
+
temp_path.replace(self._config_path)
|
|
428
|
+
|
|
429
|
+
# Update cache timestamp
|
|
430
|
+
self._last_modified = self._config_path.stat().st_mtime
|
|
431
|
+
|
|
432
|
+
logger.info(f"Saved config to {self._config_path}")
|
|
433
|
+
return True
|
|
286
434
|
|
|
287
435
|
def _create_backup(self) -> None:
|
|
288
436
|
"""Create timestamped backup of config file."""
|
|
@@ -393,8 +541,34 @@ def get_unified_config(
|
|
|
393
541
|
# Convenience functions for common operations
|
|
394
542
|
@lru_cache(maxsize=1)
|
|
395
543
|
def get_config_path() -> Path:
|
|
396
|
-
"""
|
|
397
|
-
|
|
544
|
+
"""
|
|
545
|
+
Get path to configuration file or sections directory.
|
|
546
|
+
|
|
547
|
+
Returns:
|
|
548
|
+
Path: Path to sections directory (new) or config file (legacy)
|
|
549
|
+
|
|
550
|
+
Note: Prioritizes section-based config over monolithic files.
|
|
551
|
+
Legacy projects may still use config.json or config.yaml.
|
|
552
|
+
"""
|
|
553
|
+
base_path = Path.cwd() / ".moai" / "config"
|
|
554
|
+
sections_dir = base_path / "sections"
|
|
555
|
+
|
|
556
|
+
# Priority 1: Section-based configuration (new approach)
|
|
557
|
+
if sections_dir.exists() and sections_dir.is_dir():
|
|
558
|
+
return sections_dir
|
|
559
|
+
|
|
560
|
+
# Priority 2: Monolithic YAML (legacy)
|
|
561
|
+
yaml_path = base_path / "config.yaml"
|
|
562
|
+
if yaml_path.exists():
|
|
563
|
+
return yaml_path
|
|
564
|
+
|
|
565
|
+
# Priority 3: Monolithic JSON (legacy)
|
|
566
|
+
json_path = base_path / "config.json"
|
|
567
|
+
if json_path.exists():
|
|
568
|
+
return json_path
|
|
569
|
+
|
|
570
|
+
# Default: Prefer sections for new projects
|
|
571
|
+
return sections_dir if YAML_AVAILABLE else yaml_path
|
|
398
572
|
|
|
399
573
|
|
|
400
574
|
def get_config_value(key: str, default: Any = None) -> Any:
|
|
@@ -855,7 +855,11 @@ class ErrorRecoverySystem:
|
|
|
855
855
|
return False
|
|
856
856
|
|
|
857
857
|
def _restore_config_backup(self, error_report: ErrorReport, parameters: Dict[str, Any]) -> bool:
|
|
858
|
-
"""Restore configuration from backup
|
|
858
|
+
"""Restore configuration from backup.
|
|
859
|
+
|
|
860
|
+
Supports both YAML and JSON configuration formats with backward
|
|
861
|
+
compatibility for legacy JSON-only backups.
|
|
862
|
+
"""
|
|
859
863
|
try:
|
|
860
864
|
logger.info("Restoring configuration from backup...")
|
|
861
865
|
|
|
@@ -864,16 +868,30 @@ class ErrorRecoverySystem:
|
|
|
864
868
|
logger.warning("No configuration backup directory found")
|
|
865
869
|
return False
|
|
866
870
|
|
|
867
|
-
# Find most recent backup
|
|
868
|
-
|
|
871
|
+
# Find most recent backup - check both YAML and JSON formats
|
|
872
|
+
yaml_backups = list(backup_dir.glob("config_*.yaml"))
|
|
873
|
+
json_backups = list(backup_dir.glob("config_*.json"))
|
|
874
|
+
backup_files = yaml_backups + json_backups
|
|
875
|
+
|
|
869
876
|
if not backup_files:
|
|
870
877
|
logger.warning("No configuration backups found")
|
|
871
878
|
return False
|
|
872
879
|
|
|
873
880
|
latest_backup = max(backup_files, key=lambda f: f.stat().st_mtime)
|
|
881
|
+
is_yaml_backup = latest_backup.suffix in (".yaml", ".yml")
|
|
882
|
+
|
|
883
|
+
# Determine target config file based on backup format
|
|
884
|
+
if is_yaml_backup:
|
|
885
|
+
config_file = self.project_root / ".moai" / "config" / "config.yaml"
|
|
886
|
+
else:
|
|
887
|
+
# Legacy JSON backup - check if project uses YAML now
|
|
888
|
+
yaml_config = self.project_root / ".moai" / "config" / "config.yaml"
|
|
889
|
+
if yaml_config.exists():
|
|
890
|
+
config_file = yaml_config
|
|
891
|
+
else:
|
|
892
|
+
config_file = self.project_root / ".moai" / "config" / "config.json"
|
|
874
893
|
|
|
875
894
|
# Restore configuration
|
|
876
|
-
config_file = self.project_root / ".moai" / "config" / "config.json"
|
|
877
895
|
import shutil
|
|
878
896
|
|
|
879
897
|
shutil.copy2(latest_backup, config_file)
|
|
@@ -42,7 +42,14 @@ class GitConflictDetector:
|
|
|
42
42
|
"CLAUDE.md",
|
|
43
43
|
".gitignore",
|
|
44
44
|
".claude/settings.json",
|
|
45
|
-
".moai/config/config.json",
|
|
45
|
+
".moai/config/config.json", # Legacy monolithic config
|
|
46
|
+
".moai/config/config.yaml", # Legacy monolithic config
|
|
47
|
+
".moai/config/sections/language.yaml", # Section-based config
|
|
48
|
+
".moai/config/sections/user.yaml",
|
|
49
|
+
".moai/config/sections/project.yaml",
|
|
50
|
+
".moai/config/sections/system.yaml",
|
|
51
|
+
".moai/config/sections/git-strategy.yaml",
|
|
52
|
+
".moai/config/sections/quality.yaml",
|
|
46
53
|
}
|
|
47
54
|
|
|
48
55
|
# Config file patterns that are generally safe
|
|
@@ -53,6 +60,8 @@ class GitConflictDetector:
|
|
|
53
60
|
".prettierrc",
|
|
54
61
|
"settings.json",
|
|
55
62
|
"config.json",
|
|
63
|
+
"config.yaml",
|
|
64
|
+
".yaml", # YAML files (includes section files)
|
|
56
65
|
".md", # Markdown files
|
|
57
66
|
}
|
|
58
67
|
|
|
@@ -13,11 +13,14 @@ class EventDetector:
|
|
|
13
13
|
CRITICAL_FILES = {
|
|
14
14
|
"CLAUDE.md",
|
|
15
15
|
"config.json",
|
|
16
|
-
"
|
|
16
|
+
"config.yaml",
|
|
17
|
+
".moai/config/config.json", # Legacy monolithic config
|
|
18
|
+
".moai/config/config.yaml", # Legacy monolithic config
|
|
17
19
|
}
|
|
18
20
|
|
|
19
21
|
CRITICAL_DIRS = {
|
|
20
22
|
".moai/memory",
|
|
23
|
+
".moai/config/sections", # Section-based config directory
|
|
21
24
|
}
|
|
22
25
|
|
|
23
26
|
def is_risky_deletion(self, deleted_files: list[str]) -> bool:
|
|
@@ -52,7 +55,13 @@ class EventDetector:
|
|
|
52
55
|
"""
|
|
53
56
|
Determine whether the file is critical.
|
|
54
57
|
|
|
55
|
-
SPEC requirement: modifying CLAUDE.md, config
|
|
58
|
+
SPEC requirement: modifying CLAUDE.md, config files, or .moai/memory/*.md is risky.
|
|
59
|
+
|
|
60
|
+
Critical files include:
|
|
61
|
+
- CLAUDE.md
|
|
62
|
+
- Legacy: config.json, config.yaml, .moai/config/config.{json,yaml}
|
|
63
|
+
- New: .moai/config/sections/*.yaml
|
|
64
|
+
- Memory: .moai/memory/*.md
|
|
56
65
|
|
|
57
66
|
Args:
|
|
58
67
|
file_path: File path to inspect.
|
|
@@ -67,11 +76,13 @@ class EventDetector:
|
|
|
67
76
|
# Convert to string for further checks
|
|
68
77
|
path_str = str(file_path)
|
|
69
78
|
|
|
70
|
-
# Detect .moai/config/config.json paths
|
|
71
|
-
if ".moai/config/config.json" in path_str or ".moai\\config.json" in path_str:
|
|
79
|
+
# Detect .moai/config/config.{json,yaml} paths (legacy monolithic)
|
|
80
|
+
if ".moai/config/config.json" in path_str or ".moai\\config\\config.json" in path_str:
|
|
81
|
+
return True
|
|
82
|
+
if ".moai/config/config.yaml" in path_str or ".moai\\config\\config.yaml" in path_str:
|
|
72
83
|
return True
|
|
73
84
|
|
|
74
|
-
# Detect files inside
|
|
85
|
+
# Detect files inside critical directories (.moai/memory, .moai/config/sections)
|
|
75
86
|
for critical_dir in self.CRITICAL_DIRS:
|
|
76
87
|
if critical_dir in path_str or critical_dir.replace("/", "\\") in path_str:
|
|
77
88
|
return True
|
|
@@ -3,11 +3,17 @@ MoAI-ADK Language Configuration Resolver
|
|
|
3
3
|
|
|
4
4
|
Centralized system for resolving language configuration from multiple sources:
|
|
5
5
|
1. Environment variables (highest priority)
|
|
6
|
-
2.
|
|
7
|
-
3.
|
|
6
|
+
2. Section files (.moai/config/sections/language.yaml, user.yaml)
|
|
7
|
+
3. Legacy config file (.moai/config/config.yaml or config.json)
|
|
8
|
+
4. Default values (fallback)
|
|
9
|
+
|
|
10
|
+
Configuration Architecture:
|
|
11
|
+
- New projects: Use modular section files for better organization
|
|
12
|
+
- Legacy projects: Continue using config.json or config.yaml
|
|
13
|
+
- Section files take priority over monolithic config if both exist
|
|
8
14
|
|
|
9
15
|
This module provides a unified interface for all language-related configuration
|
|
10
|
-
needs across the MoAI-ADK system.
|
|
16
|
+
needs across the MoAI-ADK system with backward compatibility.
|
|
11
17
|
"""
|
|
12
18
|
|
|
13
19
|
import json
|
|
@@ -116,6 +122,93 @@ class LanguageConfigResolver:
|
|
|
116
122
|
return config
|
|
117
123
|
|
|
118
124
|
def _load_config_file(self) -> Optional[Dict[str, Any]]:
|
|
125
|
+
"""
|
|
126
|
+
Load configuration from .moai/config/config.yaml or section files.
|
|
127
|
+
|
|
128
|
+
Priority:
|
|
129
|
+
1. Section files (.moai/config/sections/*.yaml) - highest
|
|
130
|
+
2. Main config file (.moai/config/config.yaml)
|
|
131
|
+
3. None if neither exists
|
|
132
|
+
|
|
133
|
+
Returns:
|
|
134
|
+
Configuration dictionary or None if file doesn't exist
|
|
135
|
+
"""
|
|
136
|
+
config = {}
|
|
137
|
+
|
|
138
|
+
# Try loading from section files first (higher priority)
|
|
139
|
+
section_config = self._load_section_files()
|
|
140
|
+
if section_config:
|
|
141
|
+
config.update(section_config)
|
|
142
|
+
|
|
143
|
+
# Try loading from main config file (fallback)
|
|
144
|
+
main_config = self._load_main_config_file()
|
|
145
|
+
if main_config:
|
|
146
|
+
# Only update fields not already set by section files
|
|
147
|
+
for key, value in main_config.items():
|
|
148
|
+
if key not in config:
|
|
149
|
+
config[key] = value
|
|
150
|
+
|
|
151
|
+
return config if config else None
|
|
152
|
+
|
|
153
|
+
def _load_section_files(self) -> Optional[Dict[str, Any]]:
|
|
154
|
+
"""
|
|
155
|
+
Load configuration from section files in .moai/config/sections/
|
|
156
|
+
|
|
157
|
+
Section files:
|
|
158
|
+
- user.yaml: User identification
|
|
159
|
+
- language.yaml: Language preferences
|
|
160
|
+
|
|
161
|
+
Returns:
|
|
162
|
+
Configuration dictionary or None if section files don't exist
|
|
163
|
+
"""
|
|
164
|
+
if not YAML_AVAILABLE:
|
|
165
|
+
return None
|
|
166
|
+
|
|
167
|
+
sections_dir = self.project_root / ".moai" / "config" / "sections"
|
|
168
|
+
if not sections_dir.exists():
|
|
169
|
+
return None
|
|
170
|
+
|
|
171
|
+
config = {}
|
|
172
|
+
|
|
173
|
+
try:
|
|
174
|
+
# Load user.yaml
|
|
175
|
+
user_file = sections_dir / "user.yaml"
|
|
176
|
+
if user_file.exists():
|
|
177
|
+
with open(user_file, "r", encoding="utf-8") as f:
|
|
178
|
+
user_data = yaml.safe_load(f) or {}
|
|
179
|
+
user_config = user_data.get("user", {})
|
|
180
|
+
if "name" in user_config:
|
|
181
|
+
config["user_name"] = user_config["name"]
|
|
182
|
+
|
|
183
|
+
# Load language.yaml
|
|
184
|
+
language_file = sections_dir / "language.yaml"
|
|
185
|
+
if language_file.exists():
|
|
186
|
+
with open(language_file, "r", encoding="utf-8") as f:
|
|
187
|
+
lang_data = yaml.safe_load(f) or {}
|
|
188
|
+
language_config = lang_data.get("language", {})
|
|
189
|
+
|
|
190
|
+
if "conversation_language" in language_config:
|
|
191
|
+
config["conversation_language"] = language_config["conversation_language"]
|
|
192
|
+
if "conversation_language_name" in language_config:
|
|
193
|
+
config["conversation_language_name"] = language_config["conversation_language_name"]
|
|
194
|
+
if "agent_prompt_language" in language_config:
|
|
195
|
+
config["agent_prompt_language"] = language_config["agent_prompt_language"]
|
|
196
|
+
if "git_commit_messages" in language_config:
|
|
197
|
+
config["git_commit_messages"] = language_config["git_commit_messages"]
|
|
198
|
+
if "code_comments" in language_config:
|
|
199
|
+
config["code_comments"] = language_config["code_comments"]
|
|
200
|
+
if "documentation" in language_config:
|
|
201
|
+
config["documentation"] = language_config["documentation"]
|
|
202
|
+
if "error_messages" in language_config:
|
|
203
|
+
config["error_messages"] = language_config["error_messages"]
|
|
204
|
+
|
|
205
|
+
return config if config else None
|
|
206
|
+
|
|
207
|
+
except (yaml.YAMLError, IOError, KeyError) as e:
|
|
208
|
+
print(f"Warning: Failed to load section files: {e}")
|
|
209
|
+
return None
|
|
210
|
+
|
|
211
|
+
def _load_main_config_file(self) -> Optional[Dict[str, Any]]:
|
|
119
212
|
"""
|
|
120
213
|
Load configuration from .moai/config/config.yaml or config.json file.
|
|
121
214
|
|