moai-adk 0.8.0__py3-none-any.whl → 0.34.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/__init__.py +2 -6
- moai_adk/__main__.py +136 -21
- moai_adk/cli/__init__.py +6 -2
- moai_adk/cli/commands/__init__.py +1 -4
- moai_adk/cli/commands/analyze.py +116 -0
- moai_adk/cli/commands/doctor.py +17 -5
- moai_adk/cli/commands/init.py +118 -48
- moai_adk/cli/commands/language.py +248 -0
- moai_adk/cli/commands/status.py +8 -13
- moai_adk/cli/commands/update.py +1978 -149
- moai_adk/cli/main.py +3 -2
- moai_adk/cli/prompts/init_prompts.py +144 -91
- moai_adk/cli/spec_status.py +263 -0
- moai_adk/cli/ui/__init__.py +44 -0
- moai_adk/cli/ui/progress.py +422 -0
- moai_adk/cli/ui/prompts.py +389 -0
- moai_adk/cli/ui/theme.py +129 -0
- moai_adk/cli/worktree/__init__.py +27 -0
- moai_adk/cli/worktree/__main__.py +31 -0
- moai_adk/cli/worktree/cli.py +683 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +493 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +422 -0
- moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
- moai_adk/core/__init__.py +0 -1
- moai_adk/core/analysis/__init__.py +9 -0
- moai_adk/core/analysis/session_analyzer.py +400 -0
- moai_adk/core/claude_integration.py +393 -0
- moai_adk/core/command_helpers.py +270 -0
- moai_adk/core/comprehensive_monitoring_system.py +1183 -0
- moai_adk/core/config/__init__.py +6 -0
- moai_adk/core/config/auto_spec_config.py +340 -0
- moai_adk/core/config/migration.py +148 -17
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +273 -0
- moai_adk/core/diagnostics/slash_commands.py +0 -1
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +1902 -0
- moai_adk/core/event_driven_hook_system.py +1371 -0
- moai_adk/core/git/__init__.py +8 -1
- moai_adk/core/git/branch.py +0 -1
- moai_adk/core/git/branch_manager.py +2 -10
- moai_adk/core/git/checkpoint.py +1 -7
- moai_adk/core/git/commit.py +0 -1
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/event_detector.py +3 -5
- moai_adk/core/git/manager.py +91 -2
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/__init__.py +22 -0
- moai_adk/core/integration/engine.py +157 -0
- moai_adk/core/integration/integration_tester.py +226 -0
- moai_adk/core/integration/models.py +88 -0
- moai_adk/core/integration/utils.py +211 -0
- moai_adk/core/issue_creator.py +305 -0
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config.py +202 -0
- moai_adk/core/language_config_resolver.py +572 -0
- moai_adk/core/language_validator.py +543 -0
- moai_adk/core/mcp/setup.py +116 -0
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +481 -0
- moai_adk/core/migration/__init__.py +18 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
- moai_adk/core/migration/backup_manager.py +277 -0
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +209 -0
- moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
- moai_adk/core/migration/selective_restorer.py +470 -0
- moai_adk/core/migration/template_utils.py +74 -0
- moai_adk/core/migration/user_selection_ui.py +338 -0
- moai_adk/core/migration/version_detector.py +139 -0
- moai_adk/core/migration/version_migrator.py +228 -0
- moai_adk/core/performance/__init__.py +6 -0
- moai_adk/core/performance/cache_system.py +316 -0
- moai_adk/core/performance/parallel_processor.py +116 -0
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/__init__.py +0 -1
- moai_adk/core/project/backup_utils.py +2 -7
- moai_adk/core/project/checker.py +2 -4
- moai_adk/core/project/detector.py +189 -22
- moai_adk/core/project/initializer.py +218 -27
- moai_adk/core/project/phase_executor.py +416 -44
- moai_adk/core/project/validator.py +7 -32
- moai_adk/core/quality/__init__.py +1 -1
- moai_adk/core/quality/trust_checker.py +37 -101
- moai_adk/core/quality/validators/__init__.py +1 -1
- moai_adk/core/quality/validators/base_validator.py +1 -1
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +918 -0
- moai_adk/core/session_manager.py +651 -0
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec/confidence_scoring.py +680 -0
- moai_adk/core/spec/ears_template_engine.py +1247 -0
- moai_adk/core/spec/quality_validator.py +687 -0
- moai_adk/core/spec_status_manager.py +478 -0
- moai_adk/core/template/__init__.py +0 -1
- moai_adk/core/template/backup.py +82 -17
- moai_adk/core/template/config.py +112 -40
- moai_adk/core/template/languages.py +0 -1
- moai_adk/core/template/merger.py +75 -26
- moai_adk/core/template/processor.py +750 -72
- moai_adk/core/template_engine.py +310 -0
- moai_adk/core/template_variable_synchronizer.py +417 -0
- moai_adk/core/unified_permission_manager.py +745 -0
- moai_adk/core/user_behavior_analytics.py +851 -0
- moai_adk/core/version_sync.py +429 -0
- moai_adk/foundation/__init__.py +56 -0
- moai_adk/foundation/backend.py +1027 -0
- moai_adk/foundation/database.py +1115 -0
- moai_adk/foundation/devops.py +1585 -0
- moai_adk/foundation/ears.py +431 -0
- moai_adk/foundation/frontend.py +870 -0
- moai_adk/foundation/git/commit_templates.py +557 -0
- moai_adk/foundation/git.py +376 -0
- moai_adk/foundation/langs.py +484 -0
- moai_adk/foundation/ml_ops.py +1162 -0
- moai_adk/foundation/testing.py +1524 -0
- moai_adk/foundation/trust/trust_principles.py +676 -0
- moai_adk/foundation/trust/validation_checklist.py +1573 -0
- moai_adk/project/__init__.py +0 -0
- moai_adk/project/configuration.py +1084 -0
- moai_adk/project/documentation.py +566 -0
- moai_adk/project/schema.py +447 -0
- moai_adk/statusline/__init__.py +38 -0
- moai_adk/statusline/alfred_detector.py +105 -0
- moai_adk/statusline/config.py +376 -0
- moai_adk/statusline/enhanced_output_style_detector.py +372 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +322 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +343 -0
- moai_adk/statusline/update_checker.py +129 -0
- moai_adk/statusline/version_reader.py +741 -0
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +670 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
- moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +509 -0
- moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +1020 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1384 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
- moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
- moai_adk/templates/.claude/hooks/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
- moai_adk/templates/.claude/hooks/{alfred/core → moai/lib}/checkpoint.py +10 -37
- moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
- moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
- moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
- moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1075 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
- moai_adk/templates/.claude/settings.json +78 -50
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +438 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +313 -283
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +610 -1525
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +423 -619
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +295 -95
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +817 -16
- moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
- moai_adk/templates/.claude/skills/moai-domain-database/reference.md +532 -17
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +470 -97
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +955 -16
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +651 -18
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
- moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
- moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +618 -93
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +446 -91
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +346 -94
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +906 -16
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +721 -15
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +352 -91
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +851 -16
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +278 -18
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +344 -86
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +993 -16
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +549 -18
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +617 -96
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +364 -314
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +849 -496
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +731 -243
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +545 -89
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +650 -87
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +341 -93
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +646 -16
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +491 -18
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +463 -89
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +620 -16
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +410 -17
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +486 -112
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +905 -16
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +659 -17
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +333 -92
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1076 -16
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +718 -21
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +290 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1462 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
- moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
- moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
- moai_adk/templates/.git-hooks/pre-commit +128 -0
- moai_adk/templates/.git-hooks/pre-push +365 -0
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +206 -36
- moai_adk/templates/.gitignore +194 -13
- moai_adk/templates/.mcp.json +31 -0
- moai_adk/templates/.moai/config/config.yaml +58 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +151 -0
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +81 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +634 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +170 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +87 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
- moai_adk/templates/.moai/config/sections/language.yaml +11 -0
- moai_adk/templates/.moai/config/sections/project.yaml +13 -0
- moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
- moai_adk/templates/.moai/config/sections/system.yaml +14 -0
- moai_adk/templates/.moai/config/sections/user.yaml +5 -0
- moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +571 -244
- moai_adk/utils/__init__.py +24 -2
- moai_adk/utils/banner.py +9 -13
- moai_adk/utils/common.py +294 -0
- moai_adk/utils/link_validator.py +241 -0
- moai_adk/utils/logger.py +4 -9
- moai_adk/utils/safe_file_reader.py +206 -0
- moai_adk/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.34.0.dist-info/METADATA +2999 -0
- moai_adk-0.34.0.dist-info/RECORD +463 -0
- {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/WHEEL +1 -1
- {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/entry_points.txt +1 -0
- moai_adk/cli/commands/backup.py +0 -80
- moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -293
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -196
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -207
- moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -375
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -343
- moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -246
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -320
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -837
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -272
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -265
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -311
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -352
- moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1184
- moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -665
- moai_adk/templates/.claude/commands/alfred/2-run.md +0 -488
- moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -623
- moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
- moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
- moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -174
- moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -170
- moai_adk/templates/.claude/hooks/alfred/core/context.py +0 -67
- moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -416
- moai_adk/templates/.claude/hooks/alfred/core/tags.py +0 -198
- moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -21
- moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
- moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -161
- moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -90
- moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -42
- moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
- moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
- moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
- moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
- moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
- moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
- moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
- moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
- moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
- moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
- moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
- moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
- moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
- moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
- moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
- moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
- moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
- moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
- moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
- moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
- moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
- moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
- moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +0 -482
- moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +0 -278
- moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
- moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +0 -477
- moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
- moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +0 -271
- moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
- moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +0 -583
- moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +0 -526
- moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +0 -465
- moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +0 -328
- moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +0 -312
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +0 -285
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +0 -278
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +0 -303
- moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
- moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -218
- moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +0 -161
- moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
- moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
- moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +0 -176
- moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
- moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -256
- moai_adk/templates/.moai/config.json +0 -96
- moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +0 -208
- moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +0 -369
- moai_adk/templates/.moai/memory/CLAUDE-RULES.md +0 -539
- moai_adk/templates/.moai/memory/CONFIG-SCHEMA.md +0 -444
- moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
- moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +0 -220
- moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +0 -218
- moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
- moai_adk/templates/.moai/memory/config-schema.md +0 -444
- moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
- moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
- moai_adk/templates/.moai/project/product.md +0 -161
- moai_adk/templates/.moai/project/structure.md +0 -156
- moai_adk/templates/.moai/project/tech.md +0 -227
- moai_adk/templates/__init__.py +0 -2
- moai_adk-0.8.0.dist-info/METADATA +0 -1722
- moai_adk-0.8.0.dist-info/RECORD +0 -282
- {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,579 @@
|
|
|
1
|
+
"""
|
|
2
|
+
MoAI-ADK Skill Loading System
|
|
3
|
+
|
|
4
|
+
Formal skill loading architecture with validation, dependency management, and caching
|
|
5
|
+
for MoAI-ADK's modular documentation system.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import logging
|
|
9
|
+
import os
|
|
10
|
+
import re
|
|
11
|
+
import threading
|
|
12
|
+
from collections import OrderedDict
|
|
13
|
+
from dataclasses import dataclass, field
|
|
14
|
+
from datetime import datetime, timedelta
|
|
15
|
+
from typing import Any, Dict, List, Optional
|
|
16
|
+
|
|
17
|
+
import yaml
|
|
18
|
+
|
|
19
|
+
# Configure logging
|
|
20
|
+
logging.basicConfig(level=logging.INFO)
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class SkillLoadingError(Exception):
|
|
25
|
+
"""Base exception for skill loading errors"""
|
|
26
|
+
|
|
27
|
+
pass
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class SkillNotFoundError(SkillLoadingError):
|
|
31
|
+
"""Raised when skill file is not found"""
|
|
32
|
+
|
|
33
|
+
pass
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class SkillValidationError(SkillLoadingError):
|
|
37
|
+
"""Raised when skill validation fails"""
|
|
38
|
+
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class DependencyError(SkillLoadingError):
|
|
43
|
+
"""Raised when skill dependencies cannot be resolved"""
|
|
44
|
+
|
|
45
|
+
pass
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@dataclass
|
|
49
|
+
class SkillData:
|
|
50
|
+
"""Data structure for loaded skills with metadata and content"""
|
|
51
|
+
|
|
52
|
+
name: str
|
|
53
|
+
frontmatter: Dict[str, Any]
|
|
54
|
+
content: str
|
|
55
|
+
loaded_at: datetime
|
|
56
|
+
applied_filters: List[str] = field(default_factory=list)
|
|
57
|
+
|
|
58
|
+
def get_capability(self, capability_name: str) -> Any:
|
|
59
|
+
"""Get specific capability from skill content"""
|
|
60
|
+
return self.frontmatter.get("capabilities", {}).get(capability_name)
|
|
61
|
+
|
|
62
|
+
def supports_effort(self, effort: int) -> bool:
|
|
63
|
+
"""Check if skill supports specific effort level"""
|
|
64
|
+
supported_efforts = self.frontmatter.get("supported_efforts", [1, 3, 5])
|
|
65
|
+
return effort in supported_efforts
|
|
66
|
+
|
|
67
|
+
def apply_filter(self, filter_type: str) -> None:
|
|
68
|
+
"""Apply content filter based on effort level"""
|
|
69
|
+
if filter_type not in self.applied_filters:
|
|
70
|
+
self.content = self._filter_content(self.content, filter_type)
|
|
71
|
+
self.applied_filters.append(filter_type)
|
|
72
|
+
|
|
73
|
+
def _filter_content(self, content: str, filter_type: str) -> str:
|
|
74
|
+
"""Filter content based on effort level"""
|
|
75
|
+
if filter_type == "basic":
|
|
76
|
+
# Keep only quick reference and basic patterns
|
|
77
|
+
lines = content.split("\n")
|
|
78
|
+
filtered_lines = []
|
|
79
|
+
in_basic_section = False
|
|
80
|
+
|
|
81
|
+
for line in lines:
|
|
82
|
+
if line.startswith("## Quick Reference") or line.startswith("### Core Patterns"):
|
|
83
|
+
in_basic_section = True
|
|
84
|
+
elif line.startswith("## ") and not line.startswith("## Quick Reference"):
|
|
85
|
+
in_basic_section = False
|
|
86
|
+
|
|
87
|
+
if in_basic_section or line.startswith("#"):
|
|
88
|
+
filtered_lines.append(line)
|
|
89
|
+
|
|
90
|
+
return "\n".join(filtered_lines)
|
|
91
|
+
|
|
92
|
+
elif filter_type == "comprehensive":
|
|
93
|
+
# Return full content
|
|
94
|
+
return content
|
|
95
|
+
|
|
96
|
+
else: # standard
|
|
97
|
+
# Filter out advanced sections
|
|
98
|
+
lines = content.split("\n")
|
|
99
|
+
filtered_lines = []
|
|
100
|
+
skip_section = False
|
|
101
|
+
|
|
102
|
+
for line in lines:
|
|
103
|
+
if line.startswith("## Advanced") or line.startswith("## Implementation Details"):
|
|
104
|
+
skip_section = True
|
|
105
|
+
elif line.startswith("## ") and not line.startswith("## Advanced"):
|
|
106
|
+
skip_section = False
|
|
107
|
+
|
|
108
|
+
if not skip_section:
|
|
109
|
+
filtered_lines.append(line)
|
|
110
|
+
|
|
111
|
+
return "\n".join(filtered_lines)
|
|
112
|
+
|
|
113
|
+
@classmethod
|
|
114
|
+
def get_empty_skill(cls, skill_name: str) -> "SkillData":
|
|
115
|
+
"""Create empty fallback skill"""
|
|
116
|
+
return cls(
|
|
117
|
+
name=skill_name,
|
|
118
|
+
frontmatter={"name": skill_name, "status": "fallback"},
|
|
119
|
+
content=f"# Fallback Skill: {skill_name}\n\nThis skill failed to load. Using fallback mode.",
|
|
120
|
+
loaded_at=datetime.now(),
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class LRUCache:
|
|
125
|
+
"""Thread-safe LRU cache with TTL support"""
|
|
126
|
+
|
|
127
|
+
def __init__(self, maxsize: int = 100, ttl: int = 3600):
|
|
128
|
+
self.maxsize = maxsize
|
|
129
|
+
self.ttl = ttl # Time to live in seconds
|
|
130
|
+
self.cache: OrderedDict[str, tuple[SkillData, datetime]] = OrderedDict() # key -> (data, timestamp)
|
|
131
|
+
self.lock = threading.Lock()
|
|
132
|
+
|
|
133
|
+
def get(self, key: str) -> Optional[SkillData]:
|
|
134
|
+
"""Get value from cache"""
|
|
135
|
+
with self.lock:
|
|
136
|
+
if key in self.cache:
|
|
137
|
+
data, timestamp = self.cache[key]
|
|
138
|
+
if datetime.now() - timestamp < timedelta(seconds=self.ttl):
|
|
139
|
+
# Move to end (most recently used)
|
|
140
|
+
self.cache.move_to_end(key)
|
|
141
|
+
return data
|
|
142
|
+
else:
|
|
143
|
+
# Expired, remove it
|
|
144
|
+
del self.cache[key]
|
|
145
|
+
return None
|
|
146
|
+
|
|
147
|
+
def set(self, key: str, value: SkillData) -> None:
|
|
148
|
+
"""Set value in cache"""
|
|
149
|
+
with self.lock:
|
|
150
|
+
self.cache[key] = (value, datetime.now())
|
|
151
|
+
# Move to end (most recently used)
|
|
152
|
+
self.cache.move_to_end(key)
|
|
153
|
+
|
|
154
|
+
# Remove oldest if over maxsize
|
|
155
|
+
while len(self.cache) > self.maxsize:
|
|
156
|
+
self.cache.popitem(last=False)
|
|
157
|
+
|
|
158
|
+
def clear(self) -> None:
|
|
159
|
+
"""Clear all cache entries"""
|
|
160
|
+
with self.lock:
|
|
161
|
+
self.cache.clear()
|
|
162
|
+
|
|
163
|
+
def keys(self) -> List[str]:
|
|
164
|
+
"""Get all cache keys"""
|
|
165
|
+
with self.lock:
|
|
166
|
+
return list(self.cache.keys())
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
class SkillValidator:
|
|
170
|
+
"""Validates skill names, metadata, and compatibility"""
|
|
171
|
+
|
|
172
|
+
def __init__(self, registry):
|
|
173
|
+
self.registry = registry
|
|
174
|
+
self.valid_skill_patterns = [
|
|
175
|
+
r"^moai-[a-z]+-[a-z-]+$", # Standard MoAI skills
|
|
176
|
+
r"^[a-z]+-[a-z-]+$", # Generic skills
|
|
177
|
+
]
|
|
178
|
+
|
|
179
|
+
def validate_skill_name(self, skill_name: str) -> bool:
|
|
180
|
+
"""Validate skill name format and existence"""
|
|
181
|
+
if not skill_name:
|
|
182
|
+
raise SkillValidationError("Skill name cannot be empty")
|
|
183
|
+
|
|
184
|
+
# Check against valid patterns
|
|
185
|
+
for pattern in self.valid_skill_patterns:
|
|
186
|
+
if re.match(pattern, skill_name):
|
|
187
|
+
break
|
|
188
|
+
else:
|
|
189
|
+
raise SkillValidationError(f"Invalid skill name format: {skill_name}")
|
|
190
|
+
|
|
191
|
+
# Check if skill exists in registry
|
|
192
|
+
if skill_name not in self.registry.skills:
|
|
193
|
+
raise SkillValidationError(f"Skill not found: {skill_name}")
|
|
194
|
+
|
|
195
|
+
return True
|
|
196
|
+
|
|
197
|
+
def validate_effort_parameter(self, skill_name: str, effort: int) -> bool:
|
|
198
|
+
"""Validate effort parameter against skill requirements"""
|
|
199
|
+
metadata = self.registry.get_skill_metadata(skill_name)
|
|
200
|
+
if not metadata:
|
|
201
|
+
return False
|
|
202
|
+
|
|
203
|
+
# Validate effort range
|
|
204
|
+
if effort not in [1, 3, 5]:
|
|
205
|
+
raise SkillValidationError(f"Invalid effort level: {effort}. Must be 1, 3, or 5")
|
|
206
|
+
|
|
207
|
+
# Check if skill supports the requested effort level
|
|
208
|
+
supported_efforts = metadata.get("supported_efforts", [1, 3, 5])
|
|
209
|
+
if effort not in supported_efforts:
|
|
210
|
+
raise SkillValidationError(
|
|
211
|
+
f"Effort {effort} not supported by skill {skill_name}. Supported efforts: {supported_efforts}"
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
return True
|
|
215
|
+
|
|
216
|
+
def validate_dependencies(self, skill_name: str, loaded_skills: List[str]) -> bool:
|
|
217
|
+
"""Validate skill dependencies against currently loaded skills"""
|
|
218
|
+
metadata = self.registry.get_skill_metadata(skill_name)
|
|
219
|
+
if not metadata:
|
|
220
|
+
return False
|
|
221
|
+
|
|
222
|
+
required_skills = metadata.get("requires", [])
|
|
223
|
+
missing_skills = [skill for skill in required_skills if skill not in loaded_skills]
|
|
224
|
+
|
|
225
|
+
if missing_skills:
|
|
226
|
+
raise DependencyError(f"Skill {skill_name} requires missing dependencies: {missing_skills}")
|
|
227
|
+
|
|
228
|
+
return True
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
class SkillRegistry:
|
|
232
|
+
"""Central registry for all available skills with metadata"""
|
|
233
|
+
|
|
234
|
+
def __init__(self):
|
|
235
|
+
self.skills: Dict[str, Dict[str, Any]] = {}
|
|
236
|
+
self.dependencies: Dict[str, List[str]] = {}
|
|
237
|
+
self.compatibility_matrix: Dict[str, Dict[str, bool]] = {}
|
|
238
|
+
self._initialized = False
|
|
239
|
+
|
|
240
|
+
def initialize_from_filesystem(self, skill_paths: List[str]) -> None:
|
|
241
|
+
"""Initialize registry by scanning filesystem for skills"""
|
|
242
|
+
if self._initialized:
|
|
243
|
+
return
|
|
244
|
+
|
|
245
|
+
for skill_path in skill_paths:
|
|
246
|
+
if os.path.exists(skill_path):
|
|
247
|
+
self._scan_directory(skill_path)
|
|
248
|
+
|
|
249
|
+
self._initialized = True
|
|
250
|
+
logger.info(f"Initialized registry with {len(self.skills)} skills")
|
|
251
|
+
|
|
252
|
+
def _scan_directory(self, directory: str) -> None:
|
|
253
|
+
"""Scan directory for skill files"""
|
|
254
|
+
for root, dirs, files in os.walk(directory):
|
|
255
|
+
for file in files:
|
|
256
|
+
if file == "SKILL.md":
|
|
257
|
+
skill_path = os.path.join(root, file)
|
|
258
|
+
skill_name = self._extract_skill_name(skill_path)
|
|
259
|
+
if skill_name:
|
|
260
|
+
try:
|
|
261
|
+
metadata = self._parse_skill_metadata(skill_path)
|
|
262
|
+
self.register_skill(skill_name, metadata)
|
|
263
|
+
except Exception as e:
|
|
264
|
+
logger.warning(f"Failed to parse skill {skill_path}: {e}")
|
|
265
|
+
|
|
266
|
+
def _extract_skill_name(self, skill_path: str) -> Optional[str]:
|
|
267
|
+
"""Extract skill name from file path"""
|
|
268
|
+
# Extract from path like: .claude/skills/moai-foundation-claude/SKILL.md
|
|
269
|
+
parts = skill_path.split(os.sep)
|
|
270
|
+
if "skills" in parts:
|
|
271
|
+
skills_idx = parts.index("skills")
|
|
272
|
+
if skills_idx + 1 < len(parts):
|
|
273
|
+
return parts[skills_idx + 1]
|
|
274
|
+
return None
|
|
275
|
+
|
|
276
|
+
def _parse_skill_metadata(self, skill_path: str) -> Dict[str, Any]:
|
|
277
|
+
"""Parse skill metadata from SKILL.md file"""
|
|
278
|
+
with open(skill_path, "r", encoding="utf-8") as f:
|
|
279
|
+
content = f.read()
|
|
280
|
+
|
|
281
|
+
# Parse YAML frontmatter
|
|
282
|
+
if content.startswith("---"):
|
|
283
|
+
try:
|
|
284
|
+
_, frontmatter, content = content.split("---", 2)
|
|
285
|
+
metadata = yaml.safe_load(frontmatter.strip())
|
|
286
|
+
return metadata or {}
|
|
287
|
+
except Exception as e:
|
|
288
|
+
logger.warning(f"Failed to parse frontmatter for {skill_path}: {e}")
|
|
289
|
+
|
|
290
|
+
return {}
|
|
291
|
+
|
|
292
|
+
def register_skill(self, skill_name: str, metadata: Dict[str, Any]) -> None:
|
|
293
|
+
"""Register a skill with its metadata"""
|
|
294
|
+
self.skills[skill_name] = metadata
|
|
295
|
+
|
|
296
|
+
# Extract dependencies
|
|
297
|
+
self.dependencies[skill_name] = metadata.get("requires", [])
|
|
298
|
+
|
|
299
|
+
# Initialize compatibility matrix
|
|
300
|
+
if skill_name not in self.compatibility_matrix:
|
|
301
|
+
self.compatibility_matrix[skill_name] = {}
|
|
302
|
+
|
|
303
|
+
def get_skill_metadata(self, skill_name: str) -> Optional[Dict[str, Any]]:
|
|
304
|
+
"""Get skill metadata including dependencies"""
|
|
305
|
+
return self.skills.get(skill_name)
|
|
306
|
+
|
|
307
|
+
def check_compatibility(self, skill_name: str, other_skills: List[str]) -> bool:
|
|
308
|
+
"""Check if skill is compatible with currently loaded skills"""
|
|
309
|
+
skill_compatibility = self.compatibility_matrix.get(skill_name, {})
|
|
310
|
+
|
|
311
|
+
for other_skill in other_skills:
|
|
312
|
+
if not skill_compatibility.get(other_skill, True):
|
|
313
|
+
return False
|
|
314
|
+
|
|
315
|
+
return True
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
class SkillLoader:
|
|
319
|
+
"""Main skill loading implementation with caching and error handling"""
|
|
320
|
+
|
|
321
|
+
def __init__(self, skill_paths: Optional[List[str]] = None):
|
|
322
|
+
self.registry = SkillRegistry()
|
|
323
|
+
self.validator = SkillValidator(self.registry)
|
|
324
|
+
self.cache = LRUCache(maxsize=100, ttl=3600) # 1 hour TTL
|
|
325
|
+
self.loading_stack: List[str] = [] # Track loading order to prevent circular dependencies
|
|
326
|
+
|
|
327
|
+
# Initialize registry
|
|
328
|
+
default_paths = [
|
|
329
|
+
".claude/skills",
|
|
330
|
+
"src/moai_adk/.claude/skills",
|
|
331
|
+
os.path.expanduser("~/.claude/skills"),
|
|
332
|
+
]
|
|
333
|
+
self.registry.initialize_from_filesystem(skill_paths or default_paths)
|
|
334
|
+
|
|
335
|
+
def load_skill(self, skill_name: str, effort: Optional[int] = None, force_reload: bool = False) -> SkillData:
|
|
336
|
+
"""Primary skill loading function with comprehensive validation"""
|
|
337
|
+
try:
|
|
338
|
+
# Check cache first (unless force_reload)
|
|
339
|
+
if not force_reload:
|
|
340
|
+
cached_skill = self.cache.get(skill_name)
|
|
341
|
+
if cached_skill:
|
|
342
|
+
return self._validate_cached_skill(cached_skill, effort)
|
|
343
|
+
|
|
344
|
+
# Prevent circular dependencies
|
|
345
|
+
if skill_name in self.loading_stack:
|
|
346
|
+
raise SkillLoadingError(f"Circular dependency detected: {skill_name}")
|
|
347
|
+
|
|
348
|
+
self.loading_stack.append(skill_name)
|
|
349
|
+
|
|
350
|
+
try:
|
|
351
|
+
# Validate skill name and existence
|
|
352
|
+
self.validator.validate_skill_name(skill_name)
|
|
353
|
+
|
|
354
|
+
# Validate effort parameter if provided
|
|
355
|
+
if effort is not None:
|
|
356
|
+
self.validator.validate_effort_parameter(skill_name, effort)
|
|
357
|
+
|
|
358
|
+
# Check dependencies
|
|
359
|
+
loaded_skills = list(self.cache.keys())
|
|
360
|
+
self.validator.validate_dependencies(skill_name, loaded_skills)
|
|
361
|
+
|
|
362
|
+
# Load skill data from file system
|
|
363
|
+
skill_data = self._load_skill_from_filesystem(skill_name)
|
|
364
|
+
|
|
365
|
+
# Apply effort parameter customization
|
|
366
|
+
if effort is not None:
|
|
367
|
+
skill_data = self._apply_effort_parameter(skill_data, effort)
|
|
368
|
+
|
|
369
|
+
# Cache the loaded skill
|
|
370
|
+
self.cache.set(skill_name, skill_data)
|
|
371
|
+
|
|
372
|
+
logger.info(f"Successfully loaded skill: {skill_name}")
|
|
373
|
+
return skill_data
|
|
374
|
+
|
|
375
|
+
finally:
|
|
376
|
+
self.loading_stack.pop()
|
|
377
|
+
|
|
378
|
+
except SkillLoadingError as e:
|
|
379
|
+
logger.error(f"Failed to load skill {skill_name}: {e}")
|
|
380
|
+
return self._get_fallback_skill(skill_name, effort)
|
|
381
|
+
|
|
382
|
+
def _validate_cached_skill(self, cached_skill: SkillData, effort: Optional[int] = None) -> SkillData:
|
|
383
|
+
"""Validate cached skill against current effort parameter"""
|
|
384
|
+
if effort is not None and not cached_skill.supports_effort(effort):
|
|
385
|
+
logger.warning(f"Cached skill {cached_skill.name} doesn't support effort {effort}, reloading")
|
|
386
|
+
return self.load_skill(cached_skill.name, effort, force_reload=True)
|
|
387
|
+
|
|
388
|
+
return cached_skill
|
|
389
|
+
|
|
390
|
+
def _load_skill_from_filesystem(self, skill_name: str) -> SkillData:
|
|
391
|
+
"""Load skill data from the file system"""
|
|
392
|
+
skill_path = self._get_skill_path(skill_name)
|
|
393
|
+
|
|
394
|
+
if not os.path.exists(skill_path):
|
|
395
|
+
raise SkillNotFoundError(f"Skill file not found: {skill_path}")
|
|
396
|
+
|
|
397
|
+
try:
|
|
398
|
+
with open(skill_path, "r", encoding="utf-8") as f:
|
|
399
|
+
content = f.read()
|
|
400
|
+
|
|
401
|
+
# Parse frontmatter and content
|
|
402
|
+
frontmatter, content = self._parse_skill_file(content)
|
|
403
|
+
|
|
404
|
+
return SkillData(
|
|
405
|
+
name=skill_name,
|
|
406
|
+
frontmatter=frontmatter,
|
|
407
|
+
content=content,
|
|
408
|
+
loaded_at=datetime.now(),
|
|
409
|
+
)
|
|
410
|
+
|
|
411
|
+
except Exception as e:
|
|
412
|
+
raise SkillLoadingError(f"Failed to parse skill file {skill_path}: {e}")
|
|
413
|
+
|
|
414
|
+
def _get_skill_path(self, skill_name: str) -> str:
|
|
415
|
+
"""Get the file system path for a skill"""
|
|
416
|
+
possible_paths = [
|
|
417
|
+
f".claude/skills/{skill_name}/SKILL.md",
|
|
418
|
+
f"src/moai_adk/.claude/skills/{skill_name}/SKILL.md",
|
|
419
|
+
f"{os.path.expanduser('~')}/.claude/skills/{skill_name}/SKILL.md",
|
|
420
|
+
]
|
|
421
|
+
|
|
422
|
+
for path in possible_paths:
|
|
423
|
+
if os.path.exists(path):
|
|
424
|
+
return path
|
|
425
|
+
|
|
426
|
+
# Return the first path even if it doesn't exist (for error messages)
|
|
427
|
+
return possible_paths[0]
|
|
428
|
+
|
|
429
|
+
def _parse_skill_file(self, content: str) -> tuple[Dict[str, Any], str]:
|
|
430
|
+
"""Parse skill file into frontmatter and content"""
|
|
431
|
+
if content.startswith("---"):
|
|
432
|
+
try:
|
|
433
|
+
_, frontmatter, content = content.split("---", 2)
|
|
434
|
+
frontmatter_data = yaml.safe_load(frontmatter.strip())
|
|
435
|
+
return frontmatter_data or {}, content.strip()
|
|
436
|
+
except Exception as e:
|
|
437
|
+
logger.warning(f"Failed to parse frontmatter: {e}")
|
|
438
|
+
|
|
439
|
+
return {}, content
|
|
440
|
+
|
|
441
|
+
def _apply_effort_parameter(self, skill_data: SkillData, effort: int) -> SkillData:
|
|
442
|
+
"""Apply effort parameter customization to skill data"""
|
|
443
|
+
# Customize skill behavior based on effort level
|
|
444
|
+
if effort == 1:
|
|
445
|
+
# Minimal effort: basic functionality only
|
|
446
|
+
skill_data.apply_filter("basic")
|
|
447
|
+
elif effort == 3:
|
|
448
|
+
# Standard effort: full functionality with moderate depth
|
|
449
|
+
skill_data.apply_filter("standard")
|
|
450
|
+
elif effort == 5:
|
|
451
|
+
# Deep effort: comprehensive functionality with maximum depth
|
|
452
|
+
skill_data.apply_filter("comprehensive")
|
|
453
|
+
|
|
454
|
+
return skill_data
|
|
455
|
+
|
|
456
|
+
def _get_fallback_skill(self, skill_name: str, effort: Optional[int] = None) -> SkillData:
|
|
457
|
+
"""Get fallback skill when loading fails"""
|
|
458
|
+
fallback_map = {
|
|
459
|
+
"moai-foundation-core": "moai-toolkit-essentials",
|
|
460
|
+
"moai-lang-unified": "moai-lang-python",
|
|
461
|
+
"moai-domain-backend": "expert-backend",
|
|
462
|
+
"moai-domain-frontend": "expert-frontend",
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
fallback_name = fallback_map.get(skill_name, "moai-toolkit-essentials")
|
|
466
|
+
|
|
467
|
+
logger.warning(f"Using fallback skill {fallback_name} for {skill_name}")
|
|
468
|
+
|
|
469
|
+
try:
|
|
470
|
+
return self.load_skill(fallback_name, effort, force_reload=True)
|
|
471
|
+
except Exception:
|
|
472
|
+
# Ultimate fallback
|
|
473
|
+
return SkillData.get_empty_skill(skill_name)
|
|
474
|
+
|
|
475
|
+
def get_cache_stats(self) -> Dict[str, Any]:
|
|
476
|
+
"""Get cache statistics for debugging"""
|
|
477
|
+
return {
|
|
478
|
+
"cached_skills": list(self.cache.keys()),
|
|
479
|
+
"cache_size": len(self.cache.keys()),
|
|
480
|
+
"registry_skills": len(self.registry.skills),
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
# Global skill loader instance
|
|
485
|
+
SKILL_LOADER = SkillLoader()
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
def load_skill(skill_name: str, effort: Optional[int] = None, force_reload: bool = False) -> SkillData:
|
|
489
|
+
"""Public API for loading skills"""
|
|
490
|
+
return SKILL_LOADER.load_skill(skill_name, effort, force_reload)
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
def get_skill_cache_stats() -> Dict[str, Any]:
|
|
494
|
+
"""Get skill loading system statistics"""
|
|
495
|
+
return SKILL_LOADER.get_cache_stats()
|
|
496
|
+
|
|
497
|
+
|
|
498
|
+
def clear_skill_cache() -> None:
|
|
499
|
+
"""Clear all cached skills"""
|
|
500
|
+
SKILL_LOADER.cache.clear()
|
|
501
|
+
logger.info("Skill cache cleared")
|
|
502
|
+
|
|
503
|
+
|
|
504
|
+
# Enhanced Task function with automatic skill loading
|
|
505
|
+
def detect_required_skills(subagent_type: str, prompt: str) -> List[str]:
|
|
506
|
+
"""Auto-detect required skills based on task parameters"""
|
|
507
|
+
skill_mapping = {
|
|
508
|
+
"expert-backend": ["moai-lang-unified", "moai-domain-backend"],
|
|
509
|
+
"expert-frontend": ["moai-lang-unified", "moai-domain-frontend"],
|
|
510
|
+
"manager-tdd": ["moai-workflow-testing", "moai-foundation-quality"],
|
|
511
|
+
"manager-spec": ["moai-foundation-claude", "moai-workflow-docs"],
|
|
512
|
+
"security-expert": ["moai-quality-security", "moai-foundation-context"],
|
|
513
|
+
"expert-devops": ["moai-system-universal", "moai-platform-baas"],
|
|
514
|
+
"builder-agent": ["moai-foundation-claude"],
|
|
515
|
+
"builder-skill": ["moai-foundation-claude"],
|
|
516
|
+
"mcp-context7": ["moai-connector-mcp"],
|
|
517
|
+
"mcp-sequential-thinking": ["moai-connector-mcp"],
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
# Base skills for all tasks
|
|
521
|
+
base_skills = ["moai-foundation-claude"]
|
|
522
|
+
|
|
523
|
+
# Add specific skills based on subagent_type
|
|
524
|
+
specific_skills = skill_mapping.get(subagent_type, [])
|
|
525
|
+
|
|
526
|
+
# Add skills detected from prompt content
|
|
527
|
+
prompt_skills = _detect_skills_from_prompt(prompt)
|
|
528
|
+
|
|
529
|
+
# Remove duplicates and return
|
|
530
|
+
all_skills = list(set(base_skills + specific_skills + prompt_skills))
|
|
531
|
+
|
|
532
|
+
logger.debug(f"Detected required skills for {subagent_type}: {all_skills}")
|
|
533
|
+
return all_skills
|
|
534
|
+
|
|
535
|
+
|
|
536
|
+
def _detect_skills_from_prompt(prompt: str) -> List[str]:
|
|
537
|
+
"""Detect skills needed based on prompt content"""
|
|
538
|
+
prompt_lower = prompt.lower()
|
|
539
|
+
detected_skills = []
|
|
540
|
+
|
|
541
|
+
# Language detection
|
|
542
|
+
if any(lang in prompt_lower for lang in ["python", "fastapi", "django"]):
|
|
543
|
+
detected_skills.append("moai-lang-unified")
|
|
544
|
+
|
|
545
|
+
if any(lang in prompt_lower for lang in ["typescript", "react", "next.js", "frontend"]):
|
|
546
|
+
detected_skills.append("moai-lang-unified")
|
|
547
|
+
|
|
548
|
+
# Domain detection
|
|
549
|
+
if any(domain in prompt_lower for domain in ["api", "backend", "server"]):
|
|
550
|
+
detected_skills.append("moai-domain-backend")
|
|
551
|
+
|
|
552
|
+
if any(domain in prompt_lower for domain in ["ui", "frontend", "component"]):
|
|
553
|
+
detected_skills.append("moai-domain-frontend")
|
|
554
|
+
|
|
555
|
+
# Security detection
|
|
556
|
+
if any(sec in prompt_lower for sec in ["security", "auth", "vulnerability"]):
|
|
557
|
+
detected_skills.append("moai-quality-security")
|
|
558
|
+
|
|
559
|
+
return detected_skills
|
|
560
|
+
|
|
561
|
+
|
|
562
|
+
if __name__ == "__main__":
|
|
563
|
+
# Test skill loading system
|
|
564
|
+
print("Testing MoAI-ADK Skill Loading System")
|
|
565
|
+
print("=" * 50)
|
|
566
|
+
|
|
567
|
+
# Load a skill
|
|
568
|
+
try:
|
|
569
|
+
skill = load_skill("moai-foundation-claude", effort=3)
|
|
570
|
+
print(f"Loaded skill: {skill.name}")
|
|
571
|
+
print(f"Loaded at: {skill.loaded_at}")
|
|
572
|
+
print(f"Content length: {len(skill.content)} characters")
|
|
573
|
+
print(f"Applied filters: {skill.applied_filters}")
|
|
574
|
+
except Exception as e:
|
|
575
|
+
print(f"Error loading skill: {e}")
|
|
576
|
+
|
|
577
|
+
# Show cache stats
|
|
578
|
+
stats = get_skill_cache_stats()
|
|
579
|
+
print(f"\nCache stats: {stats}")
|