moai-adk 0.25.4__py3-none-any.whl → 0.32.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/__init__.py +2 -5
- moai_adk/__main__.py +114 -82
- moai_adk/cli/__init__.py +6 -1
- moai_adk/cli/commands/__init__.py +1 -3
- moai_adk/cli/commands/analyze.py +5 -16
- moai_adk/cli/commands/doctor.py +6 -18
- moai_adk/cli/commands/init.py +56 -125
- moai_adk/cli/commands/language.py +14 -35
- moai_adk/cli/commands/status.py +9 -15
- moai_adk/cli/commands/update.py +1555 -190
- moai_adk/cli/prompts/init_prompts.py +112 -56
- 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 +672 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +490 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +128 -0
- moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
- moai_adk/core/analysis/session_analyzer.py +17 -56
- moai_adk/core/claude_integration.py +26 -54
- moai_adk/core/command_helpers.py +10 -10
- moai_adk/core/comprehensive_monitoring_system.py +1183 -0
- moai_adk/core/config/auto_spec_config.py +5 -11
- moai_adk/core/config/migration.py +19 -9
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +6 -12
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +725 -112
- moai_adk/core/event_driven_hook_system.py +1371 -0
- moai_adk/core/git/__init__.py +8 -0
- moai_adk/core/git/branch_manager.py +3 -11
- moai_adk/core/git/checkpoint.py +1 -3
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/manager.py +91 -1
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +56 -80
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/engine.py +6 -18
- moai_adk/core/integration/integration_tester.py +10 -9
- moai_adk/core/integration/utils.py +1 -1
- moai_adk/core/issue_creator.py +10 -28
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config_resolver.py +485 -0
- moai_adk/core/language_validator.py +28 -41
- moai_adk/core/mcp/setup.py +15 -12
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +481 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
- moai_adk/core/migration/backup_manager.py +78 -9
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +8 -17
- 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 +6 -10
- moai_adk/core/migration/version_migrator.py +3 -3
- moai_adk/core/performance/cache_system.py +8 -10
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/checker.py +2 -4
- moai_adk/core/project/detector.py +1 -3
- moai_adk/core/project/initializer.py +135 -23
- moai_adk/core/project/phase_executor.py +54 -81
- moai_adk/core/project/validator.py +6 -12
- moai_adk/core/quality/trust_checker.py +9 -27
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +73 -148
- moai_adk/core/session_manager.py +10 -26
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec/confidence_scoring.py +31 -100
- moai_adk/core/spec/ears_template_engine.py +351 -286
- moai_adk/core/spec/quality_validator.py +35 -69
- moai_adk/core/spec_status_manager.py +64 -74
- moai_adk/core/template/backup.py +45 -20
- moai_adk/core/template/config.py +112 -39
- moai_adk/core/template/merger.py +11 -19
- moai_adk/core/template/processor.py +253 -149
- moai_adk/core/template_engine.py +73 -40
- 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 +4 -12
- 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 +23 -72
- moai_adk/foundation/trust/validation_checklist.py +57 -162
- 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/alfred_detector.py +1 -3
- moai_adk/statusline/config.py +13 -4
- moai_adk/statusline/enhanced_output_style_detector.py +23 -15
- moai_adk/statusline/main.py +51 -15
- moai_adk/statusline/renderer.py +104 -48
- moai_adk/statusline/update_checker.py +3 -9
- moai_adk/statusline/version_reader.py +140 -46
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +549 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +993 -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/moai/lib/checkpoint.py +244 -0
- 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 +921 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
- moai_adk/templates/.claude/settings.json +172 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -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-domain-backend/SKILL.md +319 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +320 -0
- 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-frontend/SKILL.md +496 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -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 +491 -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-foundation-claude/SKILL.md +201 -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-context/SKILL.md +438 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -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 +346 -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-quality/SKILL.md +362 -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-integration-mcp/SKILL.md +352 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -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 +316 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -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-shadcn/SKILL.md +370 -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-platform-baas/README.md +186 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -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 +135 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -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/schemas/config-schema.json +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -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 +71 -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-templates/SKILL.md +374 -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-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -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/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/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 +410 -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 +103 -41
- moai_adk/templates/.git-hooks/pre-push +116 -21
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.gitignore +184 -44
- moai_adk/templates/.mcp.json +7 -9
- moai_adk/templates/.moai/cache/personalization.json +10 -0
- moai_adk/templates/.moai/config/config.yaml +344 -0
- moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
- moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
- moai_adk/templates/.moai/config/presets/team.yaml +33 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -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 +15 -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 +86 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +382 -501
- moai_adk/utils/__init__.py +24 -1
- moai_adk/utils/banner.py +7 -10
- moai_adk/utils/common.py +16 -30
- moai_adk/utils/link_validator.py +4 -12
- moai_adk/utils/safe_file_reader.py +2 -6
- moai_adk/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.32.8.dist-info/METADATA +2478 -0
- moai_adk-0.32.8.dist-info/RECORD +396 -0
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
- moai_adk/cli/commands/backup.py +0 -82
- moai_adk/cli/commands/improve_user_experience.py +0 -348
- moai_adk/cli/commands/migrate.py +0 -158
- moai_adk/cli/commands/validate_links.py +0 -118
- moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -413
- moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
- moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
- moai_adk/utils/user_experience.py +0 -531
- moai_adk-0.25.4.dist-info/METADATA +0 -2279
- moai_adk-0.25.4.dist-info/RECORD +0 -112
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Language Configuration Validator for MoAI-ADK
|
|
3
|
+
|
|
4
|
+
Validates language configuration settings and ensures proper functionality.
|
|
5
|
+
Provides detailed diagnostics for language-related issues.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import json
|
|
9
|
+
import sys
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Any, Dict, List
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def load_config() -> Dict[str, Any]:
|
|
15
|
+
"""Load configuration from .moai/config/config.json
|
|
16
|
+
|
|
17
|
+
Returns:
|
|
18
|
+
Configuration dictionary or empty dict if not found
|
|
19
|
+
"""
|
|
20
|
+
config_path = Path(".moai/config/config.json")
|
|
21
|
+
|
|
22
|
+
if not config_path.exists():
|
|
23
|
+
return {"error": "Configuration file not found"}
|
|
24
|
+
|
|
25
|
+
try:
|
|
26
|
+
with open(config_path, "r", encoding="utf-8") as f:
|
|
27
|
+
return json.load(f)
|
|
28
|
+
except json.JSONDecodeError as e:
|
|
29
|
+
return {"error": f"JSON decode error: {e}"}
|
|
30
|
+
except Exception as e:
|
|
31
|
+
return {"error": f"File read error: {e}"}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def validate_language_config(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
35
|
+
"""Validate language configuration
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
config: Configuration dictionary
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
Validation result with status and details
|
|
42
|
+
"""
|
|
43
|
+
warnings: List[str] = []
|
|
44
|
+
errors: List[str] = []
|
|
45
|
+
result: Dict[str, Any] = {
|
|
46
|
+
"valid": True,
|
|
47
|
+
"warnings": warnings,
|
|
48
|
+
"errors": errors,
|
|
49
|
+
"language_info": {},
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
# Check if language section exists
|
|
53
|
+
if "language" not in config:
|
|
54
|
+
result["valid"] = False
|
|
55
|
+
errors.append("Missing 'language' configuration section")
|
|
56
|
+
return result
|
|
57
|
+
|
|
58
|
+
lang_config = config.get("language", {})
|
|
59
|
+
|
|
60
|
+
# Validate conversation_language
|
|
61
|
+
conversation_lang = lang_config.get("conversation_language", "en")
|
|
62
|
+
if not conversation_lang:
|
|
63
|
+
result["valid"] = False
|
|
64
|
+
errors.append("conversation_language is empty or missing")
|
|
65
|
+
elif conversation_lang not in ["ko", "en", "ja", "zh"]:
|
|
66
|
+
warnings.append(
|
|
67
|
+
f"conversation_language '{conversation_lang}' is not officially supported (supported: ko, en, ja, zh)"
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
# Validate conversation_language_name
|
|
71
|
+
lang_name = lang_config.get("conversation_language_name", "")
|
|
72
|
+
if not lang_name:
|
|
73
|
+
result["valid"] = False
|
|
74
|
+
errors.append("conversation_language_name is empty or missing")
|
|
75
|
+
elif conversation_lang == "ko" and lang_name != "Korean":
|
|
76
|
+
warnings.append(f"conversation_language_name '{lang_name}' doesn't match 'Korean' for Korean language")
|
|
77
|
+
elif conversation_lang == "en" and lang_name != "English":
|
|
78
|
+
warnings.append(f"conversation_language_name '{lang_name}' doesn't match 'English' for English language")
|
|
79
|
+
elif conversation_lang == "ja" and lang_name != "Japanese":
|
|
80
|
+
warnings.append(f"conversation_language_name '{lang_name}' doesn't match 'Japanese' for Japanese language")
|
|
81
|
+
elif conversation_lang == "zh" and lang_name != "Chinese":
|
|
82
|
+
warnings.append(f"conversation_language_name '{lang_name}' doesn't match 'Chinese' for Chinese language")
|
|
83
|
+
|
|
84
|
+
# Validate agent_prompt_language
|
|
85
|
+
agent_lang = lang_config.get("agent_prompt_language", conversation_lang)
|
|
86
|
+
if agent_lang != conversation_lang:
|
|
87
|
+
warnings.append(
|
|
88
|
+
f"agent_prompt_language '{agent_lang}' differs from conversation_language '{conversation_lang}'"
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
# Store language info
|
|
92
|
+
result["language_info"] = {
|
|
93
|
+
"conversation_language": conversation_lang,
|
|
94
|
+
"conversation_language_name": lang_name,
|
|
95
|
+
"agent_prompt_language": agent_lang,
|
|
96
|
+
"primary_language": conversation_lang,
|
|
97
|
+
"is_korean": conversation_lang == "ko",
|
|
98
|
+
"is_english": conversation_lang == "en",
|
|
99
|
+
"is_japanese": conversation_lang == "ja",
|
|
100
|
+
"is_chinese": conversation_lang == "zh",
|
|
101
|
+
"is_multilingual": conversation_lang in ["ko", "ja", "zh"],
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return result
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def validate_output_style_compatibility() -> Dict[str, Any]:
|
|
108
|
+
"""Validate if output style supports language configuration
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
Compatibility check results
|
|
112
|
+
"""
|
|
113
|
+
recommendations: List[str] = []
|
|
114
|
+
result: Dict[str, Any] = {
|
|
115
|
+
"r2d2_exists": False,
|
|
116
|
+
"language_support_present": False,
|
|
117
|
+
"config_reading_present": False,
|
|
118
|
+
"recommendations": recommendations,
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
# Check if R2-D2 output style exists
|
|
122
|
+
r2d2_path = Path(".claude/output-styles/moai/r2d2.md")
|
|
123
|
+
result["r2d2_exists"] = r2d2_path.exists()
|
|
124
|
+
|
|
125
|
+
if r2d2_path.exists():
|
|
126
|
+
try:
|
|
127
|
+
with open(r2d2_path, "r", encoding="utf-8") as f:
|
|
128
|
+
content = f.read()
|
|
129
|
+
|
|
130
|
+
# Check for language support indicators
|
|
131
|
+
language_keywords = [
|
|
132
|
+
"conversation_language",
|
|
133
|
+
"language.conversation_language",
|
|
134
|
+
"한국어",
|
|
135
|
+
"Korean",
|
|
136
|
+
"Language Configuration",
|
|
137
|
+
]
|
|
138
|
+
|
|
139
|
+
result["language_support_present"] = any(keyword in content for keyword in language_keywords)
|
|
140
|
+
result["config_reading_present"] = ".moai/config/config.json" in content
|
|
141
|
+
|
|
142
|
+
if not result["language_support_present"]:
|
|
143
|
+
recommendations.append("Add language support documentation to R2-D2 output style")
|
|
144
|
+
|
|
145
|
+
if not result["config_reading_present"]:
|
|
146
|
+
recommendations.append("Add config.json reading instructions to R2-D2 output style")
|
|
147
|
+
|
|
148
|
+
except Exception as e:
|
|
149
|
+
result["error"] = f"Error reading R2-D2 output style: {e}"
|
|
150
|
+
else:
|
|
151
|
+
recommendations.append("R2-D2 output style not found - ensure proper installation")
|
|
152
|
+
|
|
153
|
+
return result
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def validate_session_start_hook() -> Dict[str, Any]:
|
|
157
|
+
"""Validate if SessionStart hook displays language info
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
Hook validation results
|
|
161
|
+
"""
|
|
162
|
+
recommendations: List[str] = []
|
|
163
|
+
result: Dict[str, Any] = {
|
|
164
|
+
"hook_exists": False,
|
|
165
|
+
"language_display_present": False,
|
|
166
|
+
"recommendations": recommendations,
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
hook_path = Path(".claude/hooks/moai/session_start__show_project_info.py")
|
|
170
|
+
result["hook_exists"] = hook_path.exists()
|
|
171
|
+
|
|
172
|
+
if hook_path.exists():
|
|
173
|
+
try:
|
|
174
|
+
with open(hook_path, "r", encoding="utf-8") as f:
|
|
175
|
+
content = f.read()
|
|
176
|
+
|
|
177
|
+
# Check for language display functionality
|
|
178
|
+
language_indicators = [
|
|
179
|
+
"get_language_info",
|
|
180
|
+
"conversation_language",
|
|
181
|
+
"language_name",
|
|
182
|
+
"Language:",
|
|
183
|
+
]
|
|
184
|
+
|
|
185
|
+
result["language_display_present"] = any(indicator in content for indicator in language_indicators)
|
|
186
|
+
|
|
187
|
+
if not result["language_display_present"]:
|
|
188
|
+
recommendations.append("Add language info display to SessionStart hook")
|
|
189
|
+
|
|
190
|
+
except Exception as e:
|
|
191
|
+
result["error"] = f"Error reading SessionStart hook: {e}"
|
|
192
|
+
else:
|
|
193
|
+
recommendations.append("SessionStart hook not found - ensure proper installation")
|
|
194
|
+
|
|
195
|
+
return result
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def generate_validation_report() -> str:
|
|
199
|
+
"""Generate comprehensive language validation report
|
|
200
|
+
|
|
201
|
+
Returns:
|
|
202
|
+
Formatted validation report string
|
|
203
|
+
"""
|
|
204
|
+
report_lines = ["🌐 Language Configuration Validation Report", "=" * 50]
|
|
205
|
+
|
|
206
|
+
# Load and validate config
|
|
207
|
+
config = load_config()
|
|
208
|
+
if "error" in config:
|
|
209
|
+
report_lines.append(f"❌ Config Error: {config['error']}")
|
|
210
|
+
return "\n".join(report_lines)
|
|
211
|
+
|
|
212
|
+
validation = validate_language_config(config)
|
|
213
|
+
language_info = validation["language_info"]
|
|
214
|
+
|
|
215
|
+
# Current configuration status
|
|
216
|
+
report_lines.extend(
|
|
217
|
+
[
|
|
218
|
+
"",
|
|
219
|
+
"📋 Current Configuration:",
|
|
220
|
+
f" • Language: {language_info.get('conversation_language_name', 'Unknown')} "
|
|
221
|
+
f"({language_info.get('conversation_language', 'Unknown')})",
|
|
222
|
+
f" • Agent Language: {language_info.get('agent_prompt_language', 'Unknown')}",
|
|
223
|
+
f" • Korean Mode: {'✅ Active' if language_info.get('is_korean') else '❌ Inactive'}",
|
|
224
|
+
f" • Config Valid: {'✅ Valid' if validation['valid'] else '❌ Invalid'}",
|
|
225
|
+
]
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
# Errors and warnings
|
|
229
|
+
if validation["errors"]:
|
|
230
|
+
report_lines.extend(["", "❌ Errors:"])
|
|
231
|
+
for error in validation["errors"]:
|
|
232
|
+
report_lines.append(f" • {error}")
|
|
233
|
+
|
|
234
|
+
if validation["warnings"]:
|
|
235
|
+
report_lines.extend(["", "⚠️ Warnings:"])
|
|
236
|
+
for warning in validation["warnings"]:
|
|
237
|
+
report_lines.append(f" • {warning}")
|
|
238
|
+
|
|
239
|
+
# Output style compatibility
|
|
240
|
+
report_lines.extend(["", "🔧 Output Style Compatibility:"])
|
|
241
|
+
output_check = validate_output_style_compatibility()
|
|
242
|
+
report_lines.extend(
|
|
243
|
+
[
|
|
244
|
+
f" • R2-D2 Output Style: {'✅ Found' if output_check['r2d2_exists'] else '❌ Missing'}",
|
|
245
|
+
f" • Language Support: {'✅ Present' if output_check['language_support_present'] else '❌ Missing'}",
|
|
246
|
+
f" • Config Reading: {'✅ Present' if output_check['config_reading_present'] else '❌ Missing'}",
|
|
247
|
+
]
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
if output_check.get("recommendations"):
|
|
251
|
+
report_lines.extend(["", " Recommendations:"])
|
|
252
|
+
for rec in output_check["recommendations"]:
|
|
253
|
+
report_lines.append(f" • {rec}")
|
|
254
|
+
|
|
255
|
+
# SessionStart hook check
|
|
256
|
+
report_lines.extend(["", "🎣 SessionStart Hook:"])
|
|
257
|
+
hook_check = validate_session_start_hook()
|
|
258
|
+
report_lines.extend(
|
|
259
|
+
[
|
|
260
|
+
f" • Hook Exists: {'✅ Found' if hook_check['hook_exists'] else '❌ Missing'}",
|
|
261
|
+
f" • Language Display: {'✅ Present' if hook_check['language_display_present'] else '❌ Missing'}",
|
|
262
|
+
]
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
if hook_check.get("recommendations"):
|
|
266
|
+
report_lines.extend(["", " Recommendations:"])
|
|
267
|
+
for rec in hook_check["recommendations"]:
|
|
268
|
+
report_lines.append(f" • {rec}")
|
|
269
|
+
|
|
270
|
+
# Overall status
|
|
271
|
+
report_lines.extend(["", "📊 Overall Status:"])
|
|
272
|
+
all_good = (
|
|
273
|
+
validation["valid"]
|
|
274
|
+
and not validation["errors"]
|
|
275
|
+
and output_check["r2d2_exists"]
|
|
276
|
+
and output_check["language_support_present"]
|
|
277
|
+
and hook_check["hook_exists"]
|
|
278
|
+
and hook_check["language_display_present"]
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
if all_good:
|
|
282
|
+
report_lines.append("✅ Language configuration is fully functional!")
|
|
283
|
+
if language_info.get("is_korean"):
|
|
284
|
+
report_lines.append("🇰🇷 Korean language responses should work correctly.")
|
|
285
|
+
else:
|
|
286
|
+
report_lines.append("🌐 English language responses configured.")
|
|
287
|
+
else:
|
|
288
|
+
report_lines.append("⚠️ Issues found that may prevent proper language functionality.")
|
|
289
|
+
report_lines.append(" See recommendations above for fixes.")
|
|
290
|
+
|
|
291
|
+
return "\n".join(report_lines)
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
def main() -> None:
|
|
295
|
+
"""Main entry point for language configuration validator"""
|
|
296
|
+
try:
|
|
297
|
+
report = generate_validation_report()
|
|
298
|
+
print(report)
|
|
299
|
+
|
|
300
|
+
# Exit with appropriate code
|
|
301
|
+
config = load_config()
|
|
302
|
+
if "error" in config:
|
|
303
|
+
sys.exit(2) # Config error
|
|
304
|
+
else:
|
|
305
|
+
validation = validate_language_config(config)
|
|
306
|
+
if not validation["valid"]:
|
|
307
|
+
sys.exit(1) # Config invalid
|
|
308
|
+
else:
|
|
309
|
+
sys.exit(0) # Success
|
|
310
|
+
|
|
311
|
+
except Exception as e:
|
|
312
|
+
print(f"❌ Language validation error: {e}")
|
|
313
|
+
sys.exit(3)
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
if __name__ == "__main__":
|
|
317
|
+
main()
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Hook model classes - Data structures for hook payloads and results.
|
|
3
|
+
|
|
4
|
+
Provides HookPayload and HookResult classes used by hook handlers
|
|
5
|
+
to process events and return execution results to Claude Code.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from dataclasses import asdict, dataclass
|
|
9
|
+
from typing import Any, Dict, List, Optional
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class HookPayload(dict):
|
|
13
|
+
"""
|
|
14
|
+
A dictionary subclass for hook event payloads.
|
|
15
|
+
|
|
16
|
+
Provides dict-like access to hook event data with .get() method support.
|
|
17
|
+
Used to pass event data from Claude Code to hook handlers.
|
|
18
|
+
|
|
19
|
+
Example:
|
|
20
|
+
payload = HookPayload({
|
|
21
|
+
"tool": "Read",
|
|
22
|
+
"cwd": "/path/to/project",
|
|
23
|
+
"userPrompt": "Read the file"
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
tool_name = payload.get("tool", "")
|
|
27
|
+
working_dir = payload.get("cwd", ".")
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(self, data: Optional[Dict[str, Any]] = None):
|
|
31
|
+
"""Initialize HookPayload with optional data dictionary."""
|
|
32
|
+
super().__init__(data or {})
|
|
33
|
+
|
|
34
|
+
def get(self, key: str, default: Any = None) -> Any:
|
|
35
|
+
"""Get value from payload with optional default."""
|
|
36
|
+
return super().get(key, default)
|
|
37
|
+
|
|
38
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
39
|
+
"""Set value in payload."""
|
|
40
|
+
super().__setitem__(key, value)
|
|
41
|
+
|
|
42
|
+
def update(self, other: Dict[str, Any]) -> None: # type: ignore[override]
|
|
43
|
+
"""Update payload with another dictionary."""
|
|
44
|
+
super().update(other)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@dataclass
|
|
48
|
+
class HookResult:
|
|
49
|
+
"""
|
|
50
|
+
A class representing the result of a hook execution.
|
|
51
|
+
|
|
52
|
+
Used by hook handlers to return execution results, messages, and metadata
|
|
53
|
+
back to Claude Code. Supports JSON serialization via to_dict() method.
|
|
54
|
+
|
|
55
|
+
Attributes:
|
|
56
|
+
system_message (Optional[str]): Message to display to user
|
|
57
|
+
continue_execution (bool): Whether to continue execution (default: True)
|
|
58
|
+
context_files (List[str]): List of context file paths to load
|
|
59
|
+
hook_specific_output (Optional[Dict[str, Any]]): Hook-specific data
|
|
60
|
+
block_execution (bool): Whether to block execution (default: False)
|
|
61
|
+
|
|
62
|
+
Example:
|
|
63
|
+
# Simple result with just a message
|
|
64
|
+
return HookResult(system_message="Operation completed")
|
|
65
|
+
|
|
66
|
+
# Result with context files
|
|
67
|
+
return HookResult(
|
|
68
|
+
system_message="Loaded 3 context files",
|
|
69
|
+
context_files=["README.md", "config.json"]
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
# Result that stops execution
|
|
73
|
+
return HookResult(
|
|
74
|
+
system_message="Dangerous operation blocked",
|
|
75
|
+
continue_execution=False,
|
|
76
|
+
block_execution=True
|
|
77
|
+
)
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
system_message: Optional[str] = None
|
|
81
|
+
continue_execution: bool = True
|
|
82
|
+
context_files: List[str] = None
|
|
83
|
+
hook_specific_output: Optional[Dict[str, Any]] = None
|
|
84
|
+
block_execution: bool = False
|
|
85
|
+
|
|
86
|
+
def __post_init__(self):
|
|
87
|
+
"""Post-initialization to set default values."""
|
|
88
|
+
if self.context_files is None:
|
|
89
|
+
self.context_files = []
|
|
90
|
+
if self.hook_specific_output is None:
|
|
91
|
+
self.hook_specific_output = {}
|
|
92
|
+
|
|
93
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
94
|
+
"""
|
|
95
|
+
Convert HookResult to a dictionary for JSON serialization.
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
Dict[str, Any]: Dictionary representation of the HookResult
|
|
99
|
+
"""
|
|
100
|
+
result = asdict(self)
|
|
101
|
+
# Remove empty/None values to keep output clean
|
|
102
|
+
return {k: v for k, v in result.items() if v or v is False or v == 0}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""Path utility functions for MoAI-ADK hooks"""
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def find_project_root() -> Path:
|
|
7
|
+
"""
|
|
8
|
+
Find project root by locating .moai directory.
|
|
9
|
+
|
|
10
|
+
Starts from current file location and traverses upward
|
|
11
|
+
until .moai directory is found.
|
|
12
|
+
|
|
13
|
+
Returns:
|
|
14
|
+
Path: Project root directory containing .moai/
|
|
15
|
+
|
|
16
|
+
Fallback:
|
|
17
|
+
Returns Path.cwd() if .moai not found
|
|
18
|
+
"""
|
|
19
|
+
current = Path(__file__).resolve().parent
|
|
20
|
+
|
|
21
|
+
# Traverse upward to find .moai directory
|
|
22
|
+
while current != current.parent:
|
|
23
|
+
if (current / ".moai").is_dir():
|
|
24
|
+
return current
|
|
25
|
+
current = current.parent
|
|
26
|
+
|
|
27
|
+
# Fallback to current working directory
|
|
28
|
+
return Path.cwd()
|