moai-adk 0.11.0__py3-none-any.whl → 0.12.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/core/issue_creator.py +2 -2
- moai_adk/core/project/detector.py +195 -12
- moai_adk/core/tags/ci_validator.py +1 -1
- moai_adk/core/tags/pre_commit_validator.py +1 -1
- moai_adk/core/tags/validator.py +1 -1
- moai_adk/templates/.claude/agents/alfred/cc-manager.md +316 -0
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +208 -0
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +214 -0
- moai_adk/templates/.claude/agents/alfred/git-manager.md +406 -0
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +350 -0
- moai_adk/templates/.claude/agents/alfred/project-manager.md +273 -0
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +343 -0
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +865 -0
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +287 -0
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +287 -0
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +326 -0
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +375 -0
- moai_adk/templates/.claude/commands/alfred/0-project.md +1275 -0
- moai_adk/templates/.claude/commands/alfred/1-plan.md +734 -0
- moai_adk/templates/.claude/commands/alfred/2-run.md +551 -0
- moai_adk/templates/.claude/commands/alfred/3-sync.md +689 -0
- moai_adk/templates/.claude/commands/alfred/9-feedback.md +149 -0
- moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +206 -0
- moai_adk/templates/.claude/hooks/alfred/core/project.py +742 -0
- moai_adk/templates/.claude/hooks/alfred/core/timeout.py +136 -0
- moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +108 -0
- moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +198 -0
- moai_adk/templates/.claude/hooks/alfred/notification__handle_events.py +95 -0
- moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +95 -0
- moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +101 -0
- moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +95 -0
- moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +97 -0
- moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +170 -0
- moai_adk/templates/.claude/hooks/alfred/shared/core/checkpoint.py +271 -0
- moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +67 -0
- moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +749 -0
- moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +230 -0
- moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +198 -0
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +21 -0
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +154 -0
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +174 -0
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +87 -0
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +61 -0
- moai_adk/templates/.claude/hooks/alfred/stop__handle_interrupt.py +95 -0
- moai_adk/templates/.claude/hooks/alfred/subagent_stop__handle_subagent_end.py +95 -0
- moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +111 -0
- moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +1 -0
- moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +136 -0
- moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +640 -0
- moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +696 -0
- moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +474 -0
- moai_adk/templates/.claude/settings.json +144 -0
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +113 -0
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +122 -0
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +29 -0
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +237 -0
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +615 -0
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +653 -0
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +113 -0
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +113 -0
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +113 -0
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +113 -0
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +269 -0
- moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +32 -0
- moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +298 -0
- moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +26 -0
- moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +307 -0
- moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +21 -0
- moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +252 -0
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +19 -0
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +19 -0
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +24 -0
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +199 -0
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +39 -0
- moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +316 -0
- moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +18 -0
- moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +263 -0
- moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +30 -0
- moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +291 -0
- moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +15 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +290 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +1633 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +660 -0
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +123 -0
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +123 -0
- moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +123 -0
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-database/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +124 -0
- moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +124 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +123 -0
- moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +123 -0
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +123 -0
- moai_adk/templates/.claude/skills/moai-domain-security/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-security/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +123 -0
- moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +303 -0
- moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +1064 -0
- moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +1047 -0
- moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +113 -0
- moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +113 -0
- moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +113 -0
- moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +116 -0
- moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +122 -0
- moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +29 -0
- moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +28 -0
- moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +307 -0
- moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
- moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +1099 -0
- moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +124 -0
- moai_adk/templates/.claude/skills/moai-lang-c/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-c/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +124 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +123 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +123 -0
- moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +124 -0
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +124 -0
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +125 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +32 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +124 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +123 -0
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +431 -0
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +624 -0
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +316 -0
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +123 -0
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +124 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +124 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +123 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +123 -0
- moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +124 -0
- moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +31 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +123 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +30 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +127 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +29 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +34 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +482 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +278 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +524 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +477 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +429 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +391 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +431 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +577 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +271 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +466 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +583 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +526 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +465 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +328 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +312 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +245 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +285 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +278 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +303 -0
- moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +137 -0
- moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +219 -0
- moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +161 -0
- moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +541 -0
- moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +622 -0
- moai_adk/templates/.github/workflows/c-tag-validation.yml +83 -0
- moai_adk/templates/.github/workflows/cpp-tag-validation.yml +79 -0
- moai_adk/templates/.github/workflows/csharp-tag-validation.yml +65 -0
- moai_adk/templates/.github/workflows/dart-tag-validation.yml +82 -0
- moai_adk/templates/.github/workflows/java-tag-validation.yml +75 -0
- moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +67 -0
- moai_adk/templates/.github/workflows/php-tag-validation.yml +56 -0
- moai_adk/templates/.github/workflows/ruby-tag-validation.yml +68 -0
- moai_adk/templates/.github/workflows/rust-tag-validation.yml +73 -0
- moai_adk/templates/.github/workflows/shell-tag-validation.yml +65 -0
- moai_adk/templates/.github/workflows/swift-tag-validation.yml +79 -0
- moai_adk/templates/.moai/config.json +113 -0
- moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +208 -0
- moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +369 -0
- moai_adk/templates/.moai/memory/CLAUDE-RULES.md +539 -0
- moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +344 -0
- moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +330 -0
- moai_adk/templates/.moai/memory/ISSUE-LABEL-MAPPING.md +150 -0
- moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +218 -0
- moai_adk/templates/.moai/memory/SPEC-METADATA.md +356 -0
- moai_adk/templates/.moai/memory/gitflow-protection-policy.md +330 -0
- moai_adk/templates/.moai/memory/spec-metadata.md +356 -0
- moai_adk/templates/.moai/project/product.md +161 -0
- moai_adk/templates/.moai/project/structure.md +156 -0
- moai_adk/templates/.moai/project/tech.md +227 -0
- moai_adk/templates/CLAUDE.md +90 -10
- moai_adk/templates/workflows/go-tag-validation.yml +130 -0
- moai_adk/templates/workflows/javascript-tag-validation.yml +135 -0
- moai_adk/templates/workflows/python-tag-validation.yml +118 -0
- moai_adk/templates/workflows/typescript-tag-validation.yml +154 -0
- {moai_adk-0.11.0.dist-info → moai_adk-0.12.0.dist-info}/METADATA +43 -1
- moai_adk-0.12.0.dist-info/RECORD +330 -0
- moai_adk-0.11.0.dist-info/RECORD +0 -77
- /moai_adk/templates/.github/workflows/{release.yml → moai-adk-release.yml} +0 -0
- /moai_adk/templates/.github/workflows/{spec-issue-sync.yml → moai-adk-spec-issue-sync.yml} +0 -0
- /moai_adk/templates/.github/workflows/{tag-validation.yml → moai-adk-tag-validation.yml} +0 -0
- {moai_adk-0.11.0.dist-info → moai_adk-0.12.0.dist-info}/WHEEL +0 -0
- {moai_adk-0.11.0.dist-info → moai_adk-0.12.0.dist-info}/entry_points.txt +0 -0
- {moai_adk-0.11.0.dist-info → moai_adk-0.12.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# @CODE:HOOKS-CLARITY-CKPT | SPEC: Individual hook files for better UX
|
|
3
|
+
"""PreToolUse Hook: Automatic Safety Checkpoint Creation
|
|
4
|
+
|
|
5
|
+
Claude Code Event: PreToolUse
|
|
6
|
+
Purpose: Detect risky operations and automatically create Git checkpoints before execution
|
|
7
|
+
Execution: Triggered before Edit, Write, or MultiEdit tools are used
|
|
8
|
+
Matcher: Edit|Write|MultiEdit
|
|
9
|
+
|
|
10
|
+
Output: System message with checkpoint information (if created)
|
|
11
|
+
|
|
12
|
+
Risky Operations Detected:
|
|
13
|
+
- Bash: rm -rf, git merge, git reset --hard
|
|
14
|
+
- Edit/Write: CLAUDE.md, config.json, critical files
|
|
15
|
+
- MultiEdit: Operations affecting ≥10 files
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
import json
|
|
19
|
+
import sys
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
from typing import Any
|
|
22
|
+
|
|
23
|
+
from utils.timeout import CrossPlatformTimeout, TimeoutError as PlatformTimeoutError
|
|
24
|
+
|
|
25
|
+
# Setup import path for shared modules
|
|
26
|
+
HOOKS_DIR = Path(__file__).parent
|
|
27
|
+
SHARED_DIR = HOOKS_DIR / "shared"
|
|
28
|
+
if str(SHARED_DIR) not in sys.path:
|
|
29
|
+
sys.path.insert(0, str(SHARED_DIR))
|
|
30
|
+
|
|
31
|
+
from handlers import handle_pre_tool_use
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def main() -> None:
|
|
37
|
+
"""Main entry point for PreToolUse hook
|
|
38
|
+
|
|
39
|
+
Analyzes tool usage and creates checkpoints for risky operations:
|
|
40
|
+
1. Detects dangerous patterns (rm -rf, git reset, etc.)
|
|
41
|
+
2. Creates Git checkpoint: checkpoint/before-{operation}-{timestamp}
|
|
42
|
+
3. Logs checkpoint to .moai/checkpoints.log
|
|
43
|
+
4. Returns guidance message to user
|
|
44
|
+
|
|
45
|
+
Exit Codes:
|
|
46
|
+
0: Success (checkpoint created or not needed)
|
|
47
|
+
1: Error (timeout, JSON parse failure, handler exception)
|
|
48
|
+
"""
|
|
49
|
+
# Set 5-second timeout
|
|
50
|
+
timeout = CrossPlatformTimeout(5)
|
|
51
|
+
timeout.start()
|
|
52
|
+
|
|
53
|
+
try:
|
|
54
|
+
# Read JSON payload from stdin
|
|
55
|
+
input_data = sys.stdin.read()
|
|
56
|
+
data = json.loads(input_data) if input_data.strip() else {}
|
|
57
|
+
|
|
58
|
+
# Call handler
|
|
59
|
+
result = handle_pre_tool_use(data)
|
|
60
|
+
|
|
61
|
+
# Output result as JSON
|
|
62
|
+
print(json.dumps(result.to_dict()))
|
|
63
|
+
sys.exit(0)
|
|
64
|
+
|
|
65
|
+
except PlatformTimeoutError:
|
|
66
|
+
# Timeout - return minimal valid response (allow operation to continue)
|
|
67
|
+
timeout_response: dict[str, Any] = {
|
|
68
|
+
"continue": True,
|
|
69
|
+
"systemMessage": "⚠️ Checkpoint creation timeout - operation proceeding without checkpoint",
|
|
70
|
+
}
|
|
71
|
+
print(json.dumps(timeout_response))
|
|
72
|
+
print("PreToolUse hook timeout after 5 seconds", file=sys.stderr)
|
|
73
|
+
sys.exit(1)
|
|
74
|
+
|
|
75
|
+
except json.JSONDecodeError as e:
|
|
76
|
+
# JSON parse error - allow operation to continue
|
|
77
|
+
error_response: dict[str, Any] = {
|
|
78
|
+
"continue": True,
|
|
79
|
+
"hookSpecificOutput": {"error": f"JSON parse error: {e}"},
|
|
80
|
+
}
|
|
81
|
+
print(json.dumps(error_response))
|
|
82
|
+
print(f"PreToolUse JSON parse error: {e}", file=sys.stderr)
|
|
83
|
+
sys.exit(1)
|
|
84
|
+
|
|
85
|
+
except Exception as e:
|
|
86
|
+
# Unexpected error - allow operation to continue
|
|
87
|
+
error_response: dict[str, Any] = {
|
|
88
|
+
"continue": True,
|
|
89
|
+
"hookSpecificOutput": {"error": f"PreToolUse error: {e}"},
|
|
90
|
+
}
|
|
91
|
+
print(json.dumps(error_response))
|
|
92
|
+
print(f"PreToolUse unexpected error: {e}", file=sys.stderr)
|
|
93
|
+
sys.exit(1)
|
|
94
|
+
|
|
95
|
+
finally:
|
|
96
|
+
# Always cancel alarm
|
|
97
|
+
timeout.cancel()
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
if __name__ == "__main__":
|
|
101
|
+
main()
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# @CODE:HOOKS-CLARITY-CLEAN | SPEC: Individual hook files for better UX
|
|
3
|
+
"""SessionEnd Hook: Session Cleanup and Finalization
|
|
4
|
+
|
|
5
|
+
Claude Code Event: SessionEnd
|
|
6
|
+
Purpose: Clean up resources and finalize session when Claude Code exits
|
|
7
|
+
Execution: Triggered when Claude Code session ends
|
|
8
|
+
|
|
9
|
+
Output: Continue execution (currently a stub for future enhancements)
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import json
|
|
13
|
+
import sys
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
from typing import Any
|
|
16
|
+
|
|
17
|
+
from utils.timeout import CrossPlatformTimeout, TimeoutError as PlatformTimeoutError
|
|
18
|
+
|
|
19
|
+
# Setup import path for shared modules
|
|
20
|
+
HOOKS_DIR = Path(__file__).parent
|
|
21
|
+
SHARED_DIR = HOOKS_DIR / "shared"
|
|
22
|
+
if str(SHARED_DIR) not in sys.path:
|
|
23
|
+
sys.path.insert(0, str(SHARED_DIR))
|
|
24
|
+
|
|
25
|
+
from handlers import handle_session_end
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def main() -> None:
|
|
31
|
+
"""Main entry point for SessionEnd hook
|
|
32
|
+
|
|
33
|
+
Currently a stub for future functionality:
|
|
34
|
+
- Clear temporary caches
|
|
35
|
+
- Save session metrics
|
|
36
|
+
- Upload analytics (if enabled)
|
|
37
|
+
- Cleanup background processes
|
|
38
|
+
|
|
39
|
+
Exit Codes:
|
|
40
|
+
0: Success
|
|
41
|
+
1: Error (timeout, JSON parse failure, handler exception)
|
|
42
|
+
"""
|
|
43
|
+
# Set 5-second timeout
|
|
44
|
+
timeout = CrossPlatformTimeout(5)
|
|
45
|
+
timeout.start()
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
# Read JSON payload from stdin
|
|
49
|
+
input_data = sys.stdin.read()
|
|
50
|
+
data = json.loads(input_data) if input_data.strip() else {}
|
|
51
|
+
|
|
52
|
+
# Call handler
|
|
53
|
+
result = handle_session_end(data)
|
|
54
|
+
|
|
55
|
+
# Output result as JSON
|
|
56
|
+
print(json.dumps(result.to_dict()))
|
|
57
|
+
sys.exit(0)
|
|
58
|
+
|
|
59
|
+
except PlatformTimeoutError:
|
|
60
|
+
# Timeout - return minimal valid response
|
|
61
|
+
timeout_response: dict[str, Any] = {
|
|
62
|
+
"continue": True,
|
|
63
|
+
"systemMessage": "⚠️ SessionEnd cleanup timeout - session ending anyway",
|
|
64
|
+
}
|
|
65
|
+
print(json.dumps(timeout_response))
|
|
66
|
+
print("SessionEnd hook timeout after 5 seconds", file=sys.stderr)
|
|
67
|
+
sys.exit(1)
|
|
68
|
+
|
|
69
|
+
except json.JSONDecodeError as e:
|
|
70
|
+
# JSON parse error
|
|
71
|
+
error_response: dict[str, Any] = {
|
|
72
|
+
"continue": True,
|
|
73
|
+
"hookSpecificOutput": {"error": f"JSON parse error: {e}"},
|
|
74
|
+
}
|
|
75
|
+
print(json.dumps(error_response))
|
|
76
|
+
print(f"SessionEnd JSON parse error: {e}", file=sys.stderr)
|
|
77
|
+
sys.exit(1)
|
|
78
|
+
|
|
79
|
+
except Exception as e:
|
|
80
|
+
# Unexpected error
|
|
81
|
+
error_response: dict[str, Any] = {
|
|
82
|
+
"continue": True,
|
|
83
|
+
"hookSpecificOutput": {"error": f"SessionEnd error: {e}"},
|
|
84
|
+
}
|
|
85
|
+
print(json.dumps(error_response))
|
|
86
|
+
print(f"SessionEnd unexpected error: {e}", file=sys.stderr)
|
|
87
|
+
sys.exit(1)
|
|
88
|
+
|
|
89
|
+
finally:
|
|
90
|
+
# Always cancel alarm
|
|
91
|
+
timeout.cancel()
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
if __name__ == "__main__":
|
|
95
|
+
main()
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# @CODE:HOOKS-CLARITY-001 | SPEC: Individual hook files for better UX
|
|
3
|
+
"""SessionStart Hook: Show Project Information
|
|
4
|
+
|
|
5
|
+
Claude Code Event: SessionStart
|
|
6
|
+
Purpose: Display project status, language, Git info, and SPEC progress when session starts
|
|
7
|
+
Execution: Triggered automatically when Claude Code session begins
|
|
8
|
+
|
|
9
|
+
Output: System message with formatted project summary
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import json
|
|
13
|
+
import sys
|
|
14
|
+
from pathlib import
|
|
15
|
+
from utils.timeout import CrossPlatformTimeout, TimeoutError as PlatformTimeoutError
|
|
16
|
+
Path
|
|
17
|
+
from typing import Any
|
|
18
|
+
|
|
19
|
+
# Setup import path for shared modules
|
|
20
|
+
HOOKS_DIR = Path(__file__).parent
|
|
21
|
+
SHARED_DIR = HOOKS_DIR / "shared"
|
|
22
|
+
if str(SHARED_DIR) not in sys.path:
|
|
23
|
+
sys.path.insert(0, str(SHARED_DIR))
|
|
24
|
+
|
|
25
|
+
from handlers import handle_session_start
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
pass
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def main() -> None:
|
|
33
|
+
"""Main entry point for SessionStart hook
|
|
34
|
+
|
|
35
|
+
Displays project information including:
|
|
36
|
+
- Programming language
|
|
37
|
+
- Git branch and status
|
|
38
|
+
- SPEC progress (completed/total)
|
|
39
|
+
- Recent checkpoints
|
|
40
|
+
|
|
41
|
+
Exit Codes:
|
|
42
|
+
0: Success
|
|
43
|
+
1: Error (timeout, JSON parse failure, handler exception)
|
|
44
|
+
"""
|
|
45
|
+
# Set 5-second timeout
|
|
46
|
+
timeout = CrossPlatformTimeout(5)
|
|
47
|
+
timeout.start()
|
|
48
|
+
|
|
49
|
+
try:
|
|
50
|
+
# Read JSON payload from stdin
|
|
51
|
+
input_data = sys.stdin.read()
|
|
52
|
+
data = json.loads(input_data) if input_data.strip() else {}
|
|
53
|
+
|
|
54
|
+
# Call handler
|
|
55
|
+
result = handle_session_start(data)
|
|
56
|
+
|
|
57
|
+
# Output result as JSON
|
|
58
|
+
print(json.dumps(result.to_dict()))
|
|
59
|
+
sys.exit(0)
|
|
60
|
+
|
|
61
|
+
except PlatformTimeoutError:
|
|
62
|
+
# Timeout - return minimal valid response
|
|
63
|
+
timeout_response: dict[str, Any] = {
|
|
64
|
+
"continue": True,
|
|
65
|
+
"systemMessage": "⚠️ Session start timeout - continuing without project info",
|
|
66
|
+
}
|
|
67
|
+
print(json.dumps(timeout_response))
|
|
68
|
+
print("SessionStart hook timeout after 5 seconds", file=sys.stderr)
|
|
69
|
+
sys.exit(1)
|
|
70
|
+
|
|
71
|
+
except json.JSONDecodeError as e:
|
|
72
|
+
# JSON parse error
|
|
73
|
+
error_response: dict[str, Any] = {
|
|
74
|
+
"continue": True,
|
|
75
|
+
"hookSpecificOutput": {"error": f"JSON parse error: {e}"},
|
|
76
|
+
}
|
|
77
|
+
print(json.dumps(error_response))
|
|
78
|
+
print(f"SessionStart JSON parse error: {e}", file=sys.stderr)
|
|
79
|
+
sys.exit(1)
|
|
80
|
+
|
|
81
|
+
except Exception as e:
|
|
82
|
+
# Unexpected error
|
|
83
|
+
error_response: dict[str, Any] = {
|
|
84
|
+
"continue": True,
|
|
85
|
+
"hookSpecificOutput": {"error": f"SessionStart error: {e}"},
|
|
86
|
+
}
|
|
87
|
+
print(json.dumps(error_response))
|
|
88
|
+
print(f"SessionStart unexpected error: {e}", file=sys.stderr)
|
|
89
|
+
sys.exit(1)
|
|
90
|
+
|
|
91
|
+
finally:
|
|
92
|
+
# Always cancel alarm
|
|
93
|
+
timeout.cancel()
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
if __name__ == "__main__":
|
|
97
|
+
main()
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Core module for Alfred Hooks
|
|
3
|
+
|
|
4
|
+
Common type definitions and utility functions
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from dataclasses import dataclass, field
|
|
8
|
+
from typing import Any, Literal, NotRequired, TypedDict
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class HookPayload(TypedDict):
|
|
12
|
+
"""Claude Code Hook event payload type definition
|
|
13
|
+
|
|
14
|
+
Data structure that Claude Code passes to the Hook script.
|
|
15
|
+
Use NotRequired because fields may vary depending on the event.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
cwd: str
|
|
19
|
+
userPrompt: NotRequired[str] # Includes only UserPromptSubmit events
|
|
20
|
+
tool: NotRequired[str] # PreToolUse/PostToolUse events
|
|
21
|
+
arguments: NotRequired[dict[str, Any]] # Tool arguments
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@dataclass
|
|
25
|
+
class HookResult:
|
|
26
|
+
"""Hook execution result following Claude Code standard schema.
|
|
27
|
+
|
|
28
|
+
Attributes conform to Claude Code Hook output specification:
|
|
29
|
+
https://docs.claude.com/en/docs/claude-code/hooks
|
|
30
|
+
|
|
31
|
+
Standard Fields (Claude Code schema - included in JSON output):
|
|
32
|
+
continue_execution: Allow execution to continue (default True)
|
|
33
|
+
suppress_output: Suppress hook output display (default False)
|
|
34
|
+
decision: "approve" or "block" operation (optional)
|
|
35
|
+
reason: Explanation for decision (optional)
|
|
36
|
+
permission_decision: "allow", "deny", or "ask" (optional)
|
|
37
|
+
system_message: Message displayed to user (top-level field)
|
|
38
|
+
|
|
39
|
+
Internal Fields (MoAI-ADK only - NOT in JSON output):
|
|
40
|
+
context_files: List of context files to load (internal use only)
|
|
41
|
+
suggestions: Suggestions for user (internal use only)
|
|
42
|
+
exit_code: Exit code for diagnostics (internal use only)
|
|
43
|
+
|
|
44
|
+
Note:
|
|
45
|
+
- systemMessage appears at TOP LEVEL in JSON output
|
|
46
|
+
- hookSpecificOutput is ONLY used for UserPromptSubmit events
|
|
47
|
+
- Internal fields are used for Python logic but not serialized to JSON
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
# Claude Code standard fields
|
|
51
|
+
continue_execution: bool = True
|
|
52
|
+
suppress_output: bool = False
|
|
53
|
+
decision: Literal["approve", "block"] | None = None
|
|
54
|
+
reason: str | None = None
|
|
55
|
+
permission_decision: Literal["allow", "deny", "ask"] | None = None
|
|
56
|
+
|
|
57
|
+
# MoAI-ADK custom fields (wrapped in hookSpecificOutput)
|
|
58
|
+
system_message: str | None = None
|
|
59
|
+
context_files: list[str] = field(default_factory=list)
|
|
60
|
+
suggestions: list[str] = field(default_factory=list)
|
|
61
|
+
exit_code: int = 0
|
|
62
|
+
|
|
63
|
+
def to_dict(self) -> dict[str, Any]:
|
|
64
|
+
"""Convert to Claude Code standard Hook output schema.
|
|
65
|
+
|
|
66
|
+
Returns:
|
|
67
|
+
Dictionary conforming to Claude Code Hook specification with:
|
|
68
|
+
- Top-level fields: continue, suppressOutput, decision, reason,
|
|
69
|
+
permissionDecision, systemMessage
|
|
70
|
+
- MoAI-ADK internal fields (context_files, suggestions, exit_code)
|
|
71
|
+
are NOT included in JSON output (used for internal logic only)
|
|
72
|
+
|
|
73
|
+
Examples:
|
|
74
|
+
>>> result = HookResult(continue_execution=True)
|
|
75
|
+
>>> result.to_dict()
|
|
76
|
+
{'continue': True}
|
|
77
|
+
|
|
78
|
+
>>> result = HookResult(decision="block", reason="Dangerous")
|
|
79
|
+
>>> result.to_dict()
|
|
80
|
+
{'decision': 'block', 'reason': 'Dangerous'}
|
|
81
|
+
|
|
82
|
+
>>> result = HookResult(system_message="Test")
|
|
83
|
+
>>> result.to_dict()
|
|
84
|
+
{'continue': True, 'systemMessage': 'Test'}
|
|
85
|
+
|
|
86
|
+
Note:
|
|
87
|
+
- systemMessage is a TOP-LEVEL field (not nested in hookSpecificOutput)
|
|
88
|
+
- hookSpecificOutput is ONLY used for UserPromptSubmit events
|
|
89
|
+
- context_files, suggestions, exit_code are internal-only fields
|
|
90
|
+
"""
|
|
91
|
+
output: dict[str, Any] = {}
|
|
92
|
+
|
|
93
|
+
# Add decision or continue flag
|
|
94
|
+
if self.decision:
|
|
95
|
+
output["decision"] = self.decision
|
|
96
|
+
else:
|
|
97
|
+
output["continue"] = self.continue_execution
|
|
98
|
+
|
|
99
|
+
# Add reason if provided (works with both decision and permissionDecision)
|
|
100
|
+
if self.reason:
|
|
101
|
+
output["reason"] = self.reason
|
|
102
|
+
|
|
103
|
+
# Add suppressOutput if True
|
|
104
|
+
if self.suppress_output:
|
|
105
|
+
output["suppressOutput"] = True
|
|
106
|
+
|
|
107
|
+
# Add permissionDecision if set
|
|
108
|
+
if self.permission_decision:
|
|
109
|
+
output["permissionDecision"] = self.permission_decision
|
|
110
|
+
|
|
111
|
+
# Add systemMessage at TOP LEVEL (required by Claude Code schema)
|
|
112
|
+
if self.system_message:
|
|
113
|
+
output["systemMessage"] = self.system_message
|
|
114
|
+
|
|
115
|
+
# Note: context_files, suggestions, exit_code are internal-only fields
|
|
116
|
+
# and are NOT included in the JSON output per Claude Code schema
|
|
117
|
+
|
|
118
|
+
return output
|
|
119
|
+
|
|
120
|
+
def to_user_prompt_submit_dict(self) -> dict[str, Any]:
|
|
121
|
+
"""UserPromptSubmit Hook-specific output format.
|
|
122
|
+
|
|
123
|
+
Claude Code requires a special schema for UserPromptSubmit events.
|
|
124
|
+
The result is wrapped in the standard Hook schema with hookSpecificOutput.
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
Claude Code UserPromptSubmit Hook Dictionary matching schema:
|
|
128
|
+
{
|
|
129
|
+
"continue": true,
|
|
130
|
+
"hookSpecificOutput": {
|
|
131
|
+
"hookEventName": "UserPromptSubmit",
|
|
132
|
+
"additionalContext": "string"
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
Examples:
|
|
137
|
+
>>> result = HookResult(context_files=["tests/"])
|
|
138
|
+
>>> result.to_user_prompt_submit_dict()
|
|
139
|
+
{'continue': True, 'hookSpecificOutput': \
|
|
140
|
+
{'hookEventName': 'UserPromptSubmit', 'additionalContext': '📎 Context: tests/'}}
|
|
141
|
+
"""
|
|
142
|
+
# Convert context_files to additionalContext string
|
|
143
|
+
if self.context_files:
|
|
144
|
+
context_str = "\n".join([f"📎 Context: {f}" for f in self.context_files])
|
|
145
|
+
else:
|
|
146
|
+
context_str = ""
|
|
147
|
+
|
|
148
|
+
# Add system_message if there is one
|
|
149
|
+
if self.system_message:
|
|
150
|
+
if context_str:
|
|
151
|
+
context_str = f"{self.system_message}\n\n{context_str}"
|
|
152
|
+
else:
|
|
153
|
+
context_str = self.system_message
|
|
154
|
+
|
|
155
|
+
return {
|
|
156
|
+
"continue": self.continue_execution,
|
|
157
|
+
"hookSpecificOutput": {
|
|
158
|
+
"hookEventName": "UserPromptSubmit",
|
|
159
|
+
"additionalContext": context_str,
|
|
160
|
+
},
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
__all__ = ["HookPayload", "HookResult"]
|
|
165
|
+
|
|
166
|
+
# Note: core module exports:
|
|
167
|
+
# - HookPayload, HookResult (type definitions)
|
|
168
|
+
# - project.py: detect_language, get_git_info, count_specs, get_project_language
|
|
169
|
+
# - context.py: get_jit_context
|
|
170
|
+
# - checkpoint.py: detect_risky_operation, create_checkpoint, log_checkpoint, list_checkpoints
|