moai-adk 0.4.8__tar.gz → 0.4.11__tar.gz
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-0.4.8 → moai_adk-0.4.11}/PKG-INFO +44 -25
- {moai_adk-0.4.8 → moai_adk-0.4.11}/README.md +43 -24
- {moai_adk-0.4.8 → moai_adk-0.4.11}/pyproject.toml +1 -1
- moai_adk-0.4.11/src/moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +313 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +1 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/hooks/alfred/core/__init__.py +32 -29
- moai_adk-0.4.11/src/moai_adk/templates/.claude/hooks/alfred/core/tags.py +198 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +34 -14
- moai_adk-0.4.11/src/moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +175 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +2 -2
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/CLAUDE.md +72 -38
- {moai_adk-0.4.8 → moai_adk-0.4.11}/.gitignore +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/LICENSE +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/__init__.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/__main__.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/cli/__init__.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/cli/commands/__init__.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/cli/commands/backup.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/cli/commands/doctor.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/cli/commands/init.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/cli/commands/status.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/cli/commands/update.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/cli/main.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/cli/prompts/__init__.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/cli/prompts/init_prompts.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/__init__.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/diagnostics/__init__.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/diagnostics/slash_commands.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/git/__init__.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/git/branch.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/git/branch_manager.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/git/checkpoint.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/git/commit.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/git/event_detector.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/git/manager.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/project/__init__.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/project/backup_utils.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/project/checker.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/project/detector.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/project/initializer.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/project/phase_executor.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/project/validator.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/quality/__init__.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/quality/trust_checker.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/quality/validators/__init__.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/quality/validators/base_validator.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/template/__init__.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/template/backup.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/template/config.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/template/languages.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/template/merger.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/core/template/processor.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/commands/alfred/0-project.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/commands/alfred/2-run.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/hooks/alfred/README.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/hooks/alfred/core/checkpoint.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/hooks/alfred/core/context.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/settings.json +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-database/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-database/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-go/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-go/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-java/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-java/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-python/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-python/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.gitignore +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.moai/config.json +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.moai/memory/development-guide.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.moai/memory/spec-metadata.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.moai/project/product.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.moai/project/structure.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/.moai/project/tech.md +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/templates/__init__.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/utils/__init__.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/utils/banner.py +0 -0
- {moai_adk-0.4.8 → moai_adk-0.4.11}/src/moai_adk/utils/logger.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: moai-adk
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.11
|
|
4
4
|
Summary: MoAI Agentic Development Kit - SPEC-First TDD with Alfred SuperAgent & Complete Skills v2.0
|
|
5
5
|
Project-URL: Homepage, https://github.com/modu-ai/moai-adk
|
|
6
6
|
Project-URL: Repository, https://github.com/modu-ai/moai-adk
|
|
@@ -190,7 +190,7 @@ uv tool install moai-adk
|
|
|
190
190
|
|
|
191
191
|
# Verify installation
|
|
192
192
|
moai-adk --version
|
|
193
|
-
# Output: MoAI-ADK v0.4.
|
|
193
|
+
# Output: MoAI-ADK v0.4.11
|
|
194
194
|
```
|
|
195
195
|
|
|
196
196
|
Once installed, you can use the `moai-adk` command anywhere.
|
|
@@ -1108,7 +1108,7 @@ Hooks are **event-driven** scripts that trigger automatically at specific points
|
|
|
1108
1108
|
#### 2. PreToolUse (Before Tool Execution)
|
|
1109
1109
|
|
|
1110
1110
|
**Triggers**: Before executing file edits, Bash commands, or MultiEdit operations
|
|
1111
|
-
**Purpose**: Detect risky operations and automatically create safety checkpoints
|
|
1111
|
+
**Purpose**: Detect risky operations and automatically create safety checkpoints + TAG Guard
|
|
1112
1112
|
|
|
1113
1113
|
**Protection Against**:
|
|
1114
1114
|
- `rm -rf` (file deletion)
|
|
@@ -1116,13 +1116,30 @@ Hooks are **event-driven** scripts that trigger automatically at specific points
|
|
|
1116
1116
|
- Editing critical files (`CLAUDE.md`, `config.json`)
|
|
1117
1117
|
- Mass edits (10+ files at once via MultiEdit)
|
|
1118
1118
|
|
|
1119
|
+
**TAG Guard (New in v0.4.11)**:
|
|
1120
|
+
Automatically detects missing @TAG annotations in changed files:
|
|
1121
|
+
- Scans staged, modified, and untracked files
|
|
1122
|
+
- Warns when SPEC/TEST/CODE/DOC files lack required @TAG markers
|
|
1123
|
+
- Configurable rules via `.moai/tag-rules.json`
|
|
1124
|
+
- Non-blocking (gentle reminder, doesn't stop execution)
|
|
1125
|
+
|
|
1119
1126
|
**What You See**:
|
|
1120
1127
|
```
|
|
1121
1128
|
🛡️ Checkpoint created: before-delete-20251023-143000
|
|
1122
1129
|
Operation: delete
|
|
1123
1130
|
```
|
|
1124
1131
|
|
|
1125
|
-
|
|
1132
|
+
Or when TAGs are missing:
|
|
1133
|
+
```
|
|
1134
|
+
⚠️ TAG 누락 감지: 생성/수정한 파일 중 @TAG가 없는 항목이 있습니다.
|
|
1135
|
+
- src/auth/service.py → 기대 태그: @CODE:
|
|
1136
|
+
- tests/test_auth.py → 기대 태그: @TEST:
|
|
1137
|
+
권장 조치:
|
|
1138
|
+
1) SPEC/TEST/CODE/DOC 유형에 맞는 @TAG를 파일 상단 주석이나 헤더에 추가
|
|
1139
|
+
2) rg로 확인: rg '@(SPEC|TEST|CODE|DOC):' -n <경로>
|
|
1140
|
+
```
|
|
1141
|
+
|
|
1142
|
+
**Why It Matters**: Prevents data loss from mistakes and ensures @TAG traceability. You can always restore from the checkpoint if something goes wrong.
|
|
1126
1143
|
|
|
1127
1144
|
#### 3. UserPromptSubmit (Prompt Input)
|
|
1128
1145
|
|
|
@@ -1185,7 +1202,7 @@ If you need to temporarily disable hooks, edit `.claude/settings.json`:
|
|
|
1185
1202
|
| Hook | Status | Feature |
|
|
1186
1203
|
|------|--------|---------|
|
|
1187
1204
|
| **SessionStart** | ✅ Active | Project status summary (language, Git, SPEC progress, checkpoints) |
|
|
1188
|
-
| **PreToolUse** | ✅ Active | Risk detection + auto checkpoint (critical-delete, delete, merge, script) |
|
|
1205
|
+
| **PreToolUse** | ✅ Active | Risk detection + auto checkpoint (critical-delete, delete, merge, script) + **TAG Guard** (missing @TAG detection) |
|
|
1189
1206
|
| **UserPromptSubmit** | ✅ Active | JIT context loading (auto-load related SPEC, tests, code, docs) |
|
|
1190
1207
|
| **PostToolUse** | ✅ Active | Auto-run tests after code changes (9 languages: Python, TS, JS, Go, Rust, Java, Kotlin, Swift, Dart) |
|
|
1191
1208
|
| **SessionEnd** | ✅ Active | Session cleanup and state saving |
|
|
@@ -1219,18 +1236,18 @@ If you need to temporarily disable hooks, edit `.claude/settings.json`:
|
|
|
1219
1236
|
|
|
1220
1237
|
---
|
|
1221
1238
|
|
|
1222
|
-
##
|
|
1239
|
+
## Latest Updates (New!)
|
|
1223
1240
|
|
|
1224
1241
|
| Version | Key Features | Date |
|
|
1225
1242
|
| ---------- | ------------------------------------------------------------------------------------ | ---------- |
|
|
1243
|
+
| **v0.4.11** | ✨ TAG Guard system + CLAUDE.md formatting improvements + Code cleanup | 2025-10-23 |
|
|
1244
|
+
| **v0.4.10** | 🔧 Hook robustness improvements + Bilingual documentation + Template language config | 2025-10-23 |
|
|
1245
|
+
| **v0.4.9** | 🎯 Hook JSON schema validation fixes + Comprehensive tests (468/468 passing) | 2025-10-23 |
|
|
1246
|
+
| **v0.4.8** | 🚀 Release automation + PyPI deployment + Skills refinement | 2025-10-23 |
|
|
1247
|
+
| **v0.4.7** | 📖 Korean language optimization + SPEC-First principle documentation | 2025-10-22 |
|
|
1226
1248
|
| **v0.4.6** | 🎉 Complete Skills v2.0 (100% Production-Ready) + 85,000 lines official docs + 300+ TDD examples | 2025-10-22 |
|
|
1227
|
-
| **v0.4.5** | ✅ CI/CD fixes + Multi-language README + Deployment cleanup | 2025-10-22 |
|
|
1228
|
-
| **v0.4.4** | Korean language support | 2025-10-21 |
|
|
1229
|
-
| **v0.4.3** | Interactive question tool (TUI menu) | 2025-10-21 |
|
|
1230
|
-
| **v0.4.1** | Skills localization | 2025-10-21 |
|
|
1231
|
-
| **v0.4.0** | Claude Skills + AI team + 4-stage workflow | 2025-10-21 |
|
|
1232
1249
|
|
|
1233
|
-
> 📦 **Install Now**: `pip install moai-adk==0.4.
|
|
1250
|
+
> 📦 **Install Now**: `pip install moai-adk==0.4.11` or `uv tool install moai-adk==0.4.11`
|
|
1234
1251
|
|
|
1235
1252
|
---
|
|
1236
1253
|
|
|
@@ -1254,24 +1271,24 @@ Let’s build a Mini Kanban Board web application designed to help you master Mo
|
|
|
1254
1271
|
|
|
1255
1272
|
```mermaid
|
|
1256
1273
|
gantt
|
|
1257
|
-
title Mini Kanban Board
|
|
1274
|
+
title Mini Kanban Board - 4-week plan
|
|
1258
1275
|
dateFormat YYYY-MM-DD
|
|
1259
1276
|
|
|
1260
1277
|
section Phase 1: Backend Basics
|
|
1261
|
-
|
|
1262
|
-
|
|
1278
|
+
Define SPEC-001-004 :active, ch07-spec, 2025-11-03, 1d
|
|
1279
|
+
Implement SpecScanner (TDD) :active, ch07-impl, 2025-11-04, 1d
|
|
1263
1280
|
|
|
1264
1281
|
section Phase 2: Backend Advanced
|
|
1265
|
-
|
|
1266
|
-
|
|
1282
|
+
Implement REST API :active, ch08-api, 2025-11-05, 1d
|
|
1283
|
+
WebSocket + File Watch :active, ch08-ws, 2025-11-06, 1d
|
|
1267
1284
|
|
|
1268
1285
|
section Phase 3: Frontend Basics
|
|
1269
|
-
|
|
1270
|
-
|
|
1286
|
+
React init + SPEC-009-012 :active, ch09-spec, 2025-11-10, 1d
|
|
1287
|
+
Kanban Board (TDD) :active, ch09-impl, 2025-11-11, 1d
|
|
1271
1288
|
|
|
1272
1289
|
section Phase 4: Advanced + Deploy
|
|
1273
|
-
|
|
1274
|
-
|
|
1290
|
+
E2E + CI/CD :active, ch10-e2e, 2025-11-12, 1d
|
|
1291
|
+
Docker Compose + Optimize :active, ch10-deploy, 2025-11-13, 1d
|
|
1275
1292
|
```
|
|
1276
1293
|
|
|
1277
1294
|
### 16‑SPEC Roadmap
|
|
@@ -1522,8 +1539,8 @@ cd frontend
|
|
|
1522
1539
|
| ------------------------ | ------------------------------------------------------- |
|
|
1523
1540
|
| **GitHub Repository** | https://github.com/modu-ai/moai-adk |
|
|
1524
1541
|
| **Issues & Discussions** | https://github.com/modu-ai/moai-adk/issues |
|
|
1525
|
-
| **PyPI Package** | https://pypi.org/project/moai-adk/ (Latest: v0.4.
|
|
1526
|
-
| **Latest Release** | https://github.com/modu-ai/moai-adk/releases/tag/v0.4.
|
|
1542
|
+
| **PyPI Package** | https://pypi.org/project/moai-adk/ (Latest: v0.4.11) |
|
|
1543
|
+
| **Latest Release** | https://github.com/modu-ai/moai-adk/releases/tag/v0.4.11 |
|
|
1527
1544
|
| **Documentation** | See `.moai/`, `.claude/`, `docs/` within project |
|
|
1528
1545
|
|
|
1529
1546
|
---
|
|
@@ -1544,10 +1561,12 @@ Start a new experience of **trustworthy AI development** with Alfred! 🤖
|
|
|
1544
1561
|
|
|
1545
1562
|
---
|
|
1546
1563
|
|
|
1547
|
-
**MoAI-ADK v0.4.
|
|
1564
|
+
**MoAI-ADK v0.4.11** — SPEC-First TDD with AI SuperAgent & Complete Skills v2.0 + TAG Guard
|
|
1548
1565
|
- 📦 PyPI: https://pypi.org/project/moai-adk/
|
|
1549
1566
|
- 🏠 GitHub: https://github.com/modu-ai/moai-adk
|
|
1550
1567
|
- 📝 License: MIT
|
|
1551
|
-
- ⭐ Skills:
|
|
1568
|
+
- ⭐ Skills: 55+ Production-Ready Guides
|
|
1569
|
+
- ✅ Tests: 467/476 Passing (85.60% coverage)
|
|
1570
|
+
- 🏷️ TAG Guard: Automatic @TAG validation in PreToolUse Hook
|
|
1552
1571
|
|
|
1553
1572
|
---
|
|
@@ -151,7 +151,7 @@ uv tool install moai-adk
|
|
|
151
151
|
|
|
152
152
|
# Verify installation
|
|
153
153
|
moai-adk --version
|
|
154
|
-
# Output: MoAI-ADK v0.4.
|
|
154
|
+
# Output: MoAI-ADK v0.4.11
|
|
155
155
|
```
|
|
156
156
|
|
|
157
157
|
Once installed, you can use the `moai-adk` command anywhere.
|
|
@@ -1069,7 +1069,7 @@ Hooks are **event-driven** scripts that trigger automatically at specific points
|
|
|
1069
1069
|
#### 2. PreToolUse (Before Tool Execution)
|
|
1070
1070
|
|
|
1071
1071
|
**Triggers**: Before executing file edits, Bash commands, or MultiEdit operations
|
|
1072
|
-
**Purpose**: Detect risky operations and automatically create safety checkpoints
|
|
1072
|
+
**Purpose**: Detect risky operations and automatically create safety checkpoints + TAG Guard
|
|
1073
1073
|
|
|
1074
1074
|
**Protection Against**:
|
|
1075
1075
|
- `rm -rf` (file deletion)
|
|
@@ -1077,13 +1077,30 @@ Hooks are **event-driven** scripts that trigger automatically at specific points
|
|
|
1077
1077
|
- Editing critical files (`CLAUDE.md`, `config.json`)
|
|
1078
1078
|
- Mass edits (10+ files at once via MultiEdit)
|
|
1079
1079
|
|
|
1080
|
+
**TAG Guard (New in v0.4.11)**:
|
|
1081
|
+
Automatically detects missing @TAG annotations in changed files:
|
|
1082
|
+
- Scans staged, modified, and untracked files
|
|
1083
|
+
- Warns when SPEC/TEST/CODE/DOC files lack required @TAG markers
|
|
1084
|
+
- Configurable rules via `.moai/tag-rules.json`
|
|
1085
|
+
- Non-blocking (gentle reminder, doesn't stop execution)
|
|
1086
|
+
|
|
1080
1087
|
**What You See**:
|
|
1081
1088
|
```
|
|
1082
1089
|
🛡️ Checkpoint created: before-delete-20251023-143000
|
|
1083
1090
|
Operation: delete
|
|
1084
1091
|
```
|
|
1085
1092
|
|
|
1086
|
-
|
|
1093
|
+
Or when TAGs are missing:
|
|
1094
|
+
```
|
|
1095
|
+
⚠️ TAG 누락 감지: 생성/수정한 파일 중 @TAG가 없는 항목이 있습니다.
|
|
1096
|
+
- src/auth/service.py → 기대 태그: @CODE:
|
|
1097
|
+
- tests/test_auth.py → 기대 태그: @TEST:
|
|
1098
|
+
권장 조치:
|
|
1099
|
+
1) SPEC/TEST/CODE/DOC 유형에 맞는 @TAG를 파일 상단 주석이나 헤더에 추가
|
|
1100
|
+
2) rg로 확인: rg '@(SPEC|TEST|CODE|DOC):' -n <경로>
|
|
1101
|
+
```
|
|
1102
|
+
|
|
1103
|
+
**Why It Matters**: Prevents data loss from mistakes and ensures @TAG traceability. You can always restore from the checkpoint if something goes wrong.
|
|
1087
1104
|
|
|
1088
1105
|
#### 3. UserPromptSubmit (Prompt Input)
|
|
1089
1106
|
|
|
@@ -1146,7 +1163,7 @@ If you need to temporarily disable hooks, edit `.claude/settings.json`:
|
|
|
1146
1163
|
| Hook | Status | Feature |
|
|
1147
1164
|
|------|--------|---------|
|
|
1148
1165
|
| **SessionStart** | ✅ Active | Project status summary (language, Git, SPEC progress, checkpoints) |
|
|
1149
|
-
| **PreToolUse** | ✅ Active | Risk detection + auto checkpoint (critical-delete, delete, merge, script) |
|
|
1166
|
+
| **PreToolUse** | ✅ Active | Risk detection + auto checkpoint (critical-delete, delete, merge, script) + **TAG Guard** (missing @TAG detection) |
|
|
1150
1167
|
| **UserPromptSubmit** | ✅ Active | JIT context loading (auto-load related SPEC, tests, code, docs) |
|
|
1151
1168
|
| **PostToolUse** | ✅ Active | Auto-run tests after code changes (9 languages: Python, TS, JS, Go, Rust, Java, Kotlin, Swift, Dart) |
|
|
1152
1169
|
| **SessionEnd** | ✅ Active | Session cleanup and state saving |
|
|
@@ -1180,18 +1197,18 @@ If you need to temporarily disable hooks, edit `.claude/settings.json`:
|
|
|
1180
1197
|
|
|
1181
1198
|
---
|
|
1182
1199
|
|
|
1183
|
-
##
|
|
1200
|
+
## Latest Updates (New!)
|
|
1184
1201
|
|
|
1185
1202
|
| Version | Key Features | Date |
|
|
1186
1203
|
| ---------- | ------------------------------------------------------------------------------------ | ---------- |
|
|
1204
|
+
| **v0.4.11** | ✨ TAG Guard system + CLAUDE.md formatting improvements + Code cleanup | 2025-10-23 |
|
|
1205
|
+
| **v0.4.10** | 🔧 Hook robustness improvements + Bilingual documentation + Template language config | 2025-10-23 |
|
|
1206
|
+
| **v0.4.9** | 🎯 Hook JSON schema validation fixes + Comprehensive tests (468/468 passing) | 2025-10-23 |
|
|
1207
|
+
| **v0.4.8** | 🚀 Release automation + PyPI deployment + Skills refinement | 2025-10-23 |
|
|
1208
|
+
| **v0.4.7** | 📖 Korean language optimization + SPEC-First principle documentation | 2025-10-22 |
|
|
1187
1209
|
| **v0.4.6** | 🎉 Complete Skills v2.0 (100% Production-Ready) + 85,000 lines official docs + 300+ TDD examples | 2025-10-22 |
|
|
1188
|
-
| **v0.4.5** | ✅ CI/CD fixes + Multi-language README + Deployment cleanup | 2025-10-22 |
|
|
1189
|
-
| **v0.4.4** | Korean language support | 2025-10-21 |
|
|
1190
|
-
| **v0.4.3** | Interactive question tool (TUI menu) | 2025-10-21 |
|
|
1191
|
-
| **v0.4.1** | Skills localization | 2025-10-21 |
|
|
1192
|
-
| **v0.4.0** | Claude Skills + AI team + 4-stage workflow | 2025-10-21 |
|
|
1193
1210
|
|
|
1194
|
-
> 📦 **Install Now**: `pip install moai-adk==0.4.
|
|
1211
|
+
> 📦 **Install Now**: `pip install moai-adk==0.4.11` or `uv tool install moai-adk==0.4.11`
|
|
1195
1212
|
|
|
1196
1213
|
---
|
|
1197
1214
|
|
|
@@ -1215,24 +1232,24 @@ Let’s build a Mini Kanban Board web application designed to help you master Mo
|
|
|
1215
1232
|
|
|
1216
1233
|
```mermaid
|
|
1217
1234
|
gantt
|
|
1218
|
-
title Mini Kanban Board
|
|
1235
|
+
title Mini Kanban Board - 4-week plan
|
|
1219
1236
|
dateFormat YYYY-MM-DD
|
|
1220
1237
|
|
|
1221
1238
|
section Phase 1: Backend Basics
|
|
1222
|
-
|
|
1223
|
-
|
|
1239
|
+
Define SPEC-001-004 :active, ch07-spec, 2025-11-03, 1d
|
|
1240
|
+
Implement SpecScanner (TDD) :active, ch07-impl, 2025-11-04, 1d
|
|
1224
1241
|
|
|
1225
1242
|
section Phase 2: Backend Advanced
|
|
1226
|
-
|
|
1227
|
-
|
|
1243
|
+
Implement REST API :active, ch08-api, 2025-11-05, 1d
|
|
1244
|
+
WebSocket + File Watch :active, ch08-ws, 2025-11-06, 1d
|
|
1228
1245
|
|
|
1229
1246
|
section Phase 3: Frontend Basics
|
|
1230
|
-
|
|
1231
|
-
|
|
1247
|
+
React init + SPEC-009-012 :active, ch09-spec, 2025-11-10, 1d
|
|
1248
|
+
Kanban Board (TDD) :active, ch09-impl, 2025-11-11, 1d
|
|
1232
1249
|
|
|
1233
1250
|
section Phase 4: Advanced + Deploy
|
|
1234
|
-
|
|
1235
|
-
|
|
1251
|
+
E2E + CI/CD :active, ch10-e2e, 2025-11-12, 1d
|
|
1252
|
+
Docker Compose + Optimize :active, ch10-deploy, 2025-11-13, 1d
|
|
1236
1253
|
```
|
|
1237
1254
|
|
|
1238
1255
|
### 16‑SPEC Roadmap
|
|
@@ -1483,8 +1500,8 @@ cd frontend
|
|
|
1483
1500
|
| ------------------------ | ------------------------------------------------------- |
|
|
1484
1501
|
| **GitHub Repository** | https://github.com/modu-ai/moai-adk |
|
|
1485
1502
|
| **Issues & Discussions** | https://github.com/modu-ai/moai-adk/issues |
|
|
1486
|
-
| **PyPI Package** | https://pypi.org/project/moai-adk/ (Latest: v0.4.
|
|
1487
|
-
| **Latest Release** | https://github.com/modu-ai/moai-adk/releases/tag/v0.4.
|
|
1503
|
+
| **PyPI Package** | https://pypi.org/project/moai-adk/ (Latest: v0.4.11) |
|
|
1504
|
+
| **Latest Release** | https://github.com/modu-ai/moai-adk/releases/tag/v0.4.11 |
|
|
1488
1505
|
| **Documentation** | See `.moai/`, `.claude/`, `docs/` within project |
|
|
1489
1506
|
|
|
1490
1507
|
---
|
|
@@ -1505,10 +1522,12 @@ Start a new experience of **trustworthy AI development** with Alfred! 🤖
|
|
|
1505
1522
|
|
|
1506
1523
|
---
|
|
1507
1524
|
|
|
1508
|
-
**MoAI-ADK v0.4.
|
|
1525
|
+
**MoAI-ADK v0.4.11** — SPEC-First TDD with AI SuperAgent & Complete Skills v2.0 + TAG Guard
|
|
1509
1526
|
- 📦 PyPI: https://pypi.org/project/moai-adk/
|
|
1510
1527
|
- 🏠 GitHub: https://github.com/modu-ai/moai-adk
|
|
1511
1528
|
- 📝 License: MIT
|
|
1512
|
-
- ⭐ Skills:
|
|
1529
|
+
- ⭐ Skills: 55+ Production-Ready Guides
|
|
1530
|
+
- ✅ Tests: 467/476 Passing (85.60% coverage)
|
|
1531
|
+
- 🏷️ TAG Guard: Automatic @TAG validation in PreToolUse Hook
|
|
1513
1532
|
|
|
1514
1533
|
---
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
# Hook JSON 스키마 검증 및 해결 보고서
|
|
2
|
+
|
|
3
|
+
**작성일**: 2025-10-23
|
|
4
|
+
**태그**: @CODE:HOOKS-REFACTOR-001
|
|
5
|
+
**상태**: ✅ 해결 완료
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 📋 문제 요약
|
|
10
|
+
|
|
11
|
+
### 초기 오류
|
|
12
|
+
```
|
|
13
|
+
SessionStart:startup hook error: JSON validation failed: Hook JSON output validation failed
|
|
14
|
+
Expected schema: { ... "systemMessage": ... }
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### 근본 원인
|
|
18
|
+
Claude Code Hook 스키마에서 `systemMessage`가 **최상위 필드**여야 하지만, 일부 구현에서는 이를 `hookSpecificOutput` 내부에 중첩시키고 있었습니다.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 🔍 분석 결과
|
|
23
|
+
|
|
24
|
+
### Claude Code 공식 Hook 스키마
|
|
25
|
+
|
|
26
|
+
#### 1. 일반 Hook 이벤트 (SessionStart, PreToolUse, PostToolUse, SessionEnd 등)
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"continue": true|false, // ✅ 기본 필드
|
|
31
|
+
"systemMessage": "string", // ✅ 최상위 필드 (NOT in hookSpecificOutput)
|
|
32
|
+
"decision": "approve"|"block"|undefined, // ✅ 선택적
|
|
33
|
+
"reason": "string", // ✅ 선택적
|
|
34
|
+
"permissionDecision": "allow"|"deny"|"ask"|undefined, // ✅ 선택적
|
|
35
|
+
"suppressOutput": true|false // ✅ 선택적
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
#### 2. UserPromptSubmit 전용 스키마
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"continue": true,
|
|
44
|
+
"hookSpecificOutput": { // ✅ UserPromptSubmit에만 사용
|
|
45
|
+
"hookEventName": "UserPromptSubmit",
|
|
46
|
+
"additionalContext": "string"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 핵심 규칙
|
|
52
|
+
|
|
53
|
+
| 규칙 | 설명 |
|
|
54
|
+
|------|------|
|
|
55
|
+
| **systemMessage 위치** | 최상위 필드 (`output["systemMessage"]`) |
|
|
56
|
+
| **hookSpecificOutput** | UserPromptSubmit 전용 |
|
|
57
|
+
| **내부 필드** | `context_files`, `suggestions`, `exit_code`는 Python 로직용 (JSON 출력 제외) |
|
|
58
|
+
| **JSON 직렬화** | 모든 필드는 JSON 직렬화 가능해야 함 |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## ✅ 해결 방안
|
|
63
|
+
|
|
64
|
+
### 1. 코드 수정
|
|
65
|
+
|
|
66
|
+
**파일**: `.claude/hooks/alfred/core/__init__.py`
|
|
67
|
+
|
|
68
|
+
#### `to_dict()` 메서드 (라인 63-118)
|
|
69
|
+
```python
|
|
70
|
+
def to_dict(self) -> dict[str, Any]:
|
|
71
|
+
"""Claude Code 표준 Hook 출력 스키마로 변환"""
|
|
72
|
+
output: dict[str, Any] = {}
|
|
73
|
+
|
|
74
|
+
# 1. decision 또는 continue 추가
|
|
75
|
+
if self.decision:
|
|
76
|
+
output["decision"] = self.decision
|
|
77
|
+
else:
|
|
78
|
+
output["continue"] = self.continue_execution
|
|
79
|
+
|
|
80
|
+
# 2. reason 추가 (decision 또는 permissionDecision과 함께)
|
|
81
|
+
if self.reason:
|
|
82
|
+
output["reason"] = self.reason
|
|
83
|
+
|
|
84
|
+
# 3. suppressOutput 추가 (True인 경우만)
|
|
85
|
+
if self.suppress_output:
|
|
86
|
+
output["suppressOutput"] = True
|
|
87
|
+
|
|
88
|
+
# 4. permissionDecision 추가
|
|
89
|
+
if self.permission_decision:
|
|
90
|
+
output["permissionDecision"] = self.permission_decision
|
|
91
|
+
|
|
92
|
+
# 5. ⭐ systemMessage를 최상위 필드로 추가 (NOT in hookSpecificOutput)
|
|
93
|
+
if self.system_message:
|
|
94
|
+
output["systemMessage"] = self.system_message
|
|
95
|
+
|
|
96
|
+
# 🚫 내부 필드는 JSON 출력에서 제외
|
|
97
|
+
# - context_files: JIT 문맥 로드 (내부용)
|
|
98
|
+
# - suggestions: 제안 (내부용)
|
|
99
|
+
# - exit_code: 진단 (내부용)
|
|
100
|
+
|
|
101
|
+
return output
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
#### `to_user_prompt_submit_dict()` 메서드 (라인 120-160)
|
|
105
|
+
```python
|
|
106
|
+
def to_user_prompt_submit_dict(self) -> dict[str, Any]:
|
|
107
|
+
"""UserPromptSubmit Hook 전용 스키마"""
|
|
108
|
+
if self.context_files:
|
|
109
|
+
context_str = "\n".join([f"📎 Context: {f}" for f in self.context_files])
|
|
110
|
+
else:
|
|
111
|
+
context_str = ""
|
|
112
|
+
|
|
113
|
+
if self.system_message:
|
|
114
|
+
if context_str:
|
|
115
|
+
context_str = f"{self.system_message}\n\n{context_str}"
|
|
116
|
+
else:
|
|
117
|
+
context_str = self.system_message
|
|
118
|
+
|
|
119
|
+
return {
|
|
120
|
+
"continue": self.continue_execution,
|
|
121
|
+
"hookSpecificOutput": {
|
|
122
|
+
"hookEventName": "UserPromptSubmit",
|
|
123
|
+
"additionalContext": context_str
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### 2. 설정 검증
|
|
129
|
+
|
|
130
|
+
**파일**: `.claude/settings.json` (라인 8-60)
|
|
131
|
+
|
|
132
|
+
```json
|
|
133
|
+
{
|
|
134
|
+
"hooks": {
|
|
135
|
+
"SessionStart": [
|
|
136
|
+
{
|
|
137
|
+
"hooks": [
|
|
138
|
+
{
|
|
139
|
+
"command": "uv run \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/alfred/alfred_hooks.py SessionStart",
|
|
140
|
+
"type": "command"
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
],
|
|
145
|
+
"UserPromptSubmit": [
|
|
146
|
+
{
|
|
147
|
+
"hooks": [
|
|
148
|
+
{
|
|
149
|
+
"command": "uv run \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/alfred/alfred_hooks.py UserPromptSubmit",
|
|
150
|
+
"type": "command"
|
|
151
|
+
}
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
]
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## 🧪 검증 결과
|
|
162
|
+
|
|
163
|
+
### 1. 자동 테스트 (8/8 통과)
|
|
164
|
+
|
|
165
|
+
**파일**: `.claude/hooks/alfred/test_hook_output.py`
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
$ cd .claude/hooks/alfred && python test_hook_output.py
|
|
169
|
+
|
|
170
|
+
✅ Test 1: Basic output - PASSED
|
|
171
|
+
✅ Test 2: systemMessage (top-level) - PASSED
|
|
172
|
+
✅ Test 3: decision + reason - PASSED
|
|
173
|
+
✅ Test 4: UserPromptSubmit schema - PASSED
|
|
174
|
+
✅ Test 5: permissionDecision - PASSED
|
|
175
|
+
✅ Test 6: SessionStart typical output - PASSED
|
|
176
|
+
✅ Test 7: JSON serializable - PASSED
|
|
177
|
+
✅ Test 8: UserPromptSubmit with system_message - PASSED
|
|
178
|
+
|
|
179
|
+
✅ ALL 8 TESTS PASSED
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### 2. 실제 Hook 실행 검증
|
|
183
|
+
|
|
184
|
+
#### SessionStart (compact phase)
|
|
185
|
+
```bash
|
|
186
|
+
$ echo '{"cwd": ".", "phase": "compact"}' | uv run .claude/hooks/alfred/alfred_hooks.py SessionStart
|
|
187
|
+
|
|
188
|
+
{
|
|
189
|
+
"continue": true,
|
|
190
|
+
"systemMessage": "🚀 MoAI-ADK Session Started\n Language: python\n Branch: develop (d905363)\n Changes: 215\n SPEC Progress: 30/31 (96%)\n Checkpoints: 2 available\n - delete-20251022-134841\n - critical-file-20251019-230247\n Restore: /alfred:0-project restore"
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
✅ **검증**:
|
|
195
|
+
- `systemMessage`가 최상위 필드
|
|
196
|
+
- JSON 유효성 확인
|
|
197
|
+
- `hookSpecificOutput` 없음 (올바름)
|
|
198
|
+
|
|
199
|
+
#### SessionStart (clear phase)
|
|
200
|
+
```bash
|
|
201
|
+
$ echo '{"cwd": ".", "phase": "clear"}' | uv run .claude/hooks/alfred/alfred_hooks.py SessionStart
|
|
202
|
+
|
|
203
|
+
{"continue": true}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
✅ **검증**:
|
|
207
|
+
- 최소 스키마 (continue만)
|
|
208
|
+
- clear 단계에서 중복 출력 방지
|
|
209
|
+
|
|
210
|
+
#### UserPromptSubmit
|
|
211
|
+
```bash
|
|
212
|
+
$ echo '{"cwd": ".", "userPrompt": "test"}' | uv run .claude/hooks/alfred/alfred_hooks.py UserPromptSubmit
|
|
213
|
+
|
|
214
|
+
{
|
|
215
|
+
"continue": true,
|
|
216
|
+
"hookSpecificOutput": {
|
|
217
|
+
"hookEventName": "UserPromptSubmit",
|
|
218
|
+
"additionalContext": "📎 Loaded 1 context file(s)\n\n📎 Context: tests/"
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
✅ **검증**:
|
|
224
|
+
- UserPromptSubmit 특수 스키마
|
|
225
|
+
- `hookSpecificOutput` 사용 (올바름)
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## 📚 각 Hook 이벤트별 스키마 가이드
|
|
230
|
+
|
|
231
|
+
| 이벤트 | 최소 JSON | 예시 | 차단 가능 |
|
|
232
|
+
|--------|-----------|------|----------|
|
|
233
|
+
| **SessionStart** | `{"continue": true}` | 프로젝트 상태 표시 | ❌ No |
|
|
234
|
+
| **SessionEnd** | `{"continue": true}` | 정리 작업 | ❌ No |
|
|
235
|
+
| **PreToolUse** | `{"continue": true}` | 도구 실행 승인/차단 | ✅ Yes |
|
|
236
|
+
| **PostToolUse** | `{"continue": true}` | 도구 실행 후 피드백 | ❌ No* |
|
|
237
|
+
| **UserPromptSubmit** | 특수 스키마 | 프롬프트 문맥 추가 | ✅ Yes |
|
|
238
|
+
| **Notification** | `{"continue": true}` | 알림 처리 | ❌ No |
|
|
239
|
+
| **Stop** | `{"continue": true}` | 종료 차단 | ✅ Yes |
|
|
240
|
+
| **SubagentStop** | `{"continue": true}` | 서브에이전트 종료 차단 | ✅ Yes |
|
|
241
|
+
|
|
242
|
+
*: PostToolUse는 도구가 이미 실행되었으므로 차단 불가능하지만, 피드백 제공 가능
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 🔧 구현 세부사항
|
|
247
|
+
|
|
248
|
+
### HookResult 클래스 필드
|
|
249
|
+
|
|
250
|
+
```python
|
|
251
|
+
@dataclass
|
|
252
|
+
class HookResult:
|
|
253
|
+
# ✅ Claude Code 표준 필드 (JSON에 포함)
|
|
254
|
+
continue_execution: bool = True
|
|
255
|
+
suppress_output: bool = False
|
|
256
|
+
decision: Literal["approve", "block"] | None = None
|
|
257
|
+
reason: str | None = None
|
|
258
|
+
permission_decision: Literal["allow", "deny", "ask"] | None = None
|
|
259
|
+
system_message: str | None = None # ⭐ TOP-LEVEL in JSON
|
|
260
|
+
|
|
261
|
+
# 🚫 내부 필드 (JSON 출력 제외)
|
|
262
|
+
context_files: list[str] = field(default_factory=list)
|
|
263
|
+
suggestions: list[str] = field(default_factory=list)
|
|
264
|
+
exit_code: int = 0
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### 메서드별 역할
|
|
268
|
+
|
|
269
|
+
| 메서드 | 사용 사건 | 반환 스키마 |
|
|
270
|
+
|--------|---------|----------|
|
|
271
|
+
| `to_dict()` | 일반 Hook 이벤트 | 표준 Claude Code 스키마 |
|
|
272
|
+
| `to_user_prompt_submit_dict()` | UserPromptSubmit 이벤트 | 특수 스키마 + hookSpecificOutput |
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## 📖 참고 문서
|
|
277
|
+
|
|
278
|
+
### 공식 Claude Code 문서
|
|
279
|
+
- **Claude Code Hooks**: https://docs.claude.com/en/docs/claude-code/hooks
|
|
280
|
+
- **Hook Output Schema**: https://docs.claude.com/en/docs/claude-code/hooks#output-schema
|
|
281
|
+
|
|
282
|
+
### Context7 참고 자료
|
|
283
|
+
- **Claude Code Hooks Mastery** (Trust Score: 8.3, 100+ 코드 스니펫)
|
|
284
|
+
- **Claude Code Templates** (Trust Score: 10)
|
|
285
|
+
|
|
286
|
+
### 프로젝트 문서
|
|
287
|
+
- **CLAUDE.md**: `Error Message Standard (Shared)` 섹션
|
|
288
|
+
- **Hook 구현**: `.claude/hooks/alfred/handlers/` 디렉토리
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## 🎯 결론
|
|
293
|
+
|
|
294
|
+
✅ **상태**: 해결 완료
|
|
295
|
+
✅ **검증**: 8/8 자동 테스트 통과
|
|
296
|
+
✅ **실제 실행**: 모든 Hook 이벤트 정상 작동
|
|
297
|
+
|
|
298
|
+
### 핵심 수정사항
|
|
299
|
+
1. `systemMessage`를 최상위 필드로 이동 (NOT in hookSpecificOutput)
|
|
300
|
+
2. UserPromptSubmit 특수 스키마 분리
|
|
301
|
+
3. 내부 필드 JSON 출력 제외
|
|
302
|
+
4. 모든 Hook 이벤트 스키마 정규화
|
|
303
|
+
|
|
304
|
+
### 다음 단계
|
|
305
|
+
- ✅ Hook 스키마 검증 자동화
|
|
306
|
+
- ✅ 테스트 스크립트 작성
|
|
307
|
+
- ⏭️ 현재 상태 유지 및 모니터링
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
**검증 완료**: 2025-10-23
|
|
312
|
+
**담당자**: @agent-cc-manager
|
|
313
|
+
**참고**: @CODE:HOOKS-REFACTOR-001
|