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
|
@@ -85,7 +85,8 @@ class TemplateProcessor:
|
|
|
85
85
|
".moai/specs/", # User SPEC documents
|
|
86
86
|
".moai/reports/", # User reports
|
|
87
87
|
".moai/project/", # User project documents (product/structure/tech.md)
|
|
88
|
-
#
|
|
88
|
+
".moai/config/sections/", # User configuration section files (YAML)
|
|
89
|
+
# config.json/config.yaml is now FORCE OVERWRITTEN (backup in .moai-backups/)
|
|
89
90
|
# Merge via /moai:0-project when optimized=false
|
|
90
91
|
]
|
|
91
92
|
|
|
@@ -107,6 +108,7 @@ class TemplateProcessor:
|
|
|
107
108
|
"MOAI_VERSION_SOURCE": "Version source information",
|
|
108
109
|
"MOAI_VERSION_CACHE_AGE": "Cache age for debugging",
|
|
109
110
|
"CREATION_TIMESTAMP": "Project creation timestamp",
|
|
111
|
+
"STATUSLINE_COMMAND": "Cross-platform statusline command (OS-specific)",
|
|
110
112
|
}
|
|
111
113
|
|
|
112
114
|
def __init__(self, target_path: Path, config: Optional[TemplateProcessorConfig] = None) -> None:
|
|
@@ -173,6 +175,31 @@ class TemplateProcessor:
|
|
|
173
175
|
self.logger.info("VersionReader created with enhanced configuration")
|
|
174
176
|
return self._version_reader
|
|
175
177
|
|
|
178
|
+
def _get_current_version(self) -> Optional[str]:
|
|
179
|
+
"""
|
|
180
|
+
Get the current MoAI-ADK package version.
|
|
181
|
+
|
|
182
|
+
Returns:
|
|
183
|
+
Current version string, or None if version cannot be determined
|
|
184
|
+
"""
|
|
185
|
+
try:
|
|
186
|
+
version_reader = self._get_version_reader()
|
|
187
|
+
version = version_reader.get_version()
|
|
188
|
+
if version and version != "unknown":
|
|
189
|
+
return version
|
|
190
|
+
except Exception as e:
|
|
191
|
+
self.logger.warning(f"Failed to get current version: {e}")
|
|
192
|
+
|
|
193
|
+
# Fallback: try direct import
|
|
194
|
+
try:
|
|
195
|
+
from moai_adk import __version__
|
|
196
|
+
|
|
197
|
+
return __version__
|
|
198
|
+
except ImportError:
|
|
199
|
+
pass
|
|
200
|
+
|
|
201
|
+
return None
|
|
202
|
+
|
|
176
203
|
def _validate_template_variables(self, context: Dict[str, str]) -> None:
|
|
177
204
|
"""
|
|
178
205
|
Validate template variables with comprehensive checking.
|
|
@@ -718,6 +745,7 @@ class TemplateProcessor:
|
|
|
718
745
|
|
|
719
746
|
self._copy_claude(silent)
|
|
720
747
|
self._copy_moai(silent)
|
|
748
|
+
self._sync_new_section_files(silent) # Add new section files from template
|
|
721
749
|
self._copy_github(silent)
|
|
722
750
|
self._copy_claude_md(silent)
|
|
723
751
|
self._copy_gitignore(silent)
|
|
@@ -800,7 +828,7 @@ class TemplateProcessor:
|
|
|
800
828
|
"output-styles/moai",
|
|
801
829
|
"agents/alfred",
|
|
802
830
|
"agents/moai",
|
|
803
|
-
"skills"
|
|
831
|
+
# NOTE: "skills" handled by _sync_skills_selective() to preserve custom skills
|
|
804
832
|
]
|
|
805
833
|
|
|
806
834
|
# 1. Copy Alfred and Moai folders wholesale (backup before delete & overwrite)
|
|
@@ -847,6 +875,9 @@ class TemplateProcessor:
|
|
|
847
875
|
if not silent:
|
|
848
876
|
console.print(f" ✅ .claude/{rel_subdir}/ copied")
|
|
849
877
|
|
|
878
|
+
# 1.6 Sync skills selectively (preserve custom skills, update moai-* skills)
|
|
879
|
+
self._sync_skills_selective(src, dst, silent)
|
|
880
|
+
|
|
850
881
|
# 2. Copy other files/folders individually (smart merge for settings.json and config.json)
|
|
851
882
|
all_warnings = []
|
|
852
883
|
for item in src.iterdir():
|
|
@@ -854,11 +885,13 @@ class TemplateProcessor:
|
|
|
854
885
|
dst_item = dst / rel_path
|
|
855
886
|
|
|
856
887
|
# Skip Alfred parent folders (already handled above)
|
|
888
|
+
# Also skip "skills" - handled by _sync_skills_selective()
|
|
857
889
|
if item.is_dir() and item.name in [
|
|
858
890
|
"hooks",
|
|
859
891
|
"commands",
|
|
860
892
|
"output-styles",
|
|
861
893
|
"agents",
|
|
894
|
+
"skills", # Handled by _sync_skills_selective() to preserve custom skills
|
|
862
895
|
]:
|
|
863
896
|
continue
|
|
864
897
|
|
|
@@ -896,6 +929,54 @@ class TemplateProcessor:
|
|
|
896
929
|
if not silent:
|
|
897
930
|
console.print(" ✅ .claude/ copy complete (variables substituted)")
|
|
898
931
|
|
|
932
|
+
def _sync_skills_selective(self, src: Path, dst: Path, silent: bool = False) -> None:
|
|
933
|
+
"""Sync only moai-* template skills, preserve custom skills.
|
|
934
|
+
|
|
935
|
+
This method ensures that:
|
|
936
|
+
- Template skills (moai-* prefix) are updated from source
|
|
937
|
+
- Custom skills (any other prefix) are preserved untouched
|
|
938
|
+
|
|
939
|
+
Args:
|
|
940
|
+
src: Source .claude directory from template
|
|
941
|
+
dst: Destination .claude directory in project
|
|
942
|
+
silent: Suppress console output if True
|
|
943
|
+
"""
|
|
944
|
+
skills_src = src / "skills"
|
|
945
|
+
skills_dst = dst / "skills"
|
|
946
|
+
|
|
947
|
+
if not skills_src.exists():
|
|
948
|
+
return
|
|
949
|
+
|
|
950
|
+
skills_dst.mkdir(parents=True, exist_ok=True)
|
|
951
|
+
|
|
952
|
+
# Step 1: Identify template skills in source (moai-* prefix)
|
|
953
|
+
template_skills = {d.name for d in skills_src.iterdir() if d.is_dir() and d.name.startswith("moai-")}
|
|
954
|
+
|
|
955
|
+
# Step 2: Delete only template skills in destination
|
|
956
|
+
if skills_dst.exists():
|
|
957
|
+
for skill_dir in list(skills_dst.iterdir()):
|
|
958
|
+
if skill_dir.is_dir() and skill_dir.name.startswith("moai-"):
|
|
959
|
+
shutil.rmtree(skill_dir)
|
|
960
|
+
if not silent:
|
|
961
|
+
console.print(f" [dim]Updating template skill: {skill_dir.name}[/dim]")
|
|
962
|
+
|
|
963
|
+
# Step 3: Copy template skills from source
|
|
964
|
+
for skill_name in sorted(template_skills):
|
|
965
|
+
src_skill = skills_src / skill_name
|
|
966
|
+
dst_skill = skills_dst / skill_name
|
|
967
|
+
shutil.copytree(src_skill, dst_skill)
|
|
968
|
+
|
|
969
|
+
if not silent and template_skills:
|
|
970
|
+
console.print(f" ✅ Synced {len(template_skills)} template skill(s)")
|
|
971
|
+
|
|
972
|
+
# Step 4: Report preserved custom skills
|
|
973
|
+
if skills_dst.exists():
|
|
974
|
+
custom_skills = [d.name for d in skills_dst.iterdir() if d.is_dir() and not d.name.startswith("moai-")]
|
|
975
|
+
if custom_skills and not silent:
|
|
976
|
+
preview = ", ".join(sorted(custom_skills)[:3])
|
|
977
|
+
suffix = "..." if len(custom_skills) > 3 else ""
|
|
978
|
+
console.print(f" ✅ Preserved {len(custom_skills)} custom skill(s): {preview}{suffix}")
|
|
979
|
+
|
|
899
980
|
def _copy_moai(self, silent: bool = False) -> None:
|
|
900
981
|
""".moai/ directory copy with variable substitution (excludes protected paths)."""
|
|
901
982
|
src = self.template_root / ".moai"
|
|
@@ -906,11 +987,11 @@ class TemplateProcessor:
|
|
|
906
987
|
console.print("⚠️ .moai/ template not found")
|
|
907
988
|
return
|
|
908
989
|
|
|
909
|
-
# Paths excluded from template copying (specs/, reports/,
|
|
990
|
+
# Paths excluded from template copying (specs/, reports/, sections/)
|
|
910
991
|
template_protected_paths = [
|
|
911
992
|
"specs",
|
|
912
993
|
"reports",
|
|
913
|
-
"
|
|
994
|
+
"config/sections", # User section YAML files
|
|
914
995
|
]
|
|
915
996
|
|
|
916
997
|
all_warnings = []
|
|
@@ -943,6 +1024,132 @@ class TemplateProcessor:
|
|
|
943
1024
|
if not silent:
|
|
944
1025
|
console.print(" ✅ .moai/ copy complete (variables substituted)")
|
|
945
1026
|
|
|
1027
|
+
def _deep_merge_dicts(self, base: dict, overlay: dict) -> tuple[dict, list[str]]:
|
|
1028
|
+
"""Deep merge two dictionaries, preserving base values and adding new keys from overlay.
|
|
1029
|
+
|
|
1030
|
+
Args:
|
|
1031
|
+
base: User's existing configuration (values to preserve)
|
|
1032
|
+
overlay: Template configuration (new keys to add)
|
|
1033
|
+
|
|
1034
|
+
Returns:
|
|
1035
|
+
Tuple of (merged dict, list of new keys added)
|
|
1036
|
+
"""
|
|
1037
|
+
result = base.copy()
|
|
1038
|
+
new_keys = []
|
|
1039
|
+
|
|
1040
|
+
for key, value in overlay.items():
|
|
1041
|
+
if key not in result:
|
|
1042
|
+
# New key: add from template
|
|
1043
|
+
result[key] = value
|
|
1044
|
+
new_keys.append(key)
|
|
1045
|
+
elif isinstance(value, dict) and isinstance(result.get(key), dict):
|
|
1046
|
+
# Both are dicts: recurse
|
|
1047
|
+
merged, nested_new = self._deep_merge_dicts(result[key], value)
|
|
1048
|
+
result[key] = merged
|
|
1049
|
+
new_keys.extend([f"{key}.{k}" for k in nested_new])
|
|
1050
|
+
# else: key exists in base, preserve user's value
|
|
1051
|
+
|
|
1052
|
+
return result, new_keys
|
|
1053
|
+
|
|
1054
|
+
def _sync_new_section_files(self, silent: bool = False) -> None:
|
|
1055
|
+
"""Sync section files from template to project with smart merge.
|
|
1056
|
+
|
|
1057
|
+
This method handles section file synchronization with the following logic:
|
|
1058
|
+
- New files (template has, project doesn't): Copy from template
|
|
1059
|
+
- Existing files: Smart merge (preserve user values, add new fields)
|
|
1060
|
+
- system.yaml: Always update moai.version to current package version
|
|
1061
|
+
|
|
1062
|
+
Smart Merge Behavior:
|
|
1063
|
+
- User values are NEVER overwritten
|
|
1064
|
+
- Only new keys/fields from template are added
|
|
1065
|
+
- Nested structures are recursively merged
|
|
1066
|
+
"""
|
|
1067
|
+
template_sections = self.template_root / ".moai" / "config" / "sections"
|
|
1068
|
+
project_sections = self.target_path / ".moai" / "config" / "sections"
|
|
1069
|
+
|
|
1070
|
+
if not template_sections.exists():
|
|
1071
|
+
return
|
|
1072
|
+
|
|
1073
|
+
# Ensure project sections directory exists
|
|
1074
|
+
project_sections.mkdir(parents=True, exist_ok=True)
|
|
1075
|
+
|
|
1076
|
+
# Get current package version
|
|
1077
|
+
try:
|
|
1078
|
+
from moai_adk import __version__
|
|
1079
|
+
|
|
1080
|
+
current_version = __version__
|
|
1081
|
+
except ImportError:
|
|
1082
|
+
current_version = None
|
|
1083
|
+
|
|
1084
|
+
new_files_added = []
|
|
1085
|
+
files_updated = []
|
|
1086
|
+
|
|
1087
|
+
import yaml
|
|
1088
|
+
|
|
1089
|
+
for template_file in template_sections.glob("*.yaml"):
|
|
1090
|
+
project_file = project_sections / template_file.name
|
|
1091
|
+
|
|
1092
|
+
if not project_file.exists():
|
|
1093
|
+
# New file: copy with variable substitution
|
|
1094
|
+
self._copy_file_with_substitution(template_file, project_file)
|
|
1095
|
+
new_files_added.append(template_file.name)
|
|
1096
|
+
else:
|
|
1097
|
+
# Existing file: smart merge (add new fields only)
|
|
1098
|
+
try:
|
|
1099
|
+
# Load template data
|
|
1100
|
+
template_content = template_file.read_text(encoding="utf-8")
|
|
1101
|
+
template_data = yaml.safe_load(template_content) or {}
|
|
1102
|
+
|
|
1103
|
+
# Load project data (user's current values)
|
|
1104
|
+
project_content = project_file.read_text(encoding="utf-8")
|
|
1105
|
+
project_data = yaml.safe_load(project_content) or {}
|
|
1106
|
+
|
|
1107
|
+
# Deep merge: preserve user values, add new template keys
|
|
1108
|
+
merged_data, new_keys = self._deep_merge_dicts(project_data, template_data)
|
|
1109
|
+
|
|
1110
|
+
if new_keys:
|
|
1111
|
+
# Write merged data back
|
|
1112
|
+
with open(project_file, "w", encoding="utf-8") as f:
|
|
1113
|
+
yaml.dump(
|
|
1114
|
+
merged_data,
|
|
1115
|
+
f,
|
|
1116
|
+
default_flow_style=False,
|
|
1117
|
+
allow_unicode=True,
|
|
1118
|
+
sort_keys=False,
|
|
1119
|
+
)
|
|
1120
|
+
files_updated.append(f"{template_file.name} (+{len(new_keys)} fields)")
|
|
1121
|
+
|
|
1122
|
+
except Exception:
|
|
1123
|
+
pass # Silently ignore yaml errors for individual files
|
|
1124
|
+
|
|
1125
|
+
# Update system.yaml version (special case: always update version)
|
|
1126
|
+
system_yaml = project_sections / "system.yaml"
|
|
1127
|
+
if system_yaml.exists() and current_version:
|
|
1128
|
+
try:
|
|
1129
|
+
content = system_yaml.read_text(encoding="utf-8")
|
|
1130
|
+
data = yaml.safe_load(content) or {}
|
|
1131
|
+
|
|
1132
|
+
# Update moai.version
|
|
1133
|
+
if "moai" not in data:
|
|
1134
|
+
data["moai"] = {}
|
|
1135
|
+
if data.get("moai", {}).get("version") != current_version:
|
|
1136
|
+
data["moai"]["version"] = current_version
|
|
1137
|
+
|
|
1138
|
+
# Write back
|
|
1139
|
+
with open(system_yaml, "w", encoding="utf-8") as f:
|
|
1140
|
+
yaml.dump(data, f, default_flow_style=False, allow_unicode=True, sort_keys=False)
|
|
1141
|
+
|
|
1142
|
+
if not silent:
|
|
1143
|
+
console.print(f" 🔄 system.yaml version updated to {current_version}")
|
|
1144
|
+
except Exception:
|
|
1145
|
+
pass # Silently ignore yaml errors
|
|
1146
|
+
|
|
1147
|
+
if new_files_added and not silent:
|
|
1148
|
+
console.print(f" ✨ New section files added: {', '.join(new_files_added)}")
|
|
1149
|
+
|
|
1150
|
+
if files_updated and not silent:
|
|
1151
|
+
console.print(f" 🔀 Section files updated: {', '.join(files_updated)}")
|
|
1152
|
+
|
|
946
1153
|
def _copy_github(self, silent: bool = False) -> None:
|
|
947
1154
|
""".github/ directory copy with smart merge (preserves user workflows)."""
|
|
948
1155
|
src = self.template_root / ".github"
|
|
@@ -964,8 +1171,28 @@ class TemplateProcessor:
|
|
|
964
1171
|
console.print(" 🔄 .github/ merged (user workflows preserved, variables substituted)")
|
|
965
1172
|
|
|
966
1173
|
def _copy_claude_md(self, silent: bool = False) -> None:
|
|
967
|
-
"""Copy CLAUDE.md with complete replacement (no merge).
|
|
968
|
-
|
|
1174
|
+
"""Copy CLAUDE.md with complete replacement (no merge).
|
|
1175
|
+
|
|
1176
|
+
Selects language-specific CLAUDE.md based on conversation_language setting:
|
|
1177
|
+
- CLAUDE.ko.md for Korean
|
|
1178
|
+
- CLAUDE.ja.md for Japanese
|
|
1179
|
+
- CLAUDE.zh.md for Chinese
|
|
1180
|
+
- CLAUDE.md for English (default)
|
|
1181
|
+
"""
|
|
1182
|
+
# Get language from context (set by set_context())
|
|
1183
|
+
language = self.context.get("CONVERSATION_LANGUAGE", "en") if self.context else "en"
|
|
1184
|
+
|
|
1185
|
+
# Select language-specific file
|
|
1186
|
+
if language and language != "en":
|
|
1187
|
+
lang_specific_src = self.template_root / f"CLAUDE.{language}.md"
|
|
1188
|
+
if lang_specific_src.exists():
|
|
1189
|
+
src = lang_specific_src
|
|
1190
|
+
else:
|
|
1191
|
+
# Fallback to English if language-specific file doesn't exist
|
|
1192
|
+
src = self.template_root / "CLAUDE.md"
|
|
1193
|
+
else:
|
|
1194
|
+
src = self.template_root / "CLAUDE.md"
|
|
1195
|
+
|
|
969
1196
|
dst = self.target_path / "CLAUDE.md"
|
|
970
1197
|
|
|
971
1198
|
if not src.exists():
|
|
@@ -1015,14 +1242,34 @@ class TemplateProcessor:
|
|
|
1015
1242
|
self.merger.merge_settings_json(src, dst, backup_path)
|
|
1016
1243
|
|
|
1017
1244
|
def _merge_config_json(self, src: Path, dst: Path) -> None:
|
|
1018
|
-
"""Smart merge for config
|
|
1245
|
+
"""Smart merge for config using section YAML files with JSON fallback.
|
|
1246
|
+
|
|
1247
|
+
Supports both new section-based YAML files and legacy config.json.
|
|
1248
|
+
Priority: Section YAML files > config.json fallback
|
|
1019
1249
|
|
|
1020
1250
|
Args:
|
|
1021
|
-
src: Template config.json.
|
|
1022
|
-
dst: Project config.
|
|
1251
|
+
src: Template config file (config.json for legacy projects).
|
|
1252
|
+
dst: Project config file destination.
|
|
1023
1253
|
"""
|
|
1024
1254
|
import json
|
|
1255
|
+
import os
|
|
1025
1256
|
|
|
1257
|
+
try:
|
|
1258
|
+
import yaml # noqa: F401 # pyright: ignore[reportUnusedImport]
|
|
1259
|
+
|
|
1260
|
+
yaml_available = True
|
|
1261
|
+
except ImportError:
|
|
1262
|
+
yaml_available = False
|
|
1263
|
+
|
|
1264
|
+
# Check for section-based YAML configuration (new approach)
|
|
1265
|
+
sections_dir = self.target_path / ".moai" / "config" / "sections"
|
|
1266
|
+
|
|
1267
|
+
if yaml_available and sections_dir.exists() and sections_dir.is_dir():
|
|
1268
|
+
# Use section YAML files - merge each section individually
|
|
1269
|
+
self._merge_section_yaml_files(sections_dir)
|
|
1270
|
+
return
|
|
1271
|
+
|
|
1272
|
+
# Fallback to legacy config.json merging
|
|
1026
1273
|
# Load template config
|
|
1027
1274
|
try:
|
|
1028
1275
|
template_config = json.loads(src.read_text(encoding="utf-8"))
|
|
@@ -1071,8 +1318,6 @@ class TemplateProcessor:
|
|
|
1071
1318
|
merged_config[key] = value
|
|
1072
1319
|
|
|
1073
1320
|
# Apply environment variables (highest priority)
|
|
1074
|
-
import os
|
|
1075
|
-
|
|
1076
1321
|
env_mappings = {
|
|
1077
1322
|
"MOAI_USER_NAME": ("user", "name"),
|
|
1078
1323
|
"MOAI_CONVERSATION_LANG": ("language", "conversation_language"),
|
|
@@ -1119,6 +1364,84 @@ class TemplateProcessor:
|
|
|
1119
1364
|
)
|
|
1120
1365
|
console.print(" ⚠️ Warning: Using simple merge (LanguageConfigResolver not available)")
|
|
1121
1366
|
|
|
1367
|
+
def _merge_section_yaml_files(self, sections_dir: Path) -> None:
|
|
1368
|
+
"""Merge section YAML files with user-specific values preserved.
|
|
1369
|
+
|
|
1370
|
+
Args:
|
|
1371
|
+
sections_dir: Path to sections directory (.moai/config/sections/)
|
|
1372
|
+
"""
|
|
1373
|
+
import os
|
|
1374
|
+
|
|
1375
|
+
try:
|
|
1376
|
+
import yaml
|
|
1377
|
+
except ImportError:
|
|
1378
|
+
console.print("⚠️ Warning: PyYAML not available, skipping section merge")
|
|
1379
|
+
return
|
|
1380
|
+
|
|
1381
|
+
# Get current package version for system.yaml update
|
|
1382
|
+
current_version = self._get_current_version()
|
|
1383
|
+
|
|
1384
|
+
# Environment variable mappings for each section
|
|
1385
|
+
env_mappings = {
|
|
1386
|
+
"language.yaml": {
|
|
1387
|
+
"MOAI_CONVERSATION_LANG": ["language", "conversation_language"],
|
|
1388
|
+
"MOAI_AGENT_PROMPT_LANG": ["language", "agent_prompt_language"],
|
|
1389
|
+
"MOAI_CONVERSATION_LANG_NAME": ["language", "conversation_language_name"],
|
|
1390
|
+
"MOAI_GIT_COMMIT_MESSAGES_LANG": ["language", "git_commit_messages"],
|
|
1391
|
+
"MOAI_CODE_COMMENTS_LANG": ["language", "code_comments"],
|
|
1392
|
+
"MOAI_DOCUMENTATION_LANG": ["language", "documentation"],
|
|
1393
|
+
"MOAI_ERROR_MESSAGES_LANG": ["language", "error_messages"],
|
|
1394
|
+
},
|
|
1395
|
+
"user.yaml": {
|
|
1396
|
+
"MOAI_USER_NAME": ["user", "name"],
|
|
1397
|
+
},
|
|
1398
|
+
}
|
|
1399
|
+
|
|
1400
|
+
for section_file in sections_dir.glob("*.yaml"):
|
|
1401
|
+
try:
|
|
1402
|
+
# Read existing section content
|
|
1403
|
+
with open(section_file, "r", encoding="utf-8") as f:
|
|
1404
|
+
section_data = yaml.safe_load(f) or {}
|
|
1405
|
+
|
|
1406
|
+
modified = False
|
|
1407
|
+
|
|
1408
|
+
# Update system.yaml version to current package version
|
|
1409
|
+
if section_file.name == "system.yaml" and current_version:
|
|
1410
|
+
if "moai" not in section_data:
|
|
1411
|
+
section_data["moai"] = {}
|
|
1412
|
+
if section_data.get("moai", {}).get("version") != current_version:
|
|
1413
|
+
section_data["moai"]["version"] = current_version
|
|
1414
|
+
modified = True
|
|
1415
|
+
|
|
1416
|
+
# Apply environment variable overrides if applicable
|
|
1417
|
+
if section_file.name in env_mappings:
|
|
1418
|
+
for env_var, path in env_mappings[section_file.name].items():
|
|
1419
|
+
env_value = os.getenv(env_var)
|
|
1420
|
+
if env_value:
|
|
1421
|
+
# Navigate to the correct nested location
|
|
1422
|
+
current = section_data
|
|
1423
|
+
for key in path[:-1]:
|
|
1424
|
+
if key not in current:
|
|
1425
|
+
current[key] = {}
|
|
1426
|
+
current = current[key]
|
|
1427
|
+
if current.get(path[-1]) != env_value:
|
|
1428
|
+
current[path[-1]] = env_value
|
|
1429
|
+
modified = True
|
|
1430
|
+
|
|
1431
|
+
# Write back only if modifications were made
|
|
1432
|
+
if modified or section_file.name in env_mappings:
|
|
1433
|
+
with open(section_file, "w", encoding="utf-8") as f:
|
|
1434
|
+
yaml.safe_dump(
|
|
1435
|
+
section_data,
|
|
1436
|
+
f,
|
|
1437
|
+
default_flow_style=False,
|
|
1438
|
+
allow_unicode=True,
|
|
1439
|
+
sort_keys=False,
|
|
1440
|
+
)
|
|
1441
|
+
|
|
1442
|
+
except Exception as e:
|
|
1443
|
+
console.print(f"⚠️ Warning: Failed to merge {section_file.name}: {e}")
|
|
1444
|
+
|
|
1122
1445
|
def _copy_gitignore(self, silent: bool = False) -> None:
|
|
1123
1446
|
""".gitignore copy (optional)."""
|
|
1124
1447
|
src = self.template_root / ".gitignore"
|
moai_adk/core/template_engine.py
CHANGED
|
@@ -209,7 +209,16 @@ class TemplateEngine:
|
|
|
209
209
|
Extract template variables from project configuration.
|
|
210
210
|
|
|
211
211
|
Args:
|
|
212
|
-
config: Project configuration dictionary (from
|
|
212
|
+
config: Project configuration dictionary (from section YAML files
|
|
213
|
+
or legacy .moai/config/config.json)
|
|
214
|
+
|
|
215
|
+
Configuration sources (in priority order):
|
|
216
|
+
1. Section YAML files: .moai/config/sections/*.yaml
|
|
217
|
+
- project.yaml: Project settings (name, description, owner)
|
|
218
|
+
- language.yaml: Language settings
|
|
219
|
+
- user.yaml: User settings
|
|
220
|
+
- system.yaml: MoAI/GitHub settings
|
|
221
|
+
2. Legacy: .moai/config/config.json
|
|
213
222
|
|
|
214
223
|
Returns:
|
|
215
224
|
Dictionary of template variables
|
|
@@ -41,7 +41,8 @@ class TemplateVariableSynchronizer:
|
|
|
41
41
|
TEMPLATE_TRACKING_PATTERNS = [
|
|
42
42
|
".claude/settings.json",
|
|
43
43
|
".claude/settings.local.json",
|
|
44
|
-
".moai/config/
|
|
44
|
+
".moai/config/sections/*.yaml", # Section YAML files (new)
|
|
45
|
+
".moai/config/config.json", # Legacy config.json (fallback)
|
|
45
46
|
".claude/output-styles/**/*.md",
|
|
46
47
|
".claude/hooks/**/*.py",
|
|
47
48
|
".claude/commands/**/*.md",
|
|
@@ -126,12 +127,25 @@ class TemplateVariableSynchronizer:
|
|
|
126
127
|
# If a specific config file changed, prioritize files that depend on it
|
|
127
128
|
if changed_config_path:
|
|
128
129
|
dependency_map = {
|
|
130
|
+
# Section YAML file dependencies (new approach)
|
|
131
|
+
".moai/config/sections/language.yaml": [
|
|
132
|
+
".claude/settings.json",
|
|
133
|
+
".claude/settings.local.json",
|
|
134
|
+
".claude/output-styles",
|
|
135
|
+
".claude/hooks",
|
|
136
|
+
],
|
|
137
|
+
".moai/config/sections/user.yaml": [
|
|
138
|
+
".claude/settings.json",
|
|
139
|
+
".claude/settings.local.json",
|
|
140
|
+
".claude/output-styles",
|
|
141
|
+
],
|
|
142
|
+
# Legacy config.json dependencies (fallback)
|
|
129
143
|
".moai/config/config.json": [
|
|
130
144
|
".claude/settings.json",
|
|
131
145
|
".claude/settings.local.json",
|
|
132
146
|
".claude/output-styles",
|
|
133
147
|
".claude/hooks",
|
|
134
|
-
]
|
|
148
|
+
],
|
|
135
149
|
}
|
|
136
150
|
|
|
137
151
|
config_key = str(changed_config_path.relative_to(self.project_root))
|
moai_adk/core/version_sync.py
CHANGED
|
@@ -5,11 +5,15 @@ Ensures version consistency across multiple configuration files and provides
|
|
|
5
5
|
automatic synchronization capabilities.
|
|
6
6
|
|
|
7
7
|
Key Features:
|
|
8
|
-
- Version consistency validation across pyproject.toml, __init__.py, and config
|
|
8
|
+
- Version consistency validation across pyproject.toml, __init__.py, and config
|
|
9
9
|
- Automatic synchronization when inconsistencies detected
|
|
10
10
|
- Cache invalidation for statusline version readers
|
|
11
11
|
- Version change detection and notification system
|
|
12
12
|
- Fallback strategies for version resolution
|
|
13
|
+
|
|
14
|
+
Configuration sources (in priority order):
|
|
15
|
+
1. Section YAML: .moai/config/sections/system.yaml (moai.version)
|
|
16
|
+
2. Legacy: .moai/config/config.json (moai.version)
|
|
13
17
|
"""
|
|
14
18
|
|
|
15
19
|
import json
|
|
@@ -28,7 +32,8 @@ class VersionSource(Enum):
|
|
|
28
32
|
"""Enum for version source tracking"""
|
|
29
33
|
|
|
30
34
|
PYPROJECT_TOML = "pyproject_toml"
|
|
31
|
-
|
|
35
|
+
SECTION_YAML = "section_yaml" # New: system.yaml
|
|
36
|
+
CONFIG_JSON = "config_json" # Legacy fallback
|
|
32
37
|
PACKAGE_METADATA = "package_metadata"
|
|
33
38
|
FALLBACK = "fallback"
|
|
34
39
|
|
|
@@ -74,14 +79,17 @@ class VersionSynchronizer:
|
|
|
74
79
|
|
|
75
80
|
self.working_dir = working_dir
|
|
76
81
|
self.pyproject_path = working_dir / "pyproject.toml"
|
|
82
|
+
self.system_yaml_path = working_dir / ".moai" / "config" / "sections" / "system.yaml"
|
|
77
83
|
self.config_path = working_dir / ".moai" / "config" / "config.json"
|
|
78
84
|
self.init_path = working_dir / "src" / "moai_adk" / "__init__.py"
|
|
79
85
|
|
|
80
86
|
# Version file paths in order of priority
|
|
81
87
|
# Note: __init__.py reads version dynamically, so we don't synchronize it
|
|
88
|
+
# Priority: pyproject.toml > system.yaml (new) > config.json (legacy)
|
|
82
89
|
self.version_files = [
|
|
83
90
|
(self.pyproject_path, VersionSource.PYPROJECT_TOML),
|
|
84
|
-
(self.
|
|
91
|
+
(self.system_yaml_path, VersionSource.SECTION_YAML), # New: section YAML
|
|
92
|
+
(self.config_path, VersionSource.CONFIG_JSON), # Legacy fallback
|
|
85
93
|
]
|
|
86
94
|
|
|
87
95
|
# Statusline cache directories to invalidate
|
|
@@ -200,6 +208,8 @@ class VersionSynchronizer:
|
|
|
200
208
|
|
|
201
209
|
if source == VersionSource.PYPROJECT_TOML:
|
|
202
210
|
version = self._extract_from_pyproject(content)
|
|
211
|
+
elif source == VersionSource.SECTION_YAML:
|
|
212
|
+
version = self._extract_from_section_yaml(content)
|
|
203
213
|
elif source == VersionSource.CONFIG_JSON:
|
|
204
214
|
version = self._extract_from_config(content)
|
|
205
215
|
elif source == VersionSource.PACKAGE_METADATA:
|
|
@@ -226,8 +236,23 @@ class VersionSynchronizer:
|
|
|
226
236
|
match = re.search(pattern, content, re.MULTILINE)
|
|
227
237
|
return match.group(1) if match else None
|
|
228
238
|
|
|
239
|
+
def _extract_from_section_yaml(self, content: str) -> Optional[str]:
|
|
240
|
+
"""Extract version from .moai/config/sections/system.yaml"""
|
|
241
|
+
try:
|
|
242
|
+
import yaml
|
|
243
|
+
|
|
244
|
+
yaml_data = yaml.safe_load(content)
|
|
245
|
+
moai_config = yaml_data.get("moai", {})
|
|
246
|
+
return moai_config.get("version")
|
|
247
|
+
except ImportError:
|
|
248
|
+
logger.warning("PyYAML not available for section YAML parsing")
|
|
249
|
+
return None
|
|
250
|
+
except Exception as e:
|
|
251
|
+
logger.error(f"Invalid YAML in system.yaml: {e}")
|
|
252
|
+
return None
|
|
253
|
+
|
|
229
254
|
def _extract_from_config(self, content: str) -> Optional[str]:
|
|
230
|
-
"""Extract version from .moai/config/config.json"""
|
|
255
|
+
"""Extract version from .moai/config/config.json (legacy)"""
|
|
231
256
|
try:
|
|
232
257
|
config_data = json.loads(content)
|
|
233
258
|
moai_config = config_data.get("moai", {})
|
|
@@ -270,8 +295,31 @@ class VersionSynchronizer:
|
|
|
270
295
|
|
|
271
296
|
def _update_version_in_content(self, content: str, source: VersionSource, target_version: str) -> str:
|
|
272
297
|
"""Update version in content based on source type"""
|
|
273
|
-
if source == VersionSource.
|
|
274
|
-
# Update moai.version in
|
|
298
|
+
if source == VersionSource.SECTION_YAML:
|
|
299
|
+
# Update moai.version in section YAML
|
|
300
|
+
try:
|
|
301
|
+
import yaml
|
|
302
|
+
|
|
303
|
+
yaml_data = yaml.safe_load(content) or {}
|
|
304
|
+
if "moai" not in yaml_data:
|
|
305
|
+
yaml_data["moai"] = {}
|
|
306
|
+
yaml_data["moai"]["version"] = target_version
|
|
307
|
+
return yaml.safe_dump(
|
|
308
|
+
yaml_data,
|
|
309
|
+
default_flow_style=False,
|
|
310
|
+
allow_unicode=True,
|
|
311
|
+
sort_keys=False,
|
|
312
|
+
)
|
|
313
|
+
except ImportError:
|
|
314
|
+
logger.warning("PyYAML not available for section YAML update")
|
|
315
|
+
return content
|
|
316
|
+
except Exception:
|
|
317
|
+
# Fallback: regex replacement for version line
|
|
318
|
+
pattern = r'(version:\s*["\']?)[\d.]+(["\']?)'
|
|
319
|
+
return re.sub(pattern, f"\\g<1>{target_version}\\g<2>", content)
|
|
320
|
+
|
|
321
|
+
elif source == VersionSource.CONFIG_JSON:
|
|
322
|
+
# Update moai.version in JSON (legacy)
|
|
275
323
|
try:
|
|
276
324
|
config_data = json.loads(content)
|
|
277
325
|
if "moai" not in config_data:
|
moai_adk/foundation/__init__.py
CHANGED
|
@@ -1,19 +1,9 @@
|
|
|
1
1
|
"""
|
|
2
2
|
MoAI Foundation module - Core foundation-level implementations.
|
|
3
|
-
Includes: EARS methodology, programming language ecosystem,
|
|
3
|
+
Includes: EARS methodology, programming language ecosystem, testing framework.
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
6
|
from .ears import EARSAnalyzer, EARSParser, EARSValidator
|
|
7
|
-
from .git import (
|
|
8
|
-
BranchingStrategySelector,
|
|
9
|
-
ConventionalCommitValidator,
|
|
10
|
-
GitInfo,
|
|
11
|
-
GitPerformanceOptimizer,
|
|
12
|
-
GitVersionDetector,
|
|
13
|
-
GitWorkflowManager,
|
|
14
|
-
TDDCommitPhase,
|
|
15
|
-
ValidateResult,
|
|
16
|
-
)
|
|
17
7
|
from .langs import (
|
|
18
8
|
AntiPatternDetector,
|
|
19
9
|
EcosystemAnalyzer,
|
|
@@ -40,17 +30,8 @@ __all__ = [
|
|
|
40
30
|
"EcosystemAnalyzer",
|
|
41
31
|
"PerformanceOptimizer",
|
|
42
32
|
"TestingStrategyAdvisor",
|
|
43
|
-
# Git Workflow
|
|
44
|
-
"GitVersionDetector",
|
|
45
|
-
"ConventionalCommitValidator",
|
|
46
|
-
"BranchingStrategySelector",
|
|
47
|
-
"GitWorkflowManager",
|
|
48
|
-
"GitPerformanceOptimizer",
|
|
49
33
|
# Data structures
|
|
50
34
|
"LanguageInfo",
|
|
51
35
|
"Pattern",
|
|
52
36
|
"TestingStrategy",
|
|
53
|
-
"GitInfo",
|
|
54
|
-
"ValidateResult",
|
|
55
|
-
"TDDCommitPhase",
|
|
56
37
|
]
|
moai_adk/foundation/testing.py
CHANGED
|
@@ -1498,7 +1498,7 @@ def main():
|
|
|
1498
1498
|
|
|
1499
1499
|
print("\n4. CI Pipeline Configuration:")
|
|
1500
1500
|
ci_config = automation_orchestrator.setup_ci_pipeline()
|
|
1501
|
-
print(f"CI pipeline: {len(ci_config['stages'])} stages configured")
|
|
1501
|
+
print(f"CI pipeline: {len(ci_config['pipeline_config']['stages'])} stages configured")
|
|
1502
1502
|
|
|
1503
1503
|
print("\n5. Test Reporting:")
|
|
1504
1504
|
test_report = reporting_specialist.generate_test_reports()
|