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
|
@@ -1,416 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Project metadata utilities
|
|
3
|
-
|
|
4
|
-
Project information inquiry (language, Git, SPEC progress, etc.)
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import json
|
|
8
|
-
import signal
|
|
9
|
-
import subprocess
|
|
10
|
-
from contextlib import contextmanager
|
|
11
|
-
from pathlib import Path
|
|
12
|
-
from typing import Any
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class TimeoutError(Exception):
|
|
16
|
-
"""Signal-based timeout exception"""
|
|
17
|
-
pass
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
@contextmanager
|
|
21
|
-
def timeout_handler(seconds: int):
|
|
22
|
-
"""Hard timeout using SIGALRM (works on Unix systems including macOS)
|
|
23
|
-
|
|
24
|
-
This uses kernel-level signal to interrupt ANY blocking operation,
|
|
25
|
-
even if subprocess.run() timeout fails on macOS.
|
|
26
|
-
|
|
27
|
-
Args:
|
|
28
|
-
seconds: Timeout duration in seconds
|
|
29
|
-
|
|
30
|
-
Raises:
|
|
31
|
-
TimeoutError: If operation exceeds timeout
|
|
32
|
-
"""
|
|
33
|
-
def _handle_timeout(signum, frame):
|
|
34
|
-
raise TimeoutError(f"Operation timed out after {seconds} seconds")
|
|
35
|
-
|
|
36
|
-
# Set the signal handler
|
|
37
|
-
old_handler = signal.signal(signal.SIGALRM, _handle_timeout)
|
|
38
|
-
signal.alarm(seconds)
|
|
39
|
-
try:
|
|
40
|
-
yield
|
|
41
|
-
finally:
|
|
42
|
-
signal.alarm(0) # Disable alarm
|
|
43
|
-
signal.signal(signal.SIGALRM, old_handler)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
def detect_language(cwd: str) -> str:
|
|
47
|
-
"""Detect project language (supports 20 items languages)
|
|
48
|
-
|
|
49
|
-
Browse the File system to detect your project's main development language.
|
|
50
|
-
First, check configuration files such as pyproject.toml and tsconfig.json.
|
|
51
|
-
Apply TypeScript first principles (if tsconfig.json exists).
|
|
52
|
-
|
|
53
|
-
Args:
|
|
54
|
-
cwd: Project root directory path (both absolute and relative paths are possible)
|
|
55
|
-
|
|
56
|
-
Returns:
|
|
57
|
-
Detected language name (lowercase). If detection fails, "Unknown Language" is returned.
|
|
58
|
-
Supported languages: python, typescript, javascript, java, go, rust,
|
|
59
|
-
dart, swift, kotlin, php, ruby, elixir, scala,
|
|
60
|
-
clojure, cpp, c, csharp, haskell, shell, lua
|
|
61
|
-
|
|
62
|
-
Examples:
|
|
63
|
-
>>> detect_language("/path/to/python/project")
|
|
64
|
-
'python'
|
|
65
|
-
>>> detect_language("/path/to/typescript/project")
|
|
66
|
-
'typescript'
|
|
67
|
-
>>> detect_language("/path/to/unknown/project")
|
|
68
|
-
'Unknown Language'
|
|
69
|
-
|
|
70
|
-
TDD History:
|
|
71
|
-
- RED: Write a 21 items language detection test (20 items language + 1 items unknown)
|
|
72
|
-
- GREEN: 20 items language + unknown implementation, all tests passed
|
|
73
|
-
- REFACTOR: Optimize file inspection order, apply TypeScript priority principle
|
|
74
|
-
"""
|
|
75
|
-
cwd_path = Path(cwd)
|
|
76
|
-
|
|
77
|
-
# Language detection mapping
|
|
78
|
-
language_files = {
|
|
79
|
-
"pyproject.toml": "python",
|
|
80
|
-
"tsconfig.json": "typescript",
|
|
81
|
-
"package.json": "javascript",
|
|
82
|
-
"pom.xml": "java",
|
|
83
|
-
"go.mod": "go",
|
|
84
|
-
"Cargo.toml": "rust",
|
|
85
|
-
"pubspec.yaml": "dart",
|
|
86
|
-
"Package.swift": "swift",
|
|
87
|
-
"build.gradle.kts": "kotlin",
|
|
88
|
-
"composer.json": "php",
|
|
89
|
-
"Gemfile": "ruby",
|
|
90
|
-
"mix.exs": "elixir",
|
|
91
|
-
"build.sbt": "scala",
|
|
92
|
-
"project.clj": "clojure",
|
|
93
|
-
"CMakeLists.txt": "cpp",
|
|
94
|
-
"Makefile": "c",
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
# Check standard language files
|
|
98
|
-
for file_name, language in language_files.items():
|
|
99
|
-
if (cwd_path / file_name).exists():
|
|
100
|
-
# Special handling for package.json - prefer typescript if tsconfig exists
|
|
101
|
-
if file_name == "package.json" and (cwd_path / "tsconfig.json").exists():
|
|
102
|
-
return "typescript"
|
|
103
|
-
return language
|
|
104
|
-
|
|
105
|
-
# Check for C# project files (*.csproj)
|
|
106
|
-
if any(cwd_path.glob("*.csproj")):
|
|
107
|
-
return "csharp"
|
|
108
|
-
|
|
109
|
-
# Check for Haskell project files (*.cabal)
|
|
110
|
-
if any(cwd_path.glob("*.cabal")):
|
|
111
|
-
return "haskell"
|
|
112
|
-
|
|
113
|
-
# Check for Shell scripts (*.sh)
|
|
114
|
-
if any(cwd_path.glob("*.sh")):
|
|
115
|
-
return "shell"
|
|
116
|
-
|
|
117
|
-
# Check for Lua files (*.lua)
|
|
118
|
-
if any(cwd_path.glob("*.lua")):
|
|
119
|
-
return "lua"
|
|
120
|
-
|
|
121
|
-
return "Unknown Language"
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
def _run_git_command(args: list[str], cwd: str, timeout: int = 2) -> str:
|
|
125
|
-
"""Git command execution with HARD timeout protection
|
|
126
|
-
|
|
127
|
-
Safely execute Git commands and return output.
|
|
128
|
-
Uses SIGALRM (kernel-level interrupt) to handle macOS subprocess timeout bug.
|
|
129
|
-
Eliminates code duplication and provides consistent error handling.
|
|
130
|
-
|
|
131
|
-
Args:
|
|
132
|
-
args: Git command argument list (git adds automatically)
|
|
133
|
-
cwd: Execution directory path
|
|
134
|
-
timeout: Timeout (seconds, default 2 seconds)
|
|
135
|
-
|
|
136
|
-
Returns:
|
|
137
|
-
Git command output (stdout, removing leading and trailing spaces)
|
|
138
|
-
|
|
139
|
-
Raises:
|
|
140
|
-
subprocess.TimeoutExpired: Timeout exceeded (via TimeoutError)
|
|
141
|
-
subprocess.CalledProcessError: Git command failed
|
|
142
|
-
|
|
143
|
-
Examples:
|
|
144
|
-
>>> _run_git_command(["branch", "--show-current"], ".")
|
|
145
|
-
'main'
|
|
146
|
-
|
|
147
|
-
TDD History:
|
|
148
|
-
- RED: Git command hang scenario test
|
|
149
|
-
- GREEN: SIGALRM-based timeout implementation
|
|
150
|
-
- REFACTOR: Exception conversion to subprocess.TimeoutExpired
|
|
151
|
-
"""
|
|
152
|
-
try:
|
|
153
|
-
with timeout_handler(timeout):
|
|
154
|
-
result = subprocess.run(
|
|
155
|
-
["git"] + args,
|
|
156
|
-
cwd=cwd,
|
|
157
|
-
capture_output=True,
|
|
158
|
-
text=True,
|
|
159
|
-
check=False, # Don't raise on non-zero exit - we'll check manually
|
|
160
|
-
)
|
|
161
|
-
|
|
162
|
-
# Check exit code manually
|
|
163
|
-
if result.returncode != 0:
|
|
164
|
-
raise subprocess.CalledProcessError(
|
|
165
|
-
result.returncode, ["git"] + args, result.stdout, result.stderr
|
|
166
|
-
)
|
|
167
|
-
|
|
168
|
-
return result.stdout.strip()
|
|
169
|
-
|
|
170
|
-
except TimeoutError:
|
|
171
|
-
# Convert to subprocess.TimeoutExpired for consistent error handling
|
|
172
|
-
raise subprocess.TimeoutExpired(["git"] + args, timeout)
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
def get_git_info(cwd: str) -> dict[str, Any]:
|
|
176
|
-
"""Gather Git repository information
|
|
177
|
-
|
|
178
|
-
View the current status of a Git repository.
|
|
179
|
-
Returns the branch name, commit hash, number of changes, and last commit message.
|
|
180
|
-
If it is not a Git repository, it returns an empty dictionary.
|
|
181
|
-
|
|
182
|
-
Args:
|
|
183
|
-
cwd: Project root directory path
|
|
184
|
-
|
|
185
|
-
Returns:
|
|
186
|
-
Git information dictionary. Includes the following keys:
|
|
187
|
-
- branch: Current branch name (str)
|
|
188
|
-
- commit: Current commit hash (str, full hash)
|
|
189
|
-
- changes: Number of changed files (int, staged + unstaged)
|
|
190
|
-
- last_commit: Last commit message (str, subject only)
|
|
191
|
-
|
|
192
|
-
Empty dictionary {} if it is not a Git repository or the query fails.
|
|
193
|
-
|
|
194
|
-
Examples:
|
|
195
|
-
>>> get_git_info("/path/to/git/repo")
|
|
196
|
-
{'branch': 'main', 'commit': 'abc123...', 'changes': 3, 'last_commit': 'Fix bug'}
|
|
197
|
-
>>> get_git_info("/path/to/non-git")
|
|
198
|
-
{}
|
|
199
|
-
|
|
200
|
-
Notes:
|
|
201
|
-
- Timeout: 2 seconds for each Git command
|
|
202
|
-
- Security: Safe execution with subprocess.run(shell=False)
|
|
203
|
-
- Error handling: Returns an empty dictionary in case of all exceptions
|
|
204
|
-
- Commit message limited to 50 characters for display purposes
|
|
205
|
-
|
|
206
|
-
TDD History:
|
|
207
|
-
- RED: 3 items scenario test (Git repo, non-Git, error)
|
|
208
|
-
- GREEN: Implementation of subprocess-based Git command execution
|
|
209
|
-
- REFACTOR: Add timeout (2 seconds), strengthen exception handling, remove duplicates with helper function
|
|
210
|
-
- UPDATE: Added last_commit message field for SessionStart display
|
|
211
|
-
"""
|
|
212
|
-
try:
|
|
213
|
-
# Check if it's a git repository
|
|
214
|
-
_run_git_command(["rev-parse", "--git-dir"], cwd)
|
|
215
|
-
|
|
216
|
-
# Get branch name, commit hash, and changes
|
|
217
|
-
branch = _run_git_command(["branch", "--show-current"], cwd)
|
|
218
|
-
commit = _run_git_command(["rev-parse", "HEAD"], cwd)
|
|
219
|
-
status_output = _run_git_command(["status", "--short"], cwd)
|
|
220
|
-
changes = len([line for line in status_output.splitlines() if line])
|
|
221
|
-
|
|
222
|
-
# Get last commit message (subject only, limited to 50 chars)
|
|
223
|
-
last_commit = _run_git_command(["log", "-1", "--format=%s"], cwd)
|
|
224
|
-
if len(last_commit) > 50:
|
|
225
|
-
last_commit = last_commit[:47] + "..."
|
|
226
|
-
|
|
227
|
-
return {
|
|
228
|
-
"branch": branch,
|
|
229
|
-
"commit": commit,
|
|
230
|
-
"changes": changes,
|
|
231
|
-
"last_commit": last_commit,
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
except (subprocess.TimeoutExpired, subprocess.CalledProcessError, FileNotFoundError):
|
|
235
|
-
return {}
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
def count_specs(cwd: str) -> dict[str, int]:
|
|
239
|
-
"""SPEC File count and progress calculation
|
|
240
|
-
|
|
241
|
-
Browse the .moai/specs/ directory to find the number of SPEC Files and
|
|
242
|
-
Counts the number of SPECs with status: completed.
|
|
243
|
-
|
|
244
|
-
Args:
|
|
245
|
-
cwd: Project root directory path
|
|
246
|
-
|
|
247
|
-
Returns:
|
|
248
|
-
SPEC progress dictionary. Includes the following keys:
|
|
249
|
-
- completed: Number of completed SPECs (int)
|
|
250
|
-
- total: total number of SPECs (int)
|
|
251
|
-
- percentage: completion percentage (int, 0~100)
|
|
252
|
-
|
|
253
|
-
All 0 if .moai/specs/ directory does not exist
|
|
254
|
-
|
|
255
|
-
Examples:
|
|
256
|
-
>>> count_specs("/path/to/project")
|
|
257
|
-
{'completed': 2, 'total': 5, 'percentage': 40}
|
|
258
|
-
>>> count_specs("/path/to/no-specs")
|
|
259
|
-
{'completed': 0, 'total': 0, 'percentage': 0}
|
|
260
|
-
|
|
261
|
-
Notes:
|
|
262
|
-
- SPEC File Location: .moai/specs/SPEC-{ID}/spec.md
|
|
263
|
-
- Completion condition: Include “status: completed” in YAML front matter
|
|
264
|
-
- If parsing fails, the SPEC is considered incomplete.
|
|
265
|
-
|
|
266
|
-
TDD History:
|
|
267
|
-
- RED: 5 items scenario test (0/0, 2/5, 5/5, no directory, parsing error)
|
|
268
|
-
- GREEN: SPEC search with Path.iterdir(), YAML parsing implementation
|
|
269
|
-
- REFACTOR: Strengthened exception handling, improved percentage calculation safety
|
|
270
|
-
"""
|
|
271
|
-
specs_dir = Path(cwd) / ".moai" / "specs"
|
|
272
|
-
|
|
273
|
-
if not specs_dir.exists():
|
|
274
|
-
return {"completed": 0, "total": 0, "percentage": 0}
|
|
275
|
-
|
|
276
|
-
completed = 0
|
|
277
|
-
total = 0
|
|
278
|
-
|
|
279
|
-
for spec_dir in specs_dir.iterdir():
|
|
280
|
-
if not spec_dir.is_dir() or not spec_dir.name.startswith("SPEC-"):
|
|
281
|
-
continue
|
|
282
|
-
|
|
283
|
-
spec_file = spec_dir / "spec.md"
|
|
284
|
-
if not spec_file.exists():
|
|
285
|
-
continue
|
|
286
|
-
|
|
287
|
-
total += 1
|
|
288
|
-
|
|
289
|
-
# Parse YAML front matter
|
|
290
|
-
try:
|
|
291
|
-
content = spec_file.read_text()
|
|
292
|
-
if content.startswith("---"):
|
|
293
|
-
yaml_end = content.find("---", 3)
|
|
294
|
-
if yaml_end > 0:
|
|
295
|
-
yaml_content = content[3:yaml_end]
|
|
296
|
-
if "status: completed" in yaml_content:
|
|
297
|
-
completed += 1
|
|
298
|
-
except (OSError, UnicodeDecodeError):
|
|
299
|
-
# File read failure or encoding error - considered incomplete
|
|
300
|
-
pass
|
|
301
|
-
|
|
302
|
-
percentage = int(completed / total * 100) if total > 0 else 0
|
|
303
|
-
|
|
304
|
-
return {
|
|
305
|
-
"completed": completed,
|
|
306
|
-
"total": total,
|
|
307
|
-
"percentage": percentage,
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
def get_project_language(cwd: str) -> str:
|
|
312
|
-
"""Determine the primary project language (prefers config.json).
|
|
313
|
-
|
|
314
|
-
Args:
|
|
315
|
-
cwd: Project root directory.
|
|
316
|
-
|
|
317
|
-
Returns:
|
|
318
|
-
Language string in lower-case.
|
|
319
|
-
|
|
320
|
-
Notes:
|
|
321
|
-
- Reads ``.moai/config.json`` first for a quick answer.
|
|
322
|
-
- Falls back to ``detect_language`` if configuration is missing.
|
|
323
|
-
"""
|
|
324
|
-
config_path = Path(cwd) / ".moai" / "config.json"
|
|
325
|
-
if config_path.exists():
|
|
326
|
-
try:
|
|
327
|
-
config = json.loads(config_path.read_text())
|
|
328
|
-
lang = config.get("language", "")
|
|
329
|
-
if lang:
|
|
330
|
-
return lang
|
|
331
|
-
except (OSError, json.JSONDecodeError):
|
|
332
|
-
# Fall back to detection on parse errors
|
|
333
|
-
pass
|
|
334
|
-
|
|
335
|
-
# Fall back to the original language detection routine
|
|
336
|
-
return detect_language(cwd)
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
def get_package_version_info() -> dict[str, Any]:
|
|
340
|
-
"""Check MoAI-ADK current and latest version from PyPI
|
|
341
|
-
|
|
342
|
-
Compares the installed version with the latest version available on PyPI.
|
|
343
|
-
Returns version information for SessionStart hook to display update recommendations.
|
|
344
|
-
|
|
345
|
-
Returns:
|
|
346
|
-
dict with keys:
|
|
347
|
-
- "current": Current installed version
|
|
348
|
-
- "latest": Latest version available on PyPI
|
|
349
|
-
- "update_available": Boolean indicating if update is available
|
|
350
|
-
- "upgrade_command": Recommended upgrade command (if update available)
|
|
351
|
-
|
|
352
|
-
Note:
|
|
353
|
-
- Has 1-second timeout to avoid blocking SessionStart
|
|
354
|
-
- Returns graceful fallback if PyPI check fails
|
|
355
|
-
- Handles version parsing gracefully
|
|
356
|
-
"""
|
|
357
|
-
from importlib.metadata import version, PackageNotFoundError
|
|
358
|
-
import urllib.request
|
|
359
|
-
import urllib.error
|
|
360
|
-
|
|
361
|
-
result = {
|
|
362
|
-
"current": "unknown",
|
|
363
|
-
"latest": "unknown",
|
|
364
|
-
"update_available": False,
|
|
365
|
-
"upgrade_command": ""
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
# Get current version
|
|
369
|
-
try:
|
|
370
|
-
result["current"] = version("moai-adk")
|
|
371
|
-
except PackageNotFoundError:
|
|
372
|
-
result["current"] = "dev"
|
|
373
|
-
return result
|
|
374
|
-
|
|
375
|
-
# Get latest version from PyPI (with 1-second timeout)
|
|
376
|
-
try:
|
|
377
|
-
with timeout_handler(1):
|
|
378
|
-
url = "https://pypi.org/pypi/moai-adk/json"
|
|
379
|
-
headers = {"Accept": "application/json"}
|
|
380
|
-
req = urllib.request.Request(url, headers=headers)
|
|
381
|
-
with urllib.request.urlopen(req, timeout=0.8) as response:
|
|
382
|
-
data = json.load(response)
|
|
383
|
-
result["latest"] = data.get("info", {}).get("version", "unknown")
|
|
384
|
-
except (urllib.error.URLError, TimeoutError, Exception):
|
|
385
|
-
# Network error or timeout - return with unknown latest version
|
|
386
|
-
return result
|
|
387
|
-
|
|
388
|
-
# Compare versions (simple comparison)
|
|
389
|
-
if result["current"] != "unknown" and result["latest"] != "unknown":
|
|
390
|
-
try:
|
|
391
|
-
# Parse versions for comparison
|
|
392
|
-
current_parts = [int(x) for x in result["current"].split(".")]
|
|
393
|
-
latest_parts = [int(x) for x in result["latest"].split(".")]
|
|
394
|
-
|
|
395
|
-
# Pad shorter version with zeros
|
|
396
|
-
max_len = max(len(current_parts), len(latest_parts))
|
|
397
|
-
current_parts.extend([0] * (max_len - len(current_parts)))
|
|
398
|
-
latest_parts.extend([0] * (max_len - len(latest_parts)))
|
|
399
|
-
|
|
400
|
-
if latest_parts > current_parts:
|
|
401
|
-
result["update_available"] = True
|
|
402
|
-
result["upgrade_command"] = f"uv pip install --upgrade moai-adk>={result['latest']}"
|
|
403
|
-
except (ValueError, AttributeError):
|
|
404
|
-
# Version parsing failed - skip comparison
|
|
405
|
-
pass
|
|
406
|
-
|
|
407
|
-
return result
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
__all__ = [
|
|
411
|
-
"detect_language",
|
|
412
|
-
"get_git_info",
|
|
413
|
-
"count_specs",
|
|
414
|
-
"get_project_language",
|
|
415
|
-
"get_package_version_info",
|
|
416
|
-
]
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# @CODE:HOOK-TAG-001 | SPEC: TBD | TEST: tests/hooks/test_tag_validation.py
|
|
3
|
-
"""TAG validation helpers for MoAI-ADK hooks
|
|
4
|
-
|
|
5
|
-
Fast checks used by PreToolUse/PostToolUse to nudge users when
|
|
6
|
-
new or modified files are missing required @TAG annotations.
|
|
7
|
-
|
|
8
|
-
Configurable rules with sensible defaults:
|
|
9
|
-
- Load patterns from .moai/tag-rules.json if present.
|
|
10
|
-
- Otherwise, apply default glob patterns (folder names are not hard-coded only).
|
|
11
|
-
|
|
12
|
-
Defaults (order matters; first match wins):
|
|
13
|
-
1) SPEC
|
|
14
|
-
- .moai/specs/**
|
|
15
|
-
- **/SPEC-*/spec.md
|
|
16
|
-
2) TEST
|
|
17
|
-
- **/*_test.py, **/test_*.py, **/*.test.* (ts,tsx,js,jsx,go,rs)
|
|
18
|
-
- **/*.spec.* (ts,tsx,js,jsx)
|
|
19
|
-
- tests/**
|
|
20
|
-
3) DOC
|
|
21
|
-
- docs/**/*.md, **/README.md, **/*.api.md
|
|
22
|
-
4) CODE
|
|
23
|
-
- Source extensions: .py,.ts,.tsx,.js,.jsx,.go,.rs,.java,.kt,.rb,.php,.c,.cpp,.cs,.swift,.scala
|
|
24
|
-
- Excluding TEST patterns
|
|
25
|
-
|
|
26
|
-
Notes:
|
|
27
|
-
- Best-effort: skip binary/large files and non-target paths
|
|
28
|
-
- Do not block execution; return a list of issues for messaging
|
|
29
|
-
"""
|
|
30
|
-
|
|
31
|
-
from __future__ import annotations
|
|
32
|
-
|
|
33
|
-
import fnmatch
|
|
34
|
-
import json
|
|
35
|
-
import subprocess
|
|
36
|
-
from dataclasses import dataclass
|
|
37
|
-
from pathlib import Path
|
|
38
|
-
from typing import Iterable, List, Optional
|
|
39
|
-
|
|
40
|
-
DEFAULT_CODE_EXTS = (
|
|
41
|
-
".py", ".ts", ".tsx", ".js", ".jsx", ".go", ".rs",
|
|
42
|
-
".java", ".kt", ".rb", ".php", ".c", ".cpp", ".cs",
|
|
43
|
-
".swift", ".scala"
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
@dataclass
|
|
48
|
-
class TagIssue:
|
|
49
|
-
path: str
|
|
50
|
-
expected: str # one of @SPEC, @TEST, @CODE, @DOC
|
|
51
|
-
reason: str
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
@dataclass
|
|
55
|
-
class Rule:
|
|
56
|
-
include: List[str]
|
|
57
|
-
expect: str # '@SPEC:' | '@TEST:' | '@CODE:' | '@DOC:'
|
|
58
|
-
exclude: List[str]
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def _load_rules(cwd: str) -> List[Rule]:
|
|
62
|
-
"""Load tag rules from .moai/tag-rules.json or return defaults.
|
|
63
|
-
|
|
64
|
-
Schema example:
|
|
65
|
-
{
|
|
66
|
-
"rules": [
|
|
67
|
-
{"include": ["**/*_test.py", "**/*.test.ts"], "expect": "@TEST:", "exclude": []},
|
|
68
|
-
{"include": ["docs/**/*.md", "**/README.md"], "expect": "@DOC:", "exclude": []}
|
|
69
|
-
]
|
|
70
|
-
}
|
|
71
|
-
"""
|
|
72
|
-
cfg = Path(cwd) / ".moai" / "tag-rules.json"
|
|
73
|
-
if cfg.exists():
|
|
74
|
-
try:
|
|
75
|
-
data = json.loads(cfg.read_text(encoding="utf-8"))
|
|
76
|
-
items = data.get("rules", [])
|
|
77
|
-
rules: List[Rule] = []
|
|
78
|
-
for it in items:
|
|
79
|
-
include = list(it.get("include", []))
|
|
80
|
-
expect = str(it.get("expect", ""))
|
|
81
|
-
exclude = list(it.get("exclude", []))
|
|
82
|
-
if include and expect in ("@SPEC:", "@TEST:", "@CODE:", "@DOC:"):
|
|
83
|
-
rules.append(Rule(include=include, expect=expect, exclude=exclude))
|
|
84
|
-
if rules:
|
|
85
|
-
return rules
|
|
86
|
-
except Exception:
|
|
87
|
-
pass
|
|
88
|
-
|
|
89
|
-
# Defaults (ordered)
|
|
90
|
-
return [
|
|
91
|
-
Rule(
|
|
92
|
-
include=[".moai/specs/**", "**/SPEC-*/spec.md"],
|
|
93
|
-
expect="@SPEC:",
|
|
94
|
-
exclude=[]
|
|
95
|
-
),
|
|
96
|
-
Rule(
|
|
97
|
-
include=[
|
|
98
|
-
"**/*_test.py", "**/test_*.py", "**/*.test.ts",
|
|
99
|
-
"**/*.test.tsx", "**/*.test.js", "**/*.test.jsx",
|
|
100
|
-
"**/*.test.go", "**/*.test.rs", "**/*.spec.ts",
|
|
101
|
-
"**/*.spec.tsx", "tests/**"
|
|
102
|
-
],
|
|
103
|
-
expect="@TEST:",
|
|
104
|
-
exclude=[".claude/**"]
|
|
105
|
-
),
|
|
106
|
-
Rule(
|
|
107
|
-
include=["docs/**/*.md", "**/README.md", "**/*.api.md"],
|
|
108
|
-
expect="@DOC:",
|
|
109
|
-
exclude=[".claude/**"]
|
|
110
|
-
),
|
|
111
|
-
Rule(
|
|
112
|
-
include=["**/*"],
|
|
113
|
-
expect="@CODE:",
|
|
114
|
-
exclude=[
|
|
115
|
-
"tests/**", "docs/**", ".moai/**", ".claude/**",
|
|
116
|
-
"**/*.md", "**/*.json", "**/*.yml", "**/*.yaml",
|
|
117
|
-
"**/*.toml", "**/*.lock", "**/*.svg", "**/*.png",
|
|
118
|
-
"**/*.jpg", "**/*.jpeg", "**/*.gif"
|
|
119
|
-
]
|
|
120
|
-
),
|
|
121
|
-
]
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
def _match_any(path: str, patterns: List[str]) -> bool:
|
|
125
|
-
return any(fnmatch.fnmatch(path, pat) for pat in patterns)
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
def _needs_tag_str(path_str: str, rules: List[Rule]) -> Optional[str]:
|
|
129
|
-
p = path_str
|
|
130
|
-
for rule in rules:
|
|
131
|
-
if _match_any(p, rule.include) and not _match_any(p, rule.exclude):
|
|
132
|
-
if rule.expect == "@CODE:":
|
|
133
|
-
# CODE: limit to source-like extensions to reduce noise
|
|
134
|
-
if not any(p.endswith(ext) for ext in DEFAULT_CODE_EXTS):
|
|
135
|
-
continue
|
|
136
|
-
return rule.expect
|
|
137
|
-
return None
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
def _has_tag(content: str, expected: str) -> bool:
|
|
141
|
-
return expected in content
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
def _iter_recent_changes(cwd: str) -> Iterable[Path]:
|
|
145
|
-
root = Path(cwd)
|
|
146
|
-
try:
|
|
147
|
-
# Staged files
|
|
148
|
-
r1 = subprocess.run(
|
|
149
|
-
["git", "diff", "--name-only", "--cached"],
|
|
150
|
-
cwd=cwd, capture_output=True, text=True, timeout=1
|
|
151
|
-
)
|
|
152
|
-
# Modified (unstaged) tracked files
|
|
153
|
-
r2 = subprocess.run(
|
|
154
|
-
["git", "ls-files", "-m"],
|
|
155
|
-
cwd=cwd, capture_output=True, text=True, timeout=1
|
|
156
|
-
)
|
|
157
|
-
# Untracked (other) files respecting .gitignore
|
|
158
|
-
r3 = subprocess.run(
|
|
159
|
-
["git", "ls-files", "-o", "--exclude-standard"],
|
|
160
|
-
cwd=cwd, capture_output=True, text=True, timeout=1
|
|
161
|
-
)
|
|
162
|
-
names = set()
|
|
163
|
-
if r1.returncode == 0:
|
|
164
|
-
names.update([line.strip() for line in r1.stdout.splitlines() if line.strip()])
|
|
165
|
-
if r2.returncode == 0:
|
|
166
|
-
names.update([line.strip() for line in r2.stdout.splitlines() if line.strip()])
|
|
167
|
-
if r3.returncode == 0:
|
|
168
|
-
names.update([line.strip() for line in r3.stdout.splitlines() if line.strip()])
|
|
169
|
-
for n in names:
|
|
170
|
-
p = (root / n).resolve()
|
|
171
|
-
if p.is_file():
|
|
172
|
-
yield p
|
|
173
|
-
except Exception:
|
|
174
|
-
return []
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
def scan_recent_changes_for_missing_tags(cwd: str) -> list[TagIssue]:
|
|
178
|
-
issues: list[TagIssue] = []
|
|
179
|
-
rules = _load_rules(cwd)
|
|
180
|
-
root = Path(cwd).resolve()
|
|
181
|
-
for path in _iter_recent_changes(cwd):
|
|
182
|
-
try:
|
|
183
|
-
content = path.read_text(encoding="utf-8", errors="ignore")
|
|
184
|
-
except Exception:
|
|
185
|
-
continue
|
|
186
|
-
# compute relative path once and use for matching/excluding
|
|
187
|
-
try:
|
|
188
|
-
rel = path.resolve().relative_to(root)
|
|
189
|
-
rel_s = rel.as_posix()
|
|
190
|
-
except Exception:
|
|
191
|
-
rel_s = path.name
|
|
192
|
-
|
|
193
|
-
expected = _needs_tag_str(rel_s, rules)
|
|
194
|
-
if not expected:
|
|
195
|
-
continue
|
|
196
|
-
if not _has_tag(content, expected):
|
|
197
|
-
issues.append(TagIssue(path=rel_s, expected=expected, reason="missing tag"))
|
|
198
|
-
return issues
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Event handlers for Alfred Hooks
|
|
3
|
-
|
|
4
|
-
Claude Code Event Handlers
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from .notification import handle_notification, handle_stop, handle_subagent_stop
|
|
8
|
-
from .session import handle_session_end, handle_session_start
|
|
9
|
-
from .tool import handle_post_tool_use, handle_pre_tool_use
|
|
10
|
-
from .user import handle_user_prompt_submit
|
|
11
|
-
|
|
12
|
-
__all__ = [
|
|
13
|
-
"handle_session_start",
|
|
14
|
-
"handle_session_end",
|
|
15
|
-
"handle_user_prompt_submit",
|
|
16
|
-
"handle_pre_tool_use",
|
|
17
|
-
"handle_post_tool_use",
|
|
18
|
-
"handle_notification",
|
|
19
|
-
"handle_stop",
|
|
20
|
-
"handle_subagent_stop",
|
|
21
|
-
]
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Notification and control handlers
|
|
3
|
-
|
|
4
|
-
Notification, Stop, SubagentStop event handling
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from core import HookPayload, HookResult
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def handle_notification(payload: HookPayload) -> HookResult:
|
|
11
|
-
"""Notification event handler (default implementation)"""
|
|
12
|
-
return HookResult()
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
def handle_stop(payload: HookPayload) -> HookResult:
|
|
16
|
-
"""Stop event handler (default implementation)"""
|
|
17
|
-
return HookResult()
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def handle_subagent_stop(payload: HookPayload) -> HookResult:
|
|
21
|
-
"""SubagentStop event handler (default implementation)"""
|
|
22
|
-
return HookResult()
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
__all__ = ["handle_notification", "handle_stop", "handle_subagent_stop"]
|