moai-adk 0.9.1__py3-none-any.whl → 0.11.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.

Files changed (260) hide show
  1. moai_adk/core/project/phase_executor.py +4 -0
  2. moai_adk/core/tags/ci_validator.py +33 -3
  3. moai_adk/core/template_engine.py +6 -2
  4. moai_adk/templates/.git-hooks/pre-push +143 -0
  5. moai_adk/templates/.github/workflows/moai-gitflow.yml +6 -1
  6. moai_adk/templates/.github/workflows/release.yml +6 -2
  7. moai_adk/templates/.github/workflows/tag-validation.yml +57 -8
  8. moai_adk/templates/CLAUDE.md +477 -28
  9. moai_adk/templates/README.md +256 -0
  10. {moai_adk-0.9.1.dist-info → moai_adk-0.11.0.dist-info}/METADATA +740 -90
  11. moai_adk-0.11.0.dist-info/RECORD +77 -0
  12. moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -316
  13. moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -208
  14. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -214
  15. moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -406
  16. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -350
  17. moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -273
  18. moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -343
  19. moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -865
  20. moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -287
  21. moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -287
  22. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -326
  23. moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -375
  24. moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1189
  25. moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -728
  26. moai_adk/templates/.claude/commands/alfred/2-run.md +0 -545
  27. moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -683
  28. moai_adk/templates/.claude/commands/alfred/9-feedback.md +0 -149
  29. moai_adk/templates/.claude/hooks/alfred/.moai/cache/version-check.json +0 -9
  30. moai_adk/templates/.claude/hooks/alfred/README.md +0 -343
  31. moai_adk/templates/.claude/hooks/alfred/TROUBLESHOOTING.md +0 -471
  32. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -209
  33. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +0 -198
  34. moai_adk/templates/.claude/hooks/alfred/notification__handle_events.py +0 -102
  35. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +0 -102
  36. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +0 -108
  37. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +0 -102
  38. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +0 -102
  39. moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +0 -170
  40. moai_adk/templates/.claude/hooks/alfred/shared/core/checkpoint.py +0 -271
  41. moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +0 -67
  42. moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +0 -683
  43. moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +0 -198
  44. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +0 -198
  45. moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +0 -21
  46. moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +0 -25
  47. moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +0 -175
  48. moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +0 -90
  49. moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +0 -61
  50. moai_adk/templates/.claude/hooks/alfred/stop__handle_interrupt.py +0 -102
  51. moai_adk/templates/.claude/hooks/alfred/subagent_stop__handle_subagent_end.py +0 -102
  52. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +0 -120
  53. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
  54. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
  55. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
  56. moai_adk/templates/.claude/settings.json +0 -144
  57. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
  58. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
  59. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
  60. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
  61. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
  62. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
  63. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
  64. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
  65. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
  66. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
  67. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
  68. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
  69. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
  70. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
  71. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
  72. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
  73. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
  74. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
  75. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
  76. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
  77. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
  78. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
  79. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
  80. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
  81. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
  82. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
  83. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
  84. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
  85. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
  86. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
  87. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
  88. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
  89. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
  90. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
  91. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
  92. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
  93. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
  94. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
  95. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
  96. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +0 -290
  97. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +0 -1633
  98. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +0 -660
  99. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
  100. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
  101. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
  102. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
  103. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
  104. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
  105. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +0 -123
  106. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +0 -29
  107. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +0 -30
  108. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
  109. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
  110. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
  111. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +0 -124
  112. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +0 -29
  113. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +0 -31
  114. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
  115. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
  116. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
  117. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
  118. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
  119. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
  120. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
  121. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
  122. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
  123. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
  124. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
  125. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
  126. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
  127. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
  128. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
  129. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
  130. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
  131. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
  132. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
  133. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
  134. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
  135. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
  136. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
  137. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
  138. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -116
  139. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
  140. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
  141. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
  142. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
  143. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
  144. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
  145. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
  146. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
  147. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
  148. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
  149. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
  150. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
  151. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
  152. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
  153. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
  154. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  155. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
  156. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
  157. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
  158. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
  159. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +0 -124
  160. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
  161. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
  162. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +0 -123
  163. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
  164. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
  165. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
  166. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
  167. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
  168. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +0 -124
  169. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +0 -29
  170. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +0 -31
  171. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +0 -124
  172. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +0 -29
  173. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +0 -31
  174. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
  175. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
  176. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
  177. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +0 -124
  178. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +0 -29
  179. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +0 -31
  180. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +0 -123
  181. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
  182. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
  183. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +0 -431
  184. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +0 -624
  185. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +0 -316
  186. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +0 -123
  187. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
  188. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
  189. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +0 -124
  190. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
  191. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
  192. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +0 -124
  193. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +0 -29
  194. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +0 -31
  195. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +0 -123
  196. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +0 -29
  197. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +0 -30
  198. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
  199. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
  200. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
  201. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
  202. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
  203. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
  204. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +0 -123
  205. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +0 -29
  206. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +0 -30
  207. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +0 -127
  208. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +0 -29
  209. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +0 -34
  210. moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +0 -482
  211. moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +0 -278
  212. moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
  213. moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +0 -477
  214. moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
  215. moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
  216. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
  217. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
  218. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +0 -271
  219. moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
  220. moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +0 -583
  221. moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +0 -526
  222. moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +0 -465
  223. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +0 -328
  224. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +0 -312
  225. moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
  226. moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +0 -285
  227. moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +0 -278
  228. moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +0 -303
  229. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
  230. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -219
  231. moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +0 -161
  232. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
  233. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
  234. moai_adk/templates/.github/workflows/tag-report.yml +0 -261
  235. moai_adk/templates/.moai/config.json +0 -113
  236. moai_adk/templates/.moai/docs/quick-issue-creation-guide.md +0 -219
  237. moai_adk/templates/.moai/hooks/install.sh +0 -79
  238. moai_adk/templates/.moai/hooks/pre-commit.sh +0 -66
  239. moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +0 -208
  240. moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +0 -369
  241. moai_adk/templates/.moai/memory/CLAUDE-RULES.md +0 -539
  242. moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
  243. moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +0 -220
  244. moai_adk/templates/.moai/memory/ISSUE-LABEL-MAPPING.md +0 -150
  245. moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +0 -218
  246. moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
  247. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
  248. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  249. moai_adk/templates/.moai/project/product.md +0 -161
  250. moai_adk/templates/.moai/project/structure.md +0 -156
  251. moai_adk/templates/.moai/project/tech.md +0 -227
  252. moai_adk/templates/src/moai_adk/core/__init__.py +0 -5
  253. moai_adk/templates/src/moai_adk/core/tags/__init__.py +0 -86
  254. moai_adk/templates/src/moai_adk/core/tags/ci_validator.py +0 -433
  255. moai_adk/templates/src/moai_adk/core/tags/cli.py +0 -283
  256. moai_adk/templates/src/moai_adk/core/tags/validator.py +0 -897
  257. moai_adk-0.9.1.dist-info/RECORD +0 -320
  258. {moai_adk-0.9.1.dist-info → moai_adk-0.11.0.dist-info}/WHEEL +0 -0
  259. {moai_adk-0.9.1.dist-info → moai_adk-0.11.0.dist-info}/entry_points.txt +0 -0
  260. {moai_adk-0.9.1.dist-info → moai_adk-0.11.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,102 +0,0 @@
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 signal
14
- import sys
15
- from pathlib import Path
16
- from typing import Any
17
-
18
- # Setup import path for shared modules
19
- HOOKS_DIR = Path(__file__).parent
20
- SHARED_DIR = HOOKS_DIR / "shared"
21
- if str(SHARED_DIR) not in sys.path:
22
- sys.path.insert(0, str(SHARED_DIR))
23
-
24
- from handlers import handle_session_start
25
-
26
-
27
- class HookTimeoutError(Exception):
28
- """Hook execution timeout exception"""
29
- pass
30
-
31
-
32
- def _timeout_handler(signum, frame):
33
- """Signal handler for 5-second timeout"""
34
- raise HookTimeoutError("Hook execution exceeded 5-second timeout")
35
-
36
-
37
- def main() -> None:
38
- """Main entry point for SessionStart hook
39
-
40
- Displays project information including:
41
- - Programming language
42
- - Git branch and status
43
- - SPEC progress (completed/total)
44
- - Recent checkpoints
45
-
46
- Exit Codes:
47
- 0: Success
48
- 1: Error (timeout, JSON parse failure, handler exception)
49
- """
50
- # Set 5-second timeout
51
- signal.signal(signal.SIGALRM, _timeout_handler)
52
- signal.alarm(5)
53
-
54
- try:
55
- # Read JSON payload from stdin
56
- input_data = sys.stdin.read()
57
- data = json.loads(input_data) if input_data.strip() else {}
58
-
59
- # Call handler
60
- result = handle_session_start(data)
61
-
62
- # Output result as JSON
63
- print(json.dumps(result.to_dict()))
64
- sys.exit(0)
65
-
66
- except HookTimeoutError:
67
- # Timeout - return minimal valid response
68
- timeout_response: dict[str, Any] = {
69
- "continue": True,
70
- "systemMessage": "⚠️ Session start timeout - continuing without project info"
71
- }
72
- print(json.dumps(timeout_response))
73
- print("SessionStart hook timeout after 5 seconds", file=sys.stderr)
74
- sys.exit(1)
75
-
76
- except json.JSONDecodeError as e:
77
- # JSON parse error
78
- error_response: dict[str, Any] = {
79
- "continue": True,
80
- "hookSpecificOutput": {"error": f"JSON parse error: {e}"}
81
- }
82
- print(json.dumps(error_response))
83
- print(f"SessionStart JSON parse error: {e}", file=sys.stderr)
84
- sys.exit(1)
85
-
86
- except Exception as e:
87
- # Unexpected error
88
- error_response: dict[str, Any] = {
89
- "continue": True,
90
- "hookSpecificOutput": {"error": f"SessionStart error: {e}"}
91
- }
92
- print(json.dumps(error_response))
93
- print(f"SessionStart unexpected error: {e}", file=sys.stderr)
94
- sys.exit(1)
95
-
96
- finally:
97
- # Always cancel alarm
98
- signal.alarm(0)
99
-
100
-
101
- if __name__ == "__main__":
102
- main()
@@ -1,170 +0,0 @@
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
@@ -1,271 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Event-Driven Checkpoint system
3
-
4
- Detect risky tasks and create automatic checkpoints
5
- @TAG:CHECKPOINT-EVENT-001
6
- """
7
-
8
- import json
9
- import re
10
- import subprocess
11
- from datetime import datetime
12
- from pathlib import Path
13
- from typing import Any
14
-
15
- # Script execution pattern for each language supported by MoAI-ADK
16
- # Python, TypeScript, Java, Go, Rust, Dart, Swift, Kotlin + Shell
17
- SCRIPT_EXECUTION_PATTERN = re.compile(
18
- r"\b("
19
- # Python ecosystem
20
- r"python3?|pytest|pip|uv|"
21
- # JavaScript/TypeScript ecosystem
22
- r"node|npm|npx|yarn|bun|tsx|ts-node|vitest|jest|"
23
- # Java ecosystem
24
- r"java|javac|mvn|gradle|"
25
- # Go
26
- r"go|"
27
- # Rust
28
- r"cargo|"
29
- # Dart/Flutter
30
- r"dart|flutter|"
31
- # Swift
32
- r"swift|xcodebuild|"
33
- # Kotlin
34
- r"kotlinc?|"
35
- # Shell scripts and build tools
36
- r"bash|sh|zsh|fish|make"
37
- r")\b"
38
- )
39
-
40
-
41
- def detect_risky_operation(tool_name: str, tool_args: dict[str, Any], cwd: str) -> tuple[bool, str]:
42
- """Risk task detection (for Event-Driven Checkpoint)
43
-
44
- Claude Code tool automatically detects dangerous tasks before use.
45
- When a risk is detected, a checkpoint is automatically created to enable rollback.
46
-
47
- Args:
48
- tool_name: Name of the Claude Code tool (Bash, Edit, Write, MultiEdit)
49
- tool_args: Tool argument dictionary
50
- cwd: Project root directory path
51
-
52
- Returns:
53
- (is_risky, operation_type) tuple
54
- - is_risky: Whether the operation is dangerous (bool)
55
- - operation_type: operation type (str: delete, merge, script, critical-file, refactor)
56
-
57
- Risky Operations:
58
- - Bash tool: rm -rf, git merge, git reset --hard, git rebase, script execution
59
- - Edit/Write tool: CLAUDE.md, config.json, .moai/memory/*.md
60
- - MultiEdit tool: Edit ≥10 items File simultaneously
61
- - Script execution: Python, Node, Java, Go, Rust, Dart, Swift, Kotlin, Shell scripts
62
-
63
- Examples:
64
- >>> detect_risky_operation("Bash", {"command": "rm -rf src/"}, ".")
65
- (True, 'delete')
66
- >>> detect_risky_operation("Edit", {"file_path": "CLAUDE.md"}, ".")
67
- (True, 'critical-file')
68
- >>> detect_risky_operation("Read", {"file_path": "test.py"}, ".")
69
- (False, '')
70
-
71
- Notes:
72
- - Minimize false positives: ignore safe operations
73
- - Performance: lightweight string matching (< 1ms)
74
- - Extensibility: Easily added to the patterns dictionary
75
-
76
- @TAG:CHECKPOINT-EVENT-001
77
- """
78
- # Bash tool: Detect dangerous commands
79
- if tool_name == "Bash":
80
- command = tool_args.get("command", "")
81
-
82
- # Mass Delete
83
- if any(pattern in command for pattern in ["rm -rf", "git rm"]):
84
- return (True, "delete")
85
-
86
- # Git merge/reset/rebase
87
- if any(pattern in command for pattern in ["git merge", "git reset --hard", "git rebase"]):
88
- return (True, "merge")
89
-
90
- # Execute external script (potentially destructive)
91
- if any(command.startswith(prefix) for prefix in ["python ", "node ", "bash ", "sh "]):
92
- return (True, "script")
93
-
94
- # Edit/Write tool: Detect important files
95
- if tool_name in ("Edit", "Write"):
96
- file_path = tool_args.get("file_path", "")
97
-
98
- critical_files = [
99
- "CLAUDE.md",
100
- "config.json",
101
- ".moai/memory/development-guide.md",
102
- ".moai/memory/spec-metadata.md",
103
- ".moai/config.json",
104
- ]
105
-
106
- if any(cf in file_path for cf in critical_files):
107
- return (True, "critical-file")
108
-
109
- # MultiEdit tool: Detect large edits
110
- if tool_name == "MultiEdit":
111
- edits = tool_args.get("edits", [])
112
- if len(edits) >= 10:
113
- return (True, "refactor")
114
-
115
- return (False, "")
116
-
117
-
118
- def create_checkpoint(cwd: str, operation_type: str) -> str:
119
- """Create checkpoint (Git local branch)
120
-
121
- Automatically creates checkpoints before dangerous operations.
122
- Prevent remote repository contamination by creating a Git local branch.
123
-
124
- Args:
125
- cwd: Project root directory path
126
- operation_type: operation type (delete, merge, script, etc.)
127
-
128
- Returns:
129
- checkpoint_branch: Created branch name
130
- Returns "checkpoint-failed" on failure
131
-
132
- Branch Naming:
133
- before-{operation}-{YYYYMMDD-HHMMSS}
134
- Example: before-delete-20251015-143000
135
-
136
- Examples:
137
- >>> create_checkpoint(".", "delete")
138
- 'before-delete-20251015-143000'
139
-
140
- Notes:
141
- - Create only local branch (no remote push)
142
- - Fallback in case of Git error (ignore and continue)
143
- - Do not check dirty working directory (allow uncommitted changes)
144
- - Automatically record checkpoint logs (.moai/checkpoints.log)
145
-
146
- @TAG:CHECKPOINT-EVENT-001
147
- """
148
- timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
149
- branch_name = f"before-{operation_type}-{timestamp}"
150
-
151
- try:
152
- # Create a new local branch from the current branch (without checking out)
153
- subprocess.run(
154
- ["git", "branch", branch_name],
155
- cwd=cwd,
156
- check=True,
157
- capture_output=True,
158
- text=True,
159
- timeout=2,
160
- )
161
-
162
- # Checkpoint log records
163
- log_checkpoint(cwd, branch_name, operation_type)
164
-
165
- return branch_name
166
-
167
- except (subprocess.CalledProcessError, subprocess.TimeoutExpired, FileNotFoundError):
168
- # Fallback (ignore) in case of Git error
169
- return "checkpoint-failed"
170
-
171
-
172
- def log_checkpoint(cwd: str, branch_name: str, operation_type: str) -> None:
173
- """Checkpoint log records (.moai/checkpoints.log)
174
-
175
- Checkpoint creation history is recorded in JSON Lines format.
176
- SessionStart reads this log to display a list of checkpoints.
177
-
178
- Args:
179
- cwd: Project root directory path
180
- branch_name: Created checkpoint branch name
181
- operation_type: operation type
182
-
183
- Log Format (JSON Lines):
184
- {"timestamp": "2025-10-15T14:30:00", "branch": "before-delete-...", "operation": "delete"}
185
-
186
- Examples:
187
- >>> log_checkpoint(".", "before-delete-20251015-143000", "delete")
188
- # Add 1 line to .moai/checkpoints.log
189
-
190
- Notes:
191
- - If the file does not exist, it is automatically created.
192
- - Record in append mode (preserve existing logs)
193
- - Ignored in case of failure (not critical)
194
-
195
- @TAG:CHECKPOINT-EVENT-001
196
- """
197
- log_file = Path(cwd) / ".moai" / "checkpoints.log"
198
-
199
- try:
200
- log_file.parent.mkdir(parents=True, exist_ok=True)
201
-
202
- log_entry = {
203
- "timestamp": datetime.now().isoformat(),
204
- "branch": branch_name,
205
- "operation": operation_type,
206
- }
207
-
208
- with log_file.open("a") as f:
209
- f.write(json.dumps(log_entry) + "\n")
210
-
211
- except (OSError, PermissionError):
212
- # Ignore log failures (not critical)
213
- pass
214
-
215
-
216
- def list_checkpoints(cwd: str, max_count: int = 10) -> list[dict[str, str]]:
217
- """Checkpoint list (parsing .moai/checkpoints.log)
218
-
219
- Returns a list of recently created checkpoints.
220
- Used in the SessionStart, /alfred:0-project restore command.
221
-
222
- Args:
223
- cwd: Project root directory path
224
- max_count: Maximum number to return (default 10 items)
225
-
226
- Returns:
227
- Checkpoint list (most recent)
228
- [{"timestamp": "...", "branch": "...", "operation": "..."}, ...]
229
-
230
- Examples:
231
- >>> list_checkpoints(".")
232
- [
233
- {"timestamp": "2025-10-15T14:30:00", "branch": "before-delete-...", "operation": "delete"},
234
- {"timestamp": "2025-10-15T14:25:00", "branch": "before-merge-...", "operation": "merge"},
235
- ]
236
-
237
- Notes:
238
- - If there is no log file, an empty list is returned.
239
- - Ignore lines where JSON parsing fails
240
- - Return only the latest max_count
241
-
242
- @TAG:CHECKPOINT-EVENT-001
243
- """
244
- log_file = Path(cwd) / ".moai" / "checkpoints.log"
245
-
246
- if not log_file.exists():
247
- return []
248
-
249
- checkpoints = []
250
-
251
- try:
252
- with log_file.open("r") as f:
253
- for line in f:
254
- try:
255
- checkpoints.append(json.loads(line.strip()))
256
- except json.JSONDecodeError:
257
- # Ignore lines where parsing failed
258
- pass
259
- except (OSError, PermissionError):
260
- return []
261
-
262
- # Return only the most recent max_count items (in order of latest)
263
- return checkpoints[-max_count:]
264
-
265
-
266
- __all__ = [
267
- "detect_risky_operation",
268
- "create_checkpoint",
269
- "log_checkpoint",
270
- "list_checkpoints",
271
- ]
@@ -1,67 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Context Engineering utilities
3
-
4
- JIT (Just-in-Time) Retrieval
5
- """
6
-
7
- from pathlib import Path
8
-
9
-
10
- def get_jit_context(prompt: str, cwd: str) -> list[str]:
11
- """JIT Context Retrieval based on prompt.
12
-
13
- Analyze user prompts and automatically recommend relevant documents.
14
- Alfred commands and keyword-based pattern matching load only the documents you need.
15
-
16
- Args:
17
- prompt: Prompt for user input (case is irrelevant)
18
- cwd: Project root directory path
19
-
20
- Returns:
21
- List of recommended document paths (relative paths).
22
- If there is no matching pattern or file, an empty list []
23
-
24
- Patterns:
25
- - "/alfred:1-plan" → .moai/memory/spec-metadata.md
26
- - "/alfred:2-run" → .moai/memory/development-guide.md
27
- - "test" → tests/ (if directory exists)
28
-
29
- Examples:
30
- >>> get_jit_context("/alfred:1-plan", "/project")
31
- ['.moai/memory/spec-metadata.md']
32
- >>> get_jit_context("implement test", "/project")
33
- ['tests/']
34
- >>> get_jit_context("unknown", "/project")
35
- []
36
-
37
- Notes:
38
- - Context Engineering: Compliance with JIT Retrieval principles
39
- - Minimize initial context burden by loading only necessary documents
40
- - Return after checking whether file exists
41
-
42
- TDD History:
43
- - RED: 18 items scenario testing (command matching, keywords, empty results)
44
- - GREEN: Pattern matching dictionary-based implementation
45
- - REFACTOR: Expandable pattern structure, file existence validation added
46
- """
47
- context_files = []
48
- cwd_path = Path(cwd)
49
-
50
- # Pattern matching
51
- patterns = {
52
- "/alfred:1-plan": [".moai/memory/spec-metadata.md"],
53
- "/alfred:2-run": [".moai/memory/development-guide.md"],
54
- "test": ["tests/"],
55
- }
56
-
57
- for pattern, files in patterns.items():
58
- if pattern in prompt.lower():
59
- for file in files:
60
- file_path = cwd_path / file
61
- if file_path.exists():
62
- context_files.append(file)
63
-
64
- return context_files
65
-
66
-
67
- __all__ = ["get_jit_context"]