moai-adk 0.4.5__py3-none-any.whl → 0.20.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 (433) hide show
  1. moai_adk/__init__.py +1 -1
  2. moai_adk/__main__.py +74 -1
  3. moai_adk/cli/commands/__init__.py +1 -1
  4. moai_adk/cli/commands/analyze.py +119 -0
  5. moai_adk/cli/commands/backup.py +25 -1
  6. moai_adk/cli/commands/doctor.py +31 -5
  7. moai_adk/cli/commands/improve_user_experience.py +307 -0
  8. moai_adk/cli/commands/init.py +111 -10
  9. moai_adk/cli/commands/status.py +33 -3
  10. moai_adk/cli/commands/update.py +921 -130
  11. moai_adk/cli/commands/validate_links.py +120 -0
  12. moai_adk/cli/prompts/init_prompts.py +22 -87
  13. moai_adk/core/analysis/__init__.py +9 -0
  14. moai_adk/core/analysis/session_analyzer.py +388 -0
  15. moai_adk/core/analysis/tag_chain_analyzer.py +344 -0
  16. moai_adk/core/analysis/tag_chain_repair.py +879 -0
  17. moai_adk/core/config/__init__.py +19 -0
  18. moai_adk/core/config/migration.py +235 -0
  19. moai_adk/core/git/__init__.py +1 -1
  20. moai_adk/core/git/branch.py +1 -1
  21. moai_adk/core/git/commit.py +1 -1
  22. moai_adk/core/git/manager.py +1 -1
  23. moai_adk/core/issue_creator.py +313 -0
  24. moai_adk/core/mcp/setup.py +56 -0
  25. moai_adk/core/mcp/setup_old.py +296 -0
  26. moai_adk/core/project/backup_utils.py +1 -1
  27. moai_adk/core/project/checker.py +2 -2
  28. moai_adk/core/project/detector.py +211 -12
  29. moai_adk/core/project/initializer.py +85 -15
  30. moai_adk/core/project/phase_executor.py +76 -13
  31. moai_adk/core/project/validator.py +13 -13
  32. moai_adk/core/quality/__init__.py +1 -1
  33. moai_adk/core/quality/trust_checker.py +1 -1
  34. moai_adk/core/quality/validators/__init__.py +1 -1
  35. moai_adk/core/quality/validators/base_validator.py +1 -1
  36. moai_adk/core/tags/__init__.py +86 -0
  37. moai_adk/core/tags/auto_corrector.py +693 -0
  38. moai_adk/core/tags/ci_validator.py +463 -0
  39. moai_adk/core/tags/cli.py +283 -0
  40. moai_adk/core/tags/generator.py +109 -0
  41. moai_adk/core/tags/inserter.py +99 -0
  42. moai_adk/core/tags/mapper.py +126 -0
  43. moai_adk/core/tags/parser.py +76 -0
  44. moai_adk/core/tags/policy_validator.py +580 -0
  45. moai_adk/core/tags/pre_commit_validator.py +421 -0
  46. moai_adk/core/tags/reporter.py +956 -0
  47. moai_adk/core/tags/rollback_manager.py +525 -0
  48. moai_adk/core/tags/tags.py +149 -0
  49. moai_adk/core/tags/validator.py +897 -0
  50. moai_adk/core/template/__init__.py +1 -1
  51. moai_adk/core/template/backup.py +1 -1
  52. moai_adk/core/template/merger.py +50 -1
  53. moai_adk/core/template/processor.py +119 -13
  54. moai_adk/core/template_engine.py +268 -0
  55. moai_adk/templates/.claude/agents/alfred/backend-expert.md +348 -0
  56. moai_adk/templates/.claude/agents/alfred/cc-manager.md +209 -944
  57. moai_adk/templates/.claude/agents/alfred/database-expert.md +352 -0
  58. moai_adk/templates/.claude/agents/alfred/debug-helper.md +34 -5
  59. moai_adk/templates/.claude/agents/alfred/devops-expert.md +464 -0
  60. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +38 -8
  61. moai_adk/templates/.claude/agents/alfred/format-expert.md +469 -0
  62. moai_adk/templates/.claude/agents/alfred/frontend-expert.md +357 -0
  63. moai_adk/templates/.claude/agents/alfred/git-manager.md +128 -9
  64. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +104 -6
  65. moai_adk/templates/.claude/agents/alfred/project-manager.md +88 -16
  66. moai_adk/templates/.claude/agents/alfred/quality-gate.md +36 -9
  67. moai_adk/templates/.claude/agents/alfred/security-expert.md +270 -0
  68. moai_adk/templates/.claude/agents/alfred/skill-factory.md +865 -0
  69. moai_adk/templates/.claude/agents/alfred/spec-builder.md +214 -43
  70. moai_adk/templates/.claude/agents/alfred/tag-agent.md +111 -9
  71. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +309 -160
  72. moai_adk/templates/.claude/agents/alfred/trust-checker.md +36 -7
  73. moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +605 -0
  74. moai_adk/templates/.claude/commands/alfred/0-project.md +393 -966
  75. moai_adk/templates/.claude/commands/alfred/1-plan.md +651 -367
  76. moai_adk/templates/.claude/commands/alfred/2-run.md +388 -241
  77. moai_adk/templates/.claude/commands/alfred/3-sync.md +1921 -410
  78. moai_adk/templates/.claude/commands/alfred/9-feedback.md +153 -0
  79. moai_adk/templates/.claude/commands/alfred/release-new.md +3604 -0
  80. moai_adk/templates/.claude/hooks/alfred/core/project.py +484 -20
  81. moai_adk/templates/.claude/hooks/alfred/core/timeout.py +136 -0
  82. moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +108 -0
  83. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +198 -0
  84. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +14 -6
  85. moai_adk/templates/.claude/hooks/alfred/post_tool__enable_streaming_ui.py +50 -0
  86. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +93 -0
  87. moai_adk/templates/.claude/hooks/alfred/post_tool__tag_auto_corrector.py +407 -0
  88. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +99 -0
  89. moai_adk/templates/.claude/hooks/alfred/pre_tool__realtime_tag_monitor.py +335 -0
  90. moai_adk/templates/.claude/hooks/alfred/pre_tool__tag_policy_validator.py +325 -0
  91. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +93 -0
  92. moai_adk/templates/.claude/hooks/alfred/session_start__auto_cleanup.py +580 -0
  93. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +298 -0
  94. moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +170 -0
  95. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/checkpoint.py +3 -3
  96. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/context.py +5 -5
  97. moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +749 -0
  98. moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +230 -0
  99. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +198 -0
  100. moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +21 -0
  101. moai_adk/templates/.claude/hooks/alfred/shared/handlers/daily_analysis.py +351 -0
  102. moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +154 -0
  103. moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +174 -0
  104. moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +87 -0
  105. moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +61 -0
  106. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +111 -0
  107. moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +1 -0
  108. moai_adk/templates/.claude/hooks/alfred/utils/hook_config.py +94 -0
  109. moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +161 -0
  110. moai_adk/templates/.claude/output-styles/alfred/alfred-moai-adk-beginner.md +267 -0
  111. moai_adk/templates/.claude/output-styles/alfred/keating-personal-tutor.md +440 -0
  112. moai_adk/templates/.claude/output-styles/alfred/r2d2-agentic-coding.md +583 -0
  113. moai_adk/templates/.claude/settings.json +96 -14
  114. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +70 -0
  115. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +62 -0
  116. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/reference.md +242 -0
  117. moai_adk/templates/.claude/skills/moai-alfred-ask-user-questions/SKILL.md +237 -0
  118. moai_adk/templates/.claude/skills/moai-alfred-ask-user-questions/examples.md +871 -0
  119. moai_adk/templates/.claude/skills/moai-alfred-ask-user-questions/reference.md +653 -0
  120. moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/README.md +162 -0
  121. moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/SKILL.md +227 -0
  122. moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/examples.md +354 -0
  123. moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/reference.md +158 -0
  124. moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/SKILL.md +179 -79
  125. moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/examples.md +117 -0
  126. moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/scripts/pre-review-check.sh +62 -0
  127. moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +132 -0
  128. moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +28 -0
  129. moai_adk/templates/.claude/skills/moai-alfred-config-schema/reference.md +444 -0
  130. moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +62 -0
  131. moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +28 -0
  132. moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +405 -0
  133. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +51 -0
  134. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +355 -0
  135. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +239 -0
  136. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +323 -0
  137. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +286 -0
  138. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +126 -0
  139. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +229 -0
  140. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +4 -0
  141. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +150 -0
  142. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +87 -73
  143. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +29 -0
  144. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +28 -0
  145. moai_adk/templates/.claude/skills/moai-alfred-personas/README.md +42 -0
  146. moai_adk/templates/.claude/skills/moai-alfred-personas/SKILL.md +429 -0
  147. moai_adk/templates/.claude/skills/moai-alfred-personas/examples.md +520 -0
  148. moai_adk/templates/.claude/skills/moai-alfred-personas/reference.md +405 -0
  149. moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +89 -0
  150. moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +122 -0
  151. moai_adk/templates/.claude/skills/moai-alfred-practices/reference.md +369 -0
  152. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +508 -0
  153. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +481 -0
  154. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +100 -0
  155. moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +77 -0
  156. moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +265 -0
  157. moai_adk/templates/.claude/skills/moai-alfred-rules/reference.md +539 -0
  158. moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +320 -0
  159. moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +4 -0
  160. moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +84 -0
  161. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +137 -0
  162. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +219 -0
  163. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples/validate-spec.sh +161 -0
  164. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +541 -0
  165. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +622 -0
  166. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +19 -0
  167. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +4 -0
  168. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +211 -0
  169. moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +288 -0
  170. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +269 -0
  171. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +32 -0
  172. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +298 -0
  173. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +26 -0
  174. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +307 -0
  175. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +21 -0
  176. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +252 -0
  177. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +19 -0
  178. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +19 -0
  179. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +24 -0
  180. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +199 -0
  181. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +39 -0
  182. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +316 -0
  183. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +18 -0
  184. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +263 -0
  185. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +30 -0
  186. moai_adk/templates/.claude/skills/moai-cc-skill-factory/CHECKLIST.md +482 -0
  187. moai_adk/templates/.claude/skills/moai-cc-skill-factory/EXAMPLES.md +303 -0
  188. moai_adk/templates/.claude/skills/moai-cc-skill-factory/INTERACTIVE-DISCOVERY.md +524 -0
  189. moai_adk/templates/.claude/skills/moai-cc-skill-factory/METADATA.md +477 -0
  190. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PARALLEL-ANALYSIS-REPORT.md +429 -0
  191. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PYTHON-VERSION-MATRIX.md +391 -0
  192. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-FACTORY-WORKFLOW.md +431 -0
  193. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-UPDATE-ADVISOR.md +577 -0
  194. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL.md +273 -0
  195. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STEP-BY-STEP-GUIDE.md +466 -0
  196. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STRUCTURE.md +583 -0
  197. moai_adk/templates/.claude/skills/moai-cc-skill-factory/WEB-RESEARCH.md +526 -0
  198. moai_adk/templates/.claude/skills/moai-cc-skill-factory/reference.md +608 -0
  199. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/generate-structure.sh +328 -0
  200. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/validate-skill.sh +312 -0
  201. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/SKILL_TEMPLATE.md +245 -0
  202. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/examples-template.md +285 -0
  203. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/reference-template.md +278 -0
  204. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/scripts-template.sh +303 -0
  205. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +291 -0
  206. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +15 -0
  207. moai_adk/templates/.claude/skills/moai-change-logger/SKILL.md +563 -0
  208. moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +802 -0
  209. moai_adk/templates/.claude/skills/moai-design-systems/examples.md +1238 -0
  210. moai_adk/templates/.claude/skills/moai-design-systems/reference.md +673 -0
  211. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +234 -43
  212. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +1633 -0
  213. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +660 -0
  214. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +97 -69
  215. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +29 -0
  216. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +30 -0
  217. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +97 -72
  218. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +29 -0
  219. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +30 -0
  220. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +97 -74
  221. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +29 -0
  222. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +30 -0
  223. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +98 -74
  224. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +29 -0
  225. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +31 -0
  226. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +102 -73
  227. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +29 -0
  228. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +31 -0
  229. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +97 -73
  230. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +29 -0
  231. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +30 -0
  232. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +97 -67
  233. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +29 -0
  234. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +30 -0
  235. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +97 -79
  236. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +29 -0
  237. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +30 -0
  238. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +97 -71
  239. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +29 -0
  240. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +30 -0
  241. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +265 -64
  242. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +1064 -0
  243. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +1047 -0
  244. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +87 -78
  245. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +29 -0
  246. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +28 -0
  247. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +87 -70
  248. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +29 -0
  249. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +28 -0
  250. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +87 -86
  251. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +29 -0
  252. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +28 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +80 -62
  254. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +29 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +28 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +207 -50
  257. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +29 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +29 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +90 -71
  260. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +29 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +28 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +78 -58
  263. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +29 -0
  264. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +28 -0
  265. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +78 -51
  266. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +29 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +28 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-trust/.!11330!examples.md +0 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +253 -32
  270. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +1099 -0
  272. moai_adk/templates/.claude/skills/moai-jit-docs-enhanced/SKILL.md +460 -0
  273. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +98 -74
  274. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +29 -0
  275. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +31 -0
  276. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +98 -76
  277. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +29 -0
  278. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +31 -0
  279. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +2358 -70
  280. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +29 -0
  281. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +30 -0
  282. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +2962 -68
  283. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +29 -0
  284. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +30 -0
  285. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +1898 -70
  286. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +29 -0
  287. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +31 -0
  288. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +1465 -68
  289. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +29 -0
  290. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +31 -0
  291. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +2364 -66
  292. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +29 -0
  293. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +32 -0
  294. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +1630 -69
  295. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +29 -0
  296. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +31 -0
  297. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +89 -61
  298. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +29 -0
  299. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +30 -0
  300. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +735 -66
  301. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +624 -0
  302. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +316 -0
  303. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +97 -73
  304. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +29 -0
  305. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +30 -0
  306. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +98 -73
  307. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +29 -0
  308. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +31 -0
  309. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +1834 -70
  310. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +29 -0
  311. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +31 -0
  312. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +99 -74
  313. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +29 -0
  314. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +30 -0
  315. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +97 -74
  316. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +29 -0
  317. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +30 -0
  318. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +98 -74
  319. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +29 -0
  320. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +31 -0
  321. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +1959 -69
  322. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +29 -0
  323. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +30 -0
  324. moai_adk/templates/.claude/skills/moai-lang-template/SKILL.md +348 -0
  325. moai_adk/templates/.claude/skills/moai-lang-template/VARIABLES.md +98 -0
  326. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +1230 -66
  327. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +29 -0
  328. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +34 -0
  329. moai_adk/templates/.claude/skills/moai-learning-optimizer/SKILL.md +575 -0
  330. moai_adk/templates/.claude/skills/moai-project-batch-questions/README.md +50 -0
  331. moai_adk/templates/.claude/skills/moai-project-batch-questions/SKILL.md +304 -0
  332. moai_adk/templates/.claude/skills/moai-project-batch-questions/examples.md +417 -0
  333. moai_adk/templates/.claude/skills/moai-project-batch-questions/reference.md +704 -0
  334. moai_adk/templates/.claude/skills/moai-project-config-manager/README.md +87 -0
  335. moai_adk/templates/.claude/skills/moai-project-config-manager/SKILL.md +552 -0
  336. moai_adk/templates/.claude/skills/moai-project-config-manager/examples.md +1109 -0
  337. moai_adk/templates/.claude/skills/moai-project-config-manager/reference.md +514 -0
  338. moai_adk/templates/.claude/skills/moai-project-config-manager/validate.py +106 -0
  339. moai_adk/templates/.claude/skills/moai-project-documentation/README.md +11 -0
  340. moai_adk/templates/.claude/skills/moai-project-documentation/SKILL.md +622 -0
  341. moai_adk/templates/.claude/skills/moai-project-documentation/examples.md +20 -0
  342. moai_adk/templates/.claude/skills/moai-project-documentation/reference.md +12 -0
  343. moai_adk/templates/.claude/skills/moai-project-language-initializer/README.md +152 -0
  344. moai_adk/templates/.claude/skills/moai-project-language-initializer/SKILL.md +285 -0
  345. moai_adk/templates/.claude/skills/moai-project-language-initializer/examples.md +333 -0
  346. moai_adk/templates/.claude/skills/moai-project-language-initializer/reference.md +386 -0
  347. moai_adk/templates/.claude/skills/moai-project-template-optimizer/README.md +49 -0
  348. moai_adk/templates/.claude/skills/moai-project-template-optimizer/SKILL.md +319 -0
  349. moai_adk/templates/.claude/skills/moai-project-template-optimizer/examples.md +58 -0
  350. moai_adk/templates/.claude/skills/moai-project-template-optimizer/reference.md +123 -0
  351. moai_adk/templates/.claude/skills/moai-session-info/SKILL.md +314 -0
  352. moai_adk/templates/.claude/skills/moai-streaming-ui/SKILL.md +552 -0
  353. moai_adk/templates/.claude/skills/moai-tag-policy-validator/SKILL.md +570 -0
  354. moai_adk/templates/.git-hooks/pre-commit +66 -0
  355. moai_adk/templates/.git-hooks/pre-push +255 -0
  356. moai_adk/templates/.github/workflows/c-tag-validation.yml +11 -0
  357. moai_adk/templates/.github/workflows/cpp-tag-validation.yml +11 -0
  358. moai_adk/templates/.github/workflows/csharp-tag-validation.yml +11 -0
  359. moai_adk/templates/.github/workflows/dart-tag-validation.yml +11 -0
  360. moai_adk/templates/.github/workflows/go-tag-validation.yml +130 -0
  361. moai_adk/templates/.github/workflows/java-tag-validation.yml +11 -0
  362. moai_adk/templates/.github/workflows/javascript-tag-validation.yml +135 -0
  363. moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +11 -0
  364. moai_adk/templates/.github/workflows/moai-gitflow.yml +166 -3
  365. moai_adk/templates/.github/workflows/moai-release-create.yml +100 -0
  366. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +188 -0
  367. moai_adk/templates/.github/workflows/php-tag-validation.yml +11 -0
  368. moai_adk/templates/.github/workflows/python-tag-validation.yml +118 -0
  369. moai_adk/templates/.github/workflows/release.yml +118 -0
  370. moai_adk/templates/.github/workflows/ruby-tag-validation.yml +11 -0
  371. moai_adk/templates/.github/workflows/rust-tag-validation.yml +11 -0
  372. moai_adk/templates/.github/workflows/shell-tag-validation.yml +11 -0
  373. moai_adk/templates/.github/workflows/spec-issue-sync.yml +338 -0
  374. moai_adk/templates/.github/workflows/swift-tag-validation.yml +11 -0
  375. moai_adk/templates/.github/workflows/tag-report.yml +269 -0
  376. moai_adk/templates/.github/workflows/tag-validation.yml +186 -0
  377. moai_adk/templates/.github/workflows/typescript-tag-validation.yml +154 -0
  378. moai_adk/templates/.mcp.json +31 -0
  379. moai_adk/templates/.moai/config.json +80 -7
  380. moai_adk/templates/CLAUDE.md +562 -546
  381. moai_adk/utils/banner.py +5 -5
  382. moai_adk/utils/common.py +294 -0
  383. moai_adk/utils/link_validator.py +235 -0
  384. moai_adk/utils/logger.py +8 -8
  385. moai_adk/utils/user_experience.py +451 -0
  386. moai_adk-0.20.1.dist-info/METADATA +233 -0
  387. moai_adk-0.20.1.dist-info/RECORD +404 -0
  388. moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
  389. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -156
  390. moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -85
  391. moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
  392. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -92
  393. moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -70
  394. moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -41
  395. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -636
  396. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -692
  397. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -470
  398. moai_adk/templates/.claude/skills/moai-alfred-debugger-pro/SKILL.md +0 -103
  399. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -103
  400. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -95
  401. moai_adk/templates/.claude/skills/moai-alfred-performance-optimizer/SKILL.md +0 -105
  402. moai_adk/templates/.claude/skills/moai-alfred-refactoring-coach/SKILL.md +0 -97
  403. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -97
  404. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -90
  405. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -99
  406. moai_adk/templates/.claude/skills/moai-alfred-tui-survey/SKILL.md +0 -87
  407. moai_adk/templates/.claude/skills/moai-alfred-tui-survey/examples.md +0 -62
  408. moai_adk/templates/.claude/skills/moai-claude-code/SKILL.md +0 -94
  409. moai_adk/templates/.claude/skills/moai-claude-code/examples.md +0 -513
  410. moai_adk/templates/.claude/skills/moai-claude-code/reference.md +0 -433
  411. moai_adk/templates/.claude/skills/moai-claude-code/templates/agent-full.md +0 -332
  412. moai_adk/templates/.claude/skills/moai-claude-code/templates/command-full.md +0 -384
  413. moai_adk/templates/.claude/skills/moai-claude-code/templates/plugin-full.json +0 -363
  414. moai_adk/templates/.claude/skills/moai-claude-code/templates/settings-full.json +0 -595
  415. moai_adk/templates/.claude/skills/moai-claude-code/templates/skill-full.md +0 -496
  416. moai_adk/templates/.claude/skills/moai-lang-clojure/SKILL.md +0 -100
  417. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +0 -99
  418. moai_adk/templates/.claude/skills/moai-lang-haskell/SKILL.md +0 -100
  419. moai_adk/templates/.claude/skills/moai-lang-julia/SKILL.md +0 -98
  420. moai_adk/templates/.claude/skills/moai-lang-lua/SKILL.md +0 -98
  421. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
  422. moai_adk/templates/.moai/memory/development-guide.md +0 -344
  423. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
  424. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  425. moai_adk/templates/.moai/project/product.md +0 -161
  426. moai_adk/templates/.moai/project/structure.md +0 -156
  427. moai_adk/templates/.moai/project/tech.md +0 -227
  428. moai_adk/templates/__init__.py +0 -2
  429. moai_adk-0.4.5.dist-info/METADATA +0 -369
  430. moai_adk-0.4.5.dist-info/RECORD +0 -152
  431. {moai_adk-0.4.5.dist-info → moai_adk-0.20.1.dist-info}/WHEEL +0 -0
  432. {moai_adk-0.4.5.dist-info → moai_adk-0.20.1.dist-info}/entry_points.txt +0 -0
  433. {moai_adk-0.4.5.dist-info → moai_adk-0.20.1.dist-info}/licenses/LICENSE +0 -0
@@ -1,230 +0,0 @@
1
- # Alfred Hooks System
2
-
3
- **Event-Driven Context Management for MoAI-ADK**
4
-
5
- Alfred Hooks integrates with Claude Code's event system to automatically manage project context, create checkpoints before risky operations, and provide just-in-time (JIT) document loading.
6
-
7
- ---
8
-
9
- ## 📐 Architecture
10
-
11
- ### Modular Design (9 Files, ≤284 LOC each)
12
-
13
- ```
14
- .claude/hooks/alfred/
15
- ├── alfred_hooks.py # Main entry point (CLI router)
16
- ├── core/ # Core business logic
17
- │ ├── __init__.py # Type definitions (HookPayload, HookResult)
18
- │ ├── project.py # Language detection, Git info, SPEC counting
19
- │ ├── context.py # JIT retrieval, workflow context
20
- │ ├── checkpoint.py # Event-driven checkpoint creation
21
- │ └── tags.py # TAG search, verification, caching
22
- └── handlers/ # Event handlers
23
- ├── __init__.py # Handler exports
24
- ├── session.py # SessionStart, SessionEnd
25
- ├── user.py # UserPromptSubmit
26
- ├── tool.py # PreToolUse, PostToolUse
27
- └── notification.py # Notification, Stop, SubagentStop
28
- ```
29
-
30
- ### Design Principles
31
-
32
- - **Single Responsibility**: Each module has one clear responsibility
33
- - **Separation of Concerns**: core (business logic) vs handlers (event processing)
34
- - **CODE-FIRST**: Scan code directly without intermediate cache (mtime Based invalidation)
35
- - **Context Engineering**: Minimize initial context burden with JIT Retrieval
36
-
37
- ---
38
-
39
- ## 🎯 Core Modules
40
-
41
- ### `core/project.py` (284 LOC)
42
-
43
- **Project metadata and language detection**
44
-
45
- ```python
46
- # Public API
47
- detect_language(cwd: str) -> str
48
- get_project_language(cwd: str) -> str
49
- get_git_info(cwd: str) -> dict[str, Any]
50
- count_specs(cwd: str) -> dict[str, int]
51
- ```
52
-
53
- **Features**:
54
- - Automatic detection of 20 languages ​​(Python, TypeScript, Java, Go, Rust, etc.)
55
- - `.moai/config.json` First, fallback to auto-detection
56
- - Check Git information (branch, commit, changes)
57
- - SPEC progress calculation (total, completed, percentage)
58
-
59
- ### `core/context.py` (110 LOC)
60
-
61
- **JIT Context Retrieval and Workflow Management**
62
-
63
- ```python
64
- # Public API
65
- get_jit_context(prompt: str, cwd: str) -> list[str]
66
- save_phase_context(phase: str, data: Any, ttl: int = 600)
67
- load_phase_context(phase: str, ttl: int = 600) -> Any | None
68
- clear_workflow_context()
69
- ```
70
-
71
- **Features**:
72
- - Automatically recommend documents based on prompt analysis
73
- - `/alfred:1-plan` → `spec-metadata.md`
74
- - `/alfred:2-run` → `development-guide.md`
75
- - Context caching for each workflow step (TTL 10 minutes)
76
- - Compliance with Anthropic Context Engineering principles
77
-
78
- ### `core/checkpoint.py` (244 LOC)
79
-
80
- **Event-Driven Checkpoint Automation**
81
-
82
- ```python
83
- # Public API
84
- detect_risky_operation(tool: str, args: dict, cwd: str) -> tuple[bool, str]
85
- create_checkpoint(cwd: str, operation: str) -> str
86
- log_checkpoint(cwd: str, branch: str, description: str)
87
- list_checkpoints(cwd: str, max_count: int = 10) -> list[dict]
88
- ```
89
-
90
- **Features**:
91
- - Automatic detection of dangerous tasks:
92
- - Bash: `rm -rf`, `git merge`, `git reset --hard`
93
- - Edit/Write: `CLAUDE.md`, `config.json`
94
- - MultiEdit: ≥10 files
95
- - Automatic creation of Git checkpoint: `checkpoint/before-{operation}-{timestamp}`
96
- - Checkpoint history management and recovery guide
97
-
98
- ### `core/tags.py` (244 LOC)
99
-
100
- **CODE-FIRST TAG SYSTEM**
101
-
102
- ```python
103
- # Public API
104
- search_tags(pattern: str, scope: list[str], cache_ttl: int = 60) -> list[dict]
105
- verify_tag_chain(tag_id: str) -> dict[str, Any]
106
- find_all_tags_by_type(tag_type: str) -> dict[str, list[str]]
107
- suggest_tag_reuse(keyword: str) -> list[str]
108
- get_library_version(library: str, cache_ttl: int = 86400) -> str | None
109
- set_library_version(library: str, version: str)
110
- ```
111
-
112
- **Features**:
113
- - ripgrep-based TAG search (parsing JSON output)
114
- - mtime-based cache invalidation (CODE-FIRST guaranteed)
115
- - TAG chain verification (@SPEC → @TEST → @CODE completeness check)
116
- - Library version caching (TTL 24 hours)
117
-
118
- ---
119
-
120
- ## 🎬 Event Handlers
121
-
122
- ### `handlers/session.py`
123
-
124
- **SessionStart, SessionEnd handlers**
125
-
126
- - **SessionStart**: Display project information
127
- - Language, Git status, SPEC progress, recent checkpoint
128
- - Display directly to user with `systemMessage` field
129
- - **SessionEnd**: Cleanup task (stub)
130
-
131
- ### `handlers/user.py`
132
-
133
- **UserPromptSubmit Handler**
134
-
135
- - Return list of JIT Context recommended documents
136
- - Analyze user prompt patterns and load related documents
137
-
138
- ### `handlers/tool.py`
139
-
140
- **PreToolUse, PostToolUse handlers**
141
-
142
- - **PreToolUse**: Automatic checkpoint creation when dangerous operation is detected
143
- - **PostToolUse**: Post-processing operation (stub)
144
-
145
- ### `handlers/notification.py`
146
-
147
- **Notification, Stop, SubagentStop handlers**
148
-
149
- - Basic implementation (stub, can be expanded in the future)
150
-
151
- ---
152
-
153
- ## 🧪 Testing
154
-
155
- ### Test Suite
156
-
157
- ```bash
158
- # Run all tests
159
- uv run pytest tests/unit/test_alfred_hooks_*.py -v --no-cov
160
-
161
- # Run specific module tests
162
- uv run pytest tests/unit/test_alfred_hooks_core_tags.py -v
163
- uv run pytest tests/unit/test_alfred_hooks_core_context.py -v
164
- uv run pytest tests/unit/test_alfred_hooks_core_project.py -v
165
- ```
166
-
167
- ### Test Coverage (18 tests)
168
-
169
- - ✅ **tags.py**: 7 tests (cache, TAG verification, version management)
170
- - ✅ **context.py**: 5 tests (JIT, workflow context)
171
- - ✅ **project.py**: 6 tests (language detection, Git, SPEC count)
172
-
173
- ### Test Structure
174
-
175
- ```python
176
- # Dynamic module loading for isolated testing
177
- def _load_{module}_module(module_name: str):
178
- repo_root = Path(__file__).resolve().parents[2]
179
- hooks_dir = repo_root / ".claude" / "hooks" / "alfred"
180
- sys.path.insert(0, str(hooks_dir))
181
-
182
- module_path = hooks_dir / "core" / "{module}.py"
183
- spec = importlib.util.spec_from_file_location(module_name, module_path)
184
- # ...
185
- ```
186
-
187
- ---
188
-
189
- ## 🔄 Migration from moai_hooks.py
190
-
191
- ### Before (Monolithic)
192
-
193
- - **1 file**: 1233 LOC
194
- - **Issues**:
195
- - All functions concentrated in one file
196
- - Difficult to test, complex to maintain
197
- - Unclear separation of responsibilities
198
-
199
- ### After (Modular)
200
-
201
- - **9 files**: ≤284 LOC each
202
- - **Benefits**:
203
- - Clear separation of responsibilities (SRP)
204
- - Independent module testing possible
205
- - Easy to expand, easy to maintain
206
- - Compliance with Context Engineering principles
207
-
208
- ### Breaking Changes
209
-
210
- **None** - External APIs remain the same.
211
-
212
- ---
213
-
214
- ## 📚 References
215
-
216
- ### Internal Documents
217
-
218
- - **CLAUDE.md**: MoAI-ADK User Guide
219
- - **.moai/memory/development-guide.md**: SPEC-First TDD Workflow
220
- - **.moai/memory/spec-metadata.md**: SPEC metadata standard
221
-
222
- ### External Resources
223
-
224
- - [Claude Code Hooks Documentation](https://docs.claude.com/en/docs/claude-code)
225
- - [Anthropic Context Engineering](https://docs.anthropic.com/claude/docs/context-engineering)
226
-
227
- ---
228
-
229
- **Last Updated**: 2025-10-16
230
- **Author**: @Alfred (MoAI-ADK SuperAgent)
@@ -1,156 +0,0 @@
1
- #!/usr/bin/env python3
2
- # @CODE:HOOKS-REFACTOR-001 | SPEC: SPEC-HOOKS-REFACTOR-001.md
3
- """Alfred Hooks - Main entry point for MoAI-ADK Claude Code Hooks
4
-
5
- A main entry point that routes Claude Code events to the appropriate handlers.
6
-
7
- 🏗️ Architecture:
8
- ┌─────────────────────────────────────────────────────────────┐
9
- │ alfred_hooks.py (Router) │
10
- ├─────────────────────────────────────────────────────────────┤
11
- │ - CLI argument parsing │
12
- │ - JSON I/O (stdin/stdout) │
13
- │ - Event routing to handlers │
14
- └─────────────────────────────────────────────────────────────┘
15
-
16
- ┌─────────────────────────────────────────────────────────────┐
17
- │ handlers/ (Event Handlers) │
18
- ├─────────────────────────────────────────────────────────────┤
19
- │ - session.py: SessionStart, SessionEnd │
20
- │ - user.py: UserPromptSubmit │
21
- │ - tool.py: PreToolUse, PostToolUse │
22
- │ - notification.py: Notification, Stop, SubagentStop │
23
- └─────────────────────────────────────────────────────────────┘
24
-
25
- ┌─────────────────────────────────────────────────────────────┐
26
- │ core/ (Business Logic) │
27
- ├─────────────────────────────────────────────────────────────┤
28
- │ - project.py: Language detection, Git info, SPEC progress │
29
- │ - context.py: JIT Retrieval, workflow context │
30
- │ - checkpoint.py: Event-Driven Checkpoint system │
31
- │ - tags.py: TAG search/verification, library version cache │
32
- └─────────────────────────────────────────────────────────────┘
33
-
34
- 🛠️ Usage:
35
- python alfred_hooks.py <event_name> < payload.json
36
-
37
- 📣 Supported Events:
38
- - SessionStart: Start Session (display project status)
39
- - UserPromptSubmit: Prompt submission (JIT document loading)
40
- - PreToolUse: Before using the tool (automatically creates checkpoint)
41
- - SessionEnd, PostToolUse, Notification, Stop, SubagentStop
42
-
43
- 🚦 Exit Codes:
44
- - 0: Success
45
- - 1: Error (no arguments, JSON parsing failure, exception thrown)
46
-
47
- 🧪 TDD History:
48
- - RED: Module separation design, event routing test
49
- - GREEN: 1233 LOC → 9 items Module separation implementation (SRP compliance)
50
- - REFACTOR: Import optimization, enhanced error handling
51
-
52
- Setup sys.path for package imports
53
- """
54
-
55
- import json
56
- import sys
57
- from pathlib import Path
58
-
59
- from core import HookResult
60
- from handlers import (
61
- handle_notification,
62
- handle_post_tool_use,
63
- handle_pre_tool_use,
64
- handle_session_end,
65
- handle_session_start,
66
- handle_stop,
67
- handle_subagent_stop,
68
- handle_user_prompt_submit,
69
- )
70
-
71
- # Add the hooks directory to sys.path to enable package imports
72
- HOOKS_DIR = Path(__file__).parent
73
- if str(HOOKS_DIR) not in sys.path:
74
- sys.path.insert(0, str(HOOKS_DIR))
75
-
76
-
77
- def main() -> None:
78
- """Main entry point - Claude Code Hook script
79
-
80
- Receives the event name as a CLI argument and reads the JSON payload through stdin.
81
- Calls the handler appropriate for the event and outputs the results to stdout as JSON.
82
-
83
- 🛠️ Usage:
84
- python alfred_hooks.py <event_name> < payload.json
85
-
86
- 📣 Supported Events:
87
- - SessionStart: Start Session (display project status)
88
- - UserPromptSubmit: Prompt submission (JIT document loading)
89
- - SessionEnd, PreToolUse, PostToolUse, Notification, Stop, SubagentStop
90
-
91
- 🚦 Exit Codes:
92
- - 0: Success
93
- - 1: Error (no arguments, JSON parsing failure, exception thrown)
94
-
95
- 📝 Examples:
96
- $ echo '{"cwd": "."}' | python alfred_hooks.py SessionStart
97
- {"message": "🚀 MoAI-ADK Session Started\\n...", ...}
98
-
99
- 🗒️ Notes:
100
- - Claude Code is automatically called (no need for direct user execution)
101
- - JSON I/O processing through stdin/stdout
102
- - Print error message to stderr
103
- - UserPromptSubmit uses a special output schema (hookEventName + additionalContext)
104
-
105
- 🧪 TDD History:
106
- - RED: Event routing, JSON I/O, error handling testing
107
- - GREEN: Handler map-based routing implementation
108
- - REFACTOR: Error message clarification, exit code standardization, UserPromptSubmit schema separation
109
- """
110
- # Check for event argument
111
- if len(sys.argv) < 2:
112
- print("Usage: alfred_hooks.py <event>", file=sys.stderr)
113
- sys.exit(1)
114
-
115
- event_name = sys.argv[1]
116
-
117
- try:
118
- # Read JSON from stdin
119
- input_data = sys.stdin.read()
120
- data = json.loads(input_data)
121
-
122
- cwd = data.get("cwd", ".")
123
-
124
- # Route to appropriate handler
125
- handlers = {
126
- "SessionStart": handle_session_start,
127
- "UserPromptSubmit": handle_user_prompt_submit,
128
- "SessionEnd": handle_session_end,
129
- "PreToolUse": handle_pre_tool_use,
130
- "PostToolUse": handle_post_tool_use,
131
- "Notification": handle_notification,
132
- "Stop": handle_stop,
133
- "SubagentStop": handle_subagent_stop,
134
- }
135
-
136
- handler = handlers.get(event_name)
137
- result = handler({"cwd": cwd, **data}) if handler else HookResult()
138
-
139
- # UserPromptSubmit uses a special output schema
140
- if event_name == "UserPromptSubmit":
141
- print(json.dumps(result.to_user_prompt_submit_dict()))
142
- else:
143
- print(json.dumps(result.to_dict()))
144
-
145
- sys.exit(0)
146
-
147
- except json.JSONDecodeError as e:
148
- print(f"JSON parse error: {e}", file=sys.stderr)
149
- sys.exit(1)
150
- except Exception as e:
151
- print(f"Unexpected error: {e}", file=sys.stderr)
152
- sys.exit(1)
153
-
154
-
155
- if __name__ == "__main__":
156
- main()
@@ -1,85 +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 asdict, dataclass, field
8
- from typing import Any, 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"""
27
-
28
- message: str | None = None
29
- systemMessage: str | None = None # Message displayed directly to the user # noqa: N815
30
- blocked: bool = False
31
- contextFiles: list[str] = field(default_factory=list) # noqa: N815
32
- suggestions: list[str] = field(default_factory=list)
33
- exitCode: int = 0 # noqa: N815
34
-
35
- def to_dict(self) -> dict[str, Any]:
36
- """Dictionary conversion for general Hook"""
37
- return asdict(self)
38
-
39
- def to_user_prompt_submit_dict(self) -> dict[str, Any]:
40
- """UserPromptSubmit Hook-specific output format
41
-
42
- Claude Code requires a special schema for UserPromptSubmit:
43
- {
44
- "hookEventName": "UserPromptSubmit",
45
- "additionalContext": "string (required)"
46
- }
47
-
48
- Returns:
49
- Claude Code UserPromptSubmit Hook Dictionary matching schema
50
-
51
- Examples:
52
- >>> result = HookResult(contextFiles=["tests/"])
53
- >>> result.to_user_prompt_submit_dict()
54
- {'hookEventName': 'UserPromptSubmit', 'additionalContext': '📎 Context: tests/'}
55
- """
56
- # Convert contextFiles to additionalContext string
57
- if self.contextFiles:
58
- context_str = "\n".join([f"📎 Context: {f}" for f in self.contextFiles])
59
- else:
60
- context_str = ""
61
-
62
- # Add message if there is one
63
- if self.message:
64
- if context_str:
65
- context_str = f"{self.message}\n\n{context_str}"
66
- else:
67
- context_str = self.message
68
-
69
- # If the string is empty, use default
70
- if not context_str:
71
- context_str = ""
72
-
73
- return {
74
- "hookEventName": "UserPromptSubmit",
75
- "additionalContext": context_str
76
- }
77
-
78
-
79
- __all__ = ["HookPayload", "HookResult"]
80
-
81
- # Note: core module exports:
82
- # - HookPayload, HookResult (type definitions)
83
- # - project.py: detect_language, get_git_info, count_specs, get_project_language
84
- # - context.py: get_jit_context
85
- # - checkpoint.py: detect_risky_operation, create_checkpoint, log_checkpoint, list_checkpoints
@@ -1,25 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Notification and control handlers
3
-
4
- Notification, Stop, SubagentStop event handling
5
- """
6
-
7
- from core import HookPayload, HookResult
8
-
9
-
10
- def handle_notification(payload: HookPayload) -> HookResult:
11
- """Notification event handler (default implementation)"""
12
- return HookResult()
13
-
14
-
15
- def handle_stop(payload: HookPayload) -> HookResult:
16
- """Stop event handler (default implementation)"""
17
- return HookResult()
18
-
19
-
20
- def handle_subagent_stop(payload: HookPayload) -> HookResult:
21
- """SubagentStop event handler (default implementation)"""
22
- return HookResult()
23
-
24
-
25
- __all__ = ["handle_notification", "handle_stop", "handle_subagent_stop"]
@@ -1,92 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Session event handlers
3
-
4
- SessionStart, SessionEnd event handling
5
- """
6
-
7
- from core import HookPayload, HookResult
8
- from core.checkpoint import list_checkpoints
9
- from core.project import count_specs, detect_language, get_git_info
10
-
11
-
12
- def handle_session_start(payload: HookPayload) -> HookResult:
13
- """SessionStart event handler (with Checkpoint list)
14
-
15
- When Claude Code Session starts, it displays a summary of project status.
16
- You can check the language, Git status, SPEC progress, and checkpoint list at a glance.
17
-
18
- Args:
19
- payload: Claude Code event payload (cwd key required)
20
-
21
- Returns:
22
- HookResult(message=project status summary message, systemMessage=for user display)
23
-
24
- Message Format:
25
- 🚀 MoAI-ADK Session Started
26
- Language: {language}
27
- Branch: {branch} ({commit hash})
28
- Changes: {Number of Changed Files}
29
- SPEC Progress: {Complete}/{Total} ({percent}%)
30
- Checkpoints: {number} available (showing the latest 3 items)
31
-
32
- Note:
33
- - Claude Code processes SessionStart in several stages (clear → compact)
34
- - Display message only at “compact” stage to prevent duplicate output
35
- - "clear" step returns empty result (invisible to user)
36
-
37
- TDD History:
38
- - RED: Session startup message format test
39
- - GREEN: Generate status message by combining helper functions
40
- - REFACTOR: Improved message format, improved readability, added checkpoint list
41
- - FIX: Prevent duplicate output of clear step (only compact step is displayed)
42
-
43
- @TAG:CHECKPOINT-EVENT-001
44
- """
45
- # Claude Code SessionStart runs in several stages (clear, compact, etc.)
46
- # Ignore the "clear" stage and output messages only at the "compact" stage
47
- event_phase = payload.get("phase", "")
48
- if event_phase == "clear":
49
- return HookResult() # returns an empty result (prevents duplicate output)
50
-
51
- cwd = payload.get("cwd", ".")
52
- language = detect_language(cwd)
53
- git_info = get_git_info(cwd)
54
- specs = count_specs(cwd)
55
- checkpoints = list_checkpoints(cwd, max_count=10)
56
-
57
- branch = git_info.get("branch", "N/A")
58
- commit = git_info.get("commit", "N/A")[:7]
59
- changes = git_info.get("changes", 0)
60
- spec_progress = f"{specs['completed']}/{specs['total']}"
61
-
62
- # systemMessage: displayed directly to the user
63
- lines = [
64
- "🚀 MoAI-ADK Session Started",
65
- f" Language: {language}",
66
- f" Branch: {branch} ({commit})",
67
- f" Changes: {changes}",
68
- f" SPEC Progress: {spec_progress} ({specs['percentage']}%)",
69
- ]
70
-
71
- # Add Checkpoint list (show only the latest 3 items)
72
- if checkpoints:
73
- lines.append(f" Checkpoints: {len(checkpoints)} available")
74
- for cp in reversed(checkpoints[-3:]): # Latest 3 items
75
- branch_short = cp["branch"].replace("before-", "")
76
- lines.append(f" - {branch_short}")
77
- lines.append(" Restore: /alfred:0-project restore")
78
-
79
- system_message = "\n".join(lines)
80
-
81
- return HookResult(
82
- message=system_message, # for Claude context
83
- systemMessage=system_message, # For user display
84
- )
85
-
86
-
87
- def handle_session_end(payload: HookPayload) -> HookResult:
88
- """SessionEnd event handler (default implementation)"""
89
- return HookResult()
90
-
91
-
92
- __all__ = ["handle_session_start", "handle_session_end"]
@@ -1,70 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Tool usage handlers
3
-
4
- PreToolUse, PostToolUse event handling
5
- """
6
-
7
- from core import HookPayload, HookResult
8
- from core.checkpoint import create_checkpoint, detect_risky_operation
9
-
10
-
11
- def handle_pre_tool_use(payload: HookPayload) -> HookResult:
12
- """PreToolUse event handler (Event-Driven Checkpoint integration)
13
-
14
- Automatically creates checkpoints before dangerous operations.
15
- Called before using the Claude Code tool, it notifies the user when danger is detected.
16
-
17
- Args:
18
- payload: Claude Code event payload
19
- (includes tool, arguments, cwd keys)
20
-
21
- Returns:
22
- HookResult(
23
- message=checkpoint creation notification (when danger is detected);
24
- blocked=False (always continue operation)
25
- )
26
-
27
- Checkpoint Triggers:
28
- - Bash: rm -rf, git merge, git reset --hard
29
- - Edit/Write: CLAUDE.md, config.json
30
- - MultiEdit: ≥10 files
31
-
32
- Examples:
33
- Bash tool (rm -rf) detection:
34
- → "🛡️ Checkpoint created: before-delete-20251015-143000"
35
-
36
- Notes:
37
- - Return blocked=False even after detection of danger (continue operation)
38
- - Work continues even when checkpoint fails (ignores)
39
- - Transparent background operation
40
-
41
- @TAG:CHECKPOINT-EVENT-001
42
- """
43
- tool_name = payload.get("tool", "")
44
- tool_args = payload.get("arguments", {})
45
- cwd = payload.get("cwd", ".")
46
-
47
- # Dangerous operation detection
48
- is_risky, operation_type = detect_risky_operation(tool_name, tool_args, cwd)
49
-
50
- # Create checkpoint when danger is detected
51
- if is_risky:
52
- checkpoint_branch = create_checkpoint(cwd, operation_type)
53
-
54
- if checkpoint_branch != "checkpoint-failed":
55
- message = (
56
- f"🛡️ Checkpoint created: {checkpoint_branch}\n"
57
- f" Operation: {operation_type}"
58
- )
59
-
60
- return HookResult(message=message, blocked=False)
61
-
62
- return HookResult(blocked=False)
63
-
64
-
65
- def handle_post_tool_use(payload: HookPayload) -> HookResult:
66
- """PostToolUse event handler (default implementation)"""
67
- return HookResult()
68
-
69
-
70
- __all__ = ["handle_pre_tool_use", "handle_post_tool_use"]