moai-adk 0.11.0__py3-none-any.whl → 0.11.1__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.

Files changed (265) hide show
  1. moai_adk/core/issue_creator.py +2 -2
  2. moai_adk/core/project/detector.py +285 -12
  3. moai_adk/templates/.claude/agents/alfred/cc-manager.md +316 -0
  4. moai_adk/templates/.claude/agents/alfred/debug-helper.md +208 -0
  5. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +214 -0
  6. moai_adk/templates/.claude/agents/alfred/git-manager.md +406 -0
  7. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +350 -0
  8. moai_adk/templates/.claude/agents/alfred/project-manager.md +273 -0
  9. moai_adk/templates/.claude/agents/alfred/quality-gate.md +343 -0
  10. moai_adk/templates/.claude/agents/alfred/skill-factory.md +865 -0
  11. moai_adk/templates/.claude/agents/alfred/spec-builder.md +287 -0
  12. moai_adk/templates/.claude/agents/alfred/tag-agent.md +287 -0
  13. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +326 -0
  14. moai_adk/templates/.claude/agents/alfred/trust-checker.md +375 -0
  15. moai_adk/templates/.claude/commands/alfred/0-project.md +1187 -0
  16. moai_adk/templates/.claude/commands/alfred/1-plan.md +734 -0
  17. moai_adk/templates/.claude/commands/alfred/2-run.md +551 -0
  18. moai_adk/templates/.claude/commands/alfred/3-sync.md +689 -0
  19. moai_adk/templates/.claude/commands/alfred/9-feedback.md +149 -0
  20. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +208 -0
  21. moai_adk/templates/.claude/hooks/alfred/core/project.py +744 -0
  22. moai_adk/templates/.claude/hooks/alfred/core/timeout.py +136 -0
  23. moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +109 -0
  24. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +198 -0
  25. moai_adk/templates/.claude/hooks/alfred/notification__handle_events.py +97 -0
  26. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +97 -0
  27. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +103 -0
  28. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +97 -0
  29. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +97 -0
  30. moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +170 -0
  31. moai_adk/templates/.claude/hooks/alfred/shared/core/checkpoint.py +271 -0
  32. moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +67 -0
  33. moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +749 -0
  34. moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +230 -0
  35. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +198 -0
  36. moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +21 -0
  37. moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +156 -0
  38. moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +174 -0
  39. moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +87 -0
  40. moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +61 -0
  41. moai_adk/templates/.claude/hooks/alfred/stop__handle_interrupt.py +97 -0
  42. moai_adk/templates/.claude/hooks/alfred/subagent_stop__handle_subagent_end.py +97 -0
  43. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +111 -0
  44. moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +1 -0
  45. moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +136 -0
  46. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +640 -0
  47. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +696 -0
  48. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +474 -0
  49. moai_adk/templates/.claude/settings.json +144 -0
  50. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +113 -0
  51. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +29 -0
  52. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +28 -0
  53. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +122 -0
  54. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +29 -0
  55. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +29 -0
  56. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +237 -0
  57. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +615 -0
  58. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +653 -0
  59. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +113 -0
  60. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +29 -0
  61. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +28 -0
  62. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +113 -0
  63. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +29 -0
  64. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +28 -0
  65. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +113 -0
  66. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +29 -0
  67. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +28 -0
  68. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +113 -0
  69. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +29 -0
  70. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +28 -0
  71. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +269 -0
  72. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +32 -0
  73. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +298 -0
  74. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +26 -0
  75. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +307 -0
  76. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +21 -0
  77. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +252 -0
  78. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +19 -0
  79. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +19 -0
  80. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +24 -0
  81. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +199 -0
  82. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +39 -0
  83. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +316 -0
  84. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +18 -0
  85. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +263 -0
  86. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +30 -0
  87. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +291 -0
  88. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +15 -0
  89. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +290 -0
  90. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +1633 -0
  91. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +660 -0
  92. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +123 -0
  93. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +29 -0
  94. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +30 -0
  95. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +123 -0
  96. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +29 -0
  97. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +30 -0
  98. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +123 -0
  99. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +29 -0
  100. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +30 -0
  101. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +124 -0
  102. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +29 -0
  103. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +31 -0
  104. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +124 -0
  105. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +29 -0
  106. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +31 -0
  107. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +123 -0
  108. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +29 -0
  109. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +30 -0
  110. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +123 -0
  111. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +29 -0
  112. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +30 -0
  113. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +123 -0
  114. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +29 -0
  115. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +30 -0
  116. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +123 -0
  117. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +29 -0
  118. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +30 -0
  119. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +303 -0
  120. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +1064 -0
  121. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +1047 -0
  122. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +113 -0
  123. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +29 -0
  124. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +28 -0
  125. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +113 -0
  126. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +29 -0
  127. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +28 -0
  128. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +113 -0
  129. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +29 -0
  130. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +28 -0
  131. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +116 -0
  132. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +29 -0
  133. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +28 -0
  134. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +122 -0
  135. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +29 -0
  136. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +29 -0
  137. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +113 -0
  138. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +29 -0
  139. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +28 -0
  140. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +113 -0
  141. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +29 -0
  142. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +28 -0
  143. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +113 -0
  144. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +29 -0
  145. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +28 -0
  146. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +307 -0
  147. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  148. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +1099 -0
  149. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +124 -0
  150. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +29 -0
  151. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +31 -0
  152. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +124 -0
  153. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +29 -0
  154. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +31 -0
  155. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +123 -0
  156. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +29 -0
  157. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +30 -0
  158. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +123 -0
  159. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +29 -0
  160. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +30 -0
  161. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +124 -0
  162. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +29 -0
  163. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +31 -0
  164. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +124 -0
  165. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +29 -0
  166. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +31 -0
  167. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +125 -0
  168. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +29 -0
  169. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +32 -0
  170. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +124 -0
  171. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +29 -0
  172. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +31 -0
  173. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +123 -0
  174. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +29 -0
  175. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +30 -0
  176. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +431 -0
  177. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +624 -0
  178. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +316 -0
  179. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +123 -0
  180. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +29 -0
  181. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +30 -0
  182. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +124 -0
  183. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +29 -0
  184. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +31 -0
  185. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +124 -0
  186. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +29 -0
  187. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +31 -0
  188. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +123 -0
  189. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +29 -0
  190. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +30 -0
  191. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +123 -0
  192. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +29 -0
  193. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +30 -0
  194. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +124 -0
  195. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +29 -0
  196. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +31 -0
  197. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +123 -0
  198. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +29 -0
  199. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +30 -0
  200. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +127 -0
  201. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +29 -0
  202. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +34 -0
  203. moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +482 -0
  204. moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +278 -0
  205. moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +524 -0
  206. moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +477 -0
  207. moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +429 -0
  208. moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +391 -0
  209. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +431 -0
  210. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +577 -0
  211. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +271 -0
  212. moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +466 -0
  213. moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +583 -0
  214. moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +526 -0
  215. moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +465 -0
  216. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +328 -0
  217. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +312 -0
  218. moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +245 -0
  219. moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +285 -0
  220. moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +278 -0
  221. moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +303 -0
  222. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +137 -0
  223. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +219 -0
  224. moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +161 -0
  225. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +541 -0
  226. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +622 -0
  227. moai_adk/templates/.github/workflows/c-tag-validation.yml +83 -0
  228. moai_adk/templates/.github/workflows/cpp-tag-validation.yml +79 -0
  229. moai_adk/templates/.github/workflows/csharp-tag-validation.yml +65 -0
  230. moai_adk/templates/.github/workflows/dart-tag-validation.yml +82 -0
  231. moai_adk/templates/.github/workflows/java-tag-validation.yml +75 -0
  232. moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +67 -0
  233. moai_adk/templates/.github/workflows/php-tag-validation.yml +56 -0
  234. moai_adk/templates/.github/workflows/ruby-tag-validation.yml +68 -0
  235. moai_adk/templates/.github/workflows/rust-tag-validation.yml +73 -0
  236. moai_adk/templates/.github/workflows/shell-tag-validation.yml +65 -0
  237. moai_adk/templates/.github/workflows/swift-tag-validation.yml +79 -0
  238. moai_adk/templates/.moai/config.json +113 -0
  239. moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +208 -0
  240. moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +369 -0
  241. moai_adk/templates/.moai/memory/CLAUDE-RULES.md +539 -0
  242. moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +344 -0
  243. moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +330 -0
  244. moai_adk/templates/.moai/memory/ISSUE-LABEL-MAPPING.md +150 -0
  245. moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +218 -0
  246. moai_adk/templates/.moai/memory/SPEC-METADATA.md +356 -0
  247. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +330 -0
  248. moai_adk/templates/.moai/memory/spec-metadata.md +356 -0
  249. moai_adk/templates/.moai/project/product.md +161 -0
  250. moai_adk/templates/.moai/project/structure.md +156 -0
  251. moai_adk/templates/.moai/project/tech.md +227 -0
  252. moai_adk/templates/CLAUDE.md +90 -10
  253. moai_adk/templates/workflows/go-tag-validation.yml +130 -0
  254. moai_adk/templates/workflows/javascript-tag-validation.yml +135 -0
  255. moai_adk/templates/workflows/python-tag-validation.yml +118 -0
  256. moai_adk/templates/workflows/typescript-tag-validation.yml +154 -0
  257. {moai_adk-0.11.0.dist-info → moai_adk-0.11.1.dist-info}/METADATA +43 -1
  258. moai_adk-0.11.1.dist-info/RECORD +330 -0
  259. moai_adk-0.11.0.dist-info/RECORD +0 -77
  260. /moai_adk/templates/.github/workflows/{release.yml → moai-adk-release.yml} +0 -0
  261. /moai_adk/templates/.github/workflows/{spec-issue-sync.yml → moai-adk-spec-issue-sync.yml} +0 -0
  262. /moai_adk/templates/.github/workflows/{tag-validation.yml → moai-adk-tag-validation.yml} +0 -0
  263. {moai_adk-0.11.0.dist-info → moai_adk-0.11.1.dist-info}/WHEEL +0 -0
  264. {moai_adk-0.11.0.dist-info → moai_adk-0.11.1.dist-info}/entry_points.txt +0 -0
  265. {moai_adk-0.11.0.dist-info → moai_adk-0.11.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env python3
2
+ # @CODE:HOOKS-CLARITY-001 | 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
21
+ from utils.timeout import CrossPlatformTimeout, TimeoutError as PlatformTimeoutError
22
+ Path
23
+ from typing import Any
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
+ pass
35
+
36
+
37
+
38
+ def main() -> None:
39
+ """Main entry point for PreToolUse hook
40
+
41
+ Analyzes tool usage and creates checkpoints for risky operations:
42
+ 1. Detects dangerous patterns (rm -rf, git reset, etc.)
43
+ 2. Creates Git checkpoint: checkpoint/before-{operation}-{timestamp}
44
+ 3. Logs checkpoint to .moai/checkpoints.log
45
+ 4. Returns guidance message to user
46
+
47
+ Exit Codes:
48
+ 0: Success (checkpoint created or not needed)
49
+ 1: Error (timeout, JSON parse failure, handler exception)
50
+ """
51
+ # Set 5-second timeout
52
+ timeout = CrossPlatformTimeout(5)
53
+ timeout.start()
54
+
55
+ try:
56
+ # Read JSON payload from stdin
57
+ input_data = sys.stdin.read()
58
+ data = json.loads(input_data) if input_data.strip() else {}
59
+
60
+ # Call handler
61
+ result = handle_pre_tool_use(data)
62
+
63
+ # Output result as JSON
64
+ print(json.dumps(result.to_dict()))
65
+ sys.exit(0)
66
+
67
+ except PlatformTimeoutError:
68
+ # Timeout - return minimal valid response (allow operation to continue)
69
+ timeout_response: dict[str, Any] = {
70
+ "continue": True,
71
+ "systemMessage": "⚠️ Checkpoint creation timeout - operation proceeding without checkpoint",
72
+ }
73
+ print(json.dumps(timeout_response))
74
+ print("PreToolUse hook timeout after 5 seconds", file=sys.stderr)
75
+ sys.exit(1)
76
+
77
+ except json.JSONDecodeError as e:
78
+ # JSON parse error - allow operation to continue
79
+ error_response: dict[str, Any] = {
80
+ "continue": True,
81
+ "hookSpecificOutput": {"error": f"JSON parse error: {e}"},
82
+ }
83
+ print(json.dumps(error_response))
84
+ print(f"PreToolUse JSON parse error: {e}", file=sys.stderr)
85
+ sys.exit(1)
86
+
87
+ except Exception as e:
88
+ # Unexpected error - allow operation to continue
89
+ error_response: dict[str, Any] = {
90
+ "continue": True,
91
+ "hookSpecificOutput": {"error": f"PreToolUse error: {e}"},
92
+ }
93
+ print(json.dumps(error_response))
94
+ print(f"PreToolUse unexpected error: {e}", file=sys.stderr)
95
+ sys.exit(1)
96
+
97
+ finally:
98
+ # Always cancel alarm
99
+ timeout.cancel()
100
+
101
+
102
+ if __name__ == "__main__":
103
+ main()
@@ -0,0 +1,97 @@
1
+ #!/usr/bin/env python3
2
+ # @CODE:HOOKS-CLARITY-001 | 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
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_end
26
+
27
+
28
+ pass
29
+
30
+
31
+
32
+ def main() -> None:
33
+ """Main entry point for SessionEnd hook
34
+
35
+ Currently a stub for future functionality:
36
+ - Clear temporary caches
37
+ - Save session metrics
38
+ - Upload analytics (if enabled)
39
+ - Cleanup background processes
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_end(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": "⚠️ SessionEnd cleanup timeout - session ending anyway",
66
+ }
67
+ print(json.dumps(timeout_response))
68
+ print("SessionEnd 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"SessionEnd 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"SessionEnd error: {e}"},
86
+ }
87
+ print(json.dumps(error_response))
88
+ print(f"SessionEnd 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,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