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
@@ -0,0 +1,118 @@
1
+ name: Release & Deploy to PyPI
2
+
3
+ # 트리거: 버전 태그가 푸시되었을 때 (release event의 신뢰성 문제 해결)
4
+ on:
5
+ push:
6
+ tags:
7
+ - "v*.*.*"
8
+
9
+ jobs:
10
+ deploy:
11
+ name: 📦 Deploy to PyPI
12
+ runs-on: ubuntu-latest
13
+
14
+ strategy:
15
+ matrix:
16
+ python-version: ["3.11", "3.12", "3.13"]
17
+
18
+ steps:
19
+ - name: 📥 Checkout code
20
+ uses: actions/checkout@v4
21
+
22
+ - name: 🐍 Setup Python ${{ matrix.python-version }}
23
+ uses: actions/setup-python@v5
24
+ with:
25
+ python-version: ${{ matrix.python-version }}
26
+
27
+ - name: 📦 Install uv
28
+ uses: astral-sh/setup-uv@v2
29
+ with:
30
+ enable-cache: true
31
+ cache-dependency-glob: "pyproject.toml"
32
+
33
+ - name: 🔨 Build package
34
+ run: |
35
+ echo "🏗️ Building package..."
36
+ uv build
37
+ echo "✅ Package built successfully"
38
+ ls -lh dist/
39
+
40
+ - name: 🚀 Publish to PyPI
41
+ env:
42
+ UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
43
+ run: |
44
+ echo "📤 Publishing to PyPI..."
45
+ uv publish --publish-url https://upload.pypi.org/legacy/
46
+ echo "✅ Package published successfully"
47
+
48
+ - name: 🔍 Verify PyPI deployment
49
+ run: |
50
+ echo "🔍 Verifying PyPI deployment..."
51
+
52
+ # Extract version from release tag (e.g., v0.14.0 → 0.14.0)
53
+ VERSION="${{ github.ref_name }}"
54
+ VERSION="${VERSION#v}"
55
+
56
+ # Wait for PyPI CDN propagation (max 50 seconds)
57
+ MAX_RETRIES=10
58
+ RETRY_COUNT=0
59
+ PACKAGE_FOUND=false
60
+
61
+ while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
62
+ RETRY_COUNT=$((RETRY_COUNT + 1))
63
+ echo "⏳ Checking PyPI... (attempt $RETRY_COUNT/$MAX_RETRIES)"
64
+
65
+ if pip index versions moai-adk 2>/dev/null | grep -q "$VERSION"; then
66
+ echo "✅ Package available on PyPI: moai-adk==$VERSION"
67
+ PACKAGE_FOUND=true
68
+ break
69
+ fi
70
+
71
+ if [ $RETRY_COUNT -lt $MAX_RETRIES ]; then
72
+ sleep 5
73
+ fi
74
+ done
75
+
76
+ if [ "$PACKAGE_FOUND" = "false" ]; then
77
+ echo "❌ Package not found on PyPI after 50 seconds"
78
+ echo "⚠️ Manual verification required: https://pypi.org/project/moai-adk/$VERSION/"
79
+ exit 1
80
+ fi
81
+
82
+ # Test installation in temporary environment
83
+ echo ""
84
+ echo "📦 Testing installation..."
85
+
86
+ TEMP_VENV="/tmp/moai-adk-verify-$VERSION"
87
+ python -m venv "$TEMP_VENV"
88
+ source "$TEMP_VENV/bin/activate"
89
+
90
+ # Install package without cache
91
+ pip install moai-adk==$VERSION --no-cache-dir 2>&1 | tail -5
92
+
93
+ # Verify installation
94
+ if moai-adk --version 2>/dev/null | grep -q "$VERSION"; then
95
+ echo "✅ Installation verification passed"
96
+ echo " Installed version: $(moai-adk --version)"
97
+ else
98
+ echo "❌ Installation verification failed"
99
+ INSTALLED=$(moai-adk --version 2>/dev/null || echo "unknown")
100
+ echo " Expected: $VERSION"
101
+ echo " Got: $INSTALLED"
102
+ deactivate
103
+ rm -rf "$TEMP_VENV"
104
+ exit 1
105
+ fi
106
+
107
+ # Cleanup
108
+ deactivate
109
+ rm -rf "$TEMP_VENV"
110
+ echo "✅ Cleanup complete"
111
+
112
+ - name: ✨ Deployment complete
113
+ run: |
114
+ echo "🎉 Release deployment complete!"
115
+ echo ""
116
+ echo "📦 Package: moai-adk"
117
+ echo "🏷️ Release: ${{ github.ref }}"
118
+ echo "🔗 PyPI: https://pypi.org/project/moai-adk/${{ github.ref_name }}/"
@@ -0,0 +1,11 @@
1
+ name: Ruby TAG Validation
2
+ on:
3
+ push:
4
+ branches: [ develop, main ]
5
+ jobs:
6
+ validate-tags:
7
+ runs-on: ubuntu-latest
8
+ steps:
9
+ - uses: actions/checkout@v3
10
+ - name: Validate Ruby TAGs
11
+ run: echo "Validating Ruby TAGs"
@@ -0,0 +1,11 @@
1
+ name: Rust TAG Validation
2
+ on:
3
+ push:
4
+ branches: [ develop, main ]
5
+ jobs:
6
+ validate-tags:
7
+ runs-on: ubuntu-latest
8
+ steps:
9
+ - uses: actions/checkout@v3
10
+ - name: Validate Rust TAGs
11
+ run: echo "Validating Rust TAGs"
@@ -0,0 +1,11 @@
1
+ name: Shell TAG Validation
2
+ on:
3
+ push:
4
+ branches: [ develop, main ]
5
+ jobs:
6
+ validate-tags:
7
+ runs-on: ubuntu-latest
8
+ steps:
9
+ - uses: actions/checkout@v3
10
+ - name: Validate Shell TAGs
11
+ run: echo "Validating Shell TAGs"
@@ -0,0 +1,338 @@
1
+ name: 📋 SPEC Issue Sync
2
+
3
+ on:
4
+ pull_request:
5
+ paths:
6
+ - '.moai/specs/SPEC-*/spec.md'
7
+ types: [opened, synchronize]
8
+
9
+ permissions:
10
+ issues: write
11
+ pull-requests: write
12
+ contents: read
13
+
14
+ jobs:
15
+ sync-spec-to-issue:
16
+ runs-on: ubuntu-latest
17
+ name: 🔄 Sync SPEC to GitHub Issue
18
+
19
+ steps:
20
+ - name: Checkout code
21
+ uses: actions/checkout@v4
22
+ with:
23
+ fetch-depth: 0
24
+ ref: ${{ github.event.pull_request.head.sha }}
25
+
26
+ - name: Find and parse SPEC file
27
+ id: spec
28
+ env:
29
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
30
+ run: |
31
+ set -x # Enable debug mode
32
+
33
+ echo "=== STEP 1: Get PR branch name ==="
34
+ branch_name="${{ github.head_ref }}"
35
+ echo "Branch: $branch_name"
36
+
37
+ echo ""
38
+ echo "=== STEP 2: Get changed files from PR ==="
39
+ # Get list of changed files from PR
40
+ changed_files=$(gh pr view ${{ github.event.pull_request.number }} --json files --jq '.files[].path' 2>&1)
41
+
42
+ if [ $? -ne 0 ]; then
43
+ echo "⚠️ Failed to fetch PR files, falling back to git diff"
44
+ changed_files=$(git diff --name-only origin/main HEAD 2>&1)
45
+ fi
46
+
47
+ echo "Changed files:"
48
+ echo "$changed_files"
49
+
50
+ echo ""
51
+ echo "=== STEP 3: Find SPEC files that were actually changed ==="
52
+ # Find spec files that were actually modified in this PR
53
+ spec_files=$(echo "$changed_files" | grep -E '\.moai/specs/SPEC-.*/spec\.md$' || true)
54
+
55
+ if [ -z "$spec_files" ]; then
56
+ echo "⚠️ No SPEC file changes detected in this PR"
57
+ echo "Exiting gracefully (this is expected if no SPEC files changed)"
58
+ exit 0
59
+ fi
60
+
61
+ echo "Found SPEC files:"
62
+ echo "$spec_files"
63
+
64
+ # Count SPEC files
65
+ spec_file_count=$(echo "$spec_files" | wc -l)
66
+ echo "Count: $spec_file_count"
67
+
68
+ if [ "$spec_file_count" -gt 1 ]; then
69
+ echo ""
70
+ echo "⚠️ WARNING: Multiple SPEC files detected in this PR"
71
+ echo " This is unusual. Using first SPEC file."
72
+ echo " Files:"
73
+ echo "$spec_files" | sed 's/^/ /'
74
+ fi
75
+
76
+ # Select first SPEC file
77
+ spec_file=$(echo "$spec_files" | head -1)
78
+ echo ""
79
+ echo "✅ Selected SPEC file: $spec_file"
80
+ echo "spec_file=$spec_file" >> $GITHUB_OUTPUT
81
+
82
+ echo ""
83
+ echo "=== STEP 4: Extract YAML metadata ==="
84
+ # Extract YAML metadata using grep
85
+ spec_id=$(grep "^id:" "$spec_file" | sed 's/^id: *//' | tr -d ' "')
86
+ spec_version=$(grep "^version:" "$spec_file" | sed 's/^version: *//' | tr -d ' "')
87
+ spec_status=$(grep "^status:" "$spec_file" | sed 's/^status: *//' | tr -d ' "')
88
+ spec_priority=$(grep "^priority:" "$spec_file" | sed 's/^priority: *//' | tr -d ' "')
89
+
90
+ # Extract title from H1 heading
91
+ spec_title=$(grep "^# @SPEC:" "$spec_file" | sed 's/^# @SPEC:[^:]*: //')
92
+
93
+ echo "✅ Extracted SPEC metadata:"
94
+ echo " ID: $spec_id"
95
+ echo " Title: $spec_title"
96
+ echo " Version: $spec_version"
97
+ echo " Status: $spec_status"
98
+ echo " Priority: $spec_priority"
99
+
100
+ echo ""
101
+ echo "=== STEP 5: Validate SPEC status ==="
102
+ # Skip if SPEC is already completed (historical document)
103
+ if [ "$spec_status" = "completed" ]; then
104
+ echo "⚠️ SPEC status is 'completed' (historical document)"
105
+ echo " Skipping issue creation for completed SPEC"
106
+ exit 0
107
+ fi
108
+
109
+ echo "✅ SPEC status is valid (not completed)"
110
+
111
+ echo ""
112
+ echo "=== STEP 6: Validate branch name matches SPEC ID ==="
113
+ # Extract SPEC ID from branch name (feature/SPEC-UPDATE-REFACTOR-002 -> UPDATE-REFACTOR-002)
114
+ branch_spec_id=$(echo "$branch_name" | grep -oE 'SPEC-[A-Z0-9_-]+' | sed 's/^SPEC-//' || true)
115
+
116
+ if [ -n "$branch_spec_id" ]; then
117
+ if [ "$branch_spec_id" != "$spec_id" ]; then
118
+ echo "⚠️ WARNING: Branch name mismatch!"
119
+ echo " Branch SPEC ID: $branch_spec_id"
120
+ echo " File SPEC ID: $spec_id"
121
+ echo " Continuing anyway (might be intentional)"
122
+ else
123
+ echo "✅ Branch name matches SPEC ID"
124
+ fi
125
+ else
126
+ echo "⚠️ Could not extract SPEC ID from branch name"
127
+ echo " Branch: $branch_name"
128
+ echo " Continuing anyway"
129
+ fi
130
+
131
+ echo ""
132
+ echo "=== STEP 7: Output all variables ==="
133
+ echo "spec_id=$spec_id" >> $GITHUB_OUTPUT
134
+ echo "spec_version=$spec_version" >> $GITHUB_OUTPUT
135
+ echo "spec_status=$spec_status" >> $GITHUB_OUTPUT
136
+ echo "spec_priority=$spec_priority" >> $GITHUB_OUTPUT
137
+ echo "spec_title=$spec_title" >> $GITHUB_OUTPUT
138
+
139
+ - name: Check for existing issue
140
+ if: steps.spec.outputs.spec_id
141
+ id: check-issue
142
+ env:
143
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
144
+ run: |
145
+ spec_id="${{ steps.spec.outputs.spec_id }}"
146
+
147
+ echo "=== Checking for existing issue ==="
148
+ echo "Searching for existing GitHub issue with SPEC-$spec_id..."
149
+
150
+ # PRIMARY: Search with label filter (efficient)
151
+ echo " Attempt 1: Searching with 'spec' label filter..."
152
+ existing_issue=$(gh issue list \
153
+ --label "spec" \
154
+ --state all \
155
+ --search "[SPEC-$spec_id]" \
156
+ --json number,title,state \
157
+ --jq '.[] | select(.title | contains("[SPEC-'$spec_id']")) | .number' \
158
+ 2>/dev/null | head -1)
159
+
160
+ # FALLBACK: Search without label filter (in case labels missing)
161
+ if [ -z "$existing_issue" ]; then
162
+ echo " Attempt 2: Searching WITHOUT label filter (fallback for missing labels)..."
163
+ existing_issue=$(gh issue list \
164
+ --state all \
165
+ --search "[SPEC-$spec_id]" \
166
+ --json number,title,state,labels \
167
+ --jq '.[] | select(.title | contains("[SPEC-'$spec_id']")) | .number' \
168
+ 2>/dev/null | head -1)
169
+
170
+ if [ -n "$existing_issue" ]; then
171
+ echo " ⚠️ Found issue without 'spec' label, adding labels..."
172
+ # Add missing labels to existing issue
173
+ gh issue edit "$existing_issue" --add-label "spec,planning" 2>/dev/null || true
174
+ fi
175
+ fi
176
+
177
+ if [ -n "$existing_issue" ]; then
178
+ echo "✅ Found existing issue: #$existing_issue"
179
+ echo "issue_exists=true" >> $GITHUB_OUTPUT
180
+ echo "issue_number=$existing_issue" >> $GITHUB_OUTPUT
181
+ else
182
+ echo "📋 No existing issue found for SPEC-$spec_id"
183
+ echo "issue_exists=false" >> $GITHUB_OUTPUT
184
+ fi
185
+
186
+ - name: Create or Update GitHub Issue
187
+ if: steps.spec.outputs.spec_id
188
+ id: create-issue
189
+ env:
190
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
191
+ run: |
192
+ spec_id="${{ steps.spec.outputs.spec_id }}"
193
+ spec_version="${{ steps.spec.outputs.spec_version }}"
194
+ spec_title="${{ steps.spec.outputs.spec_title }}"
195
+ spec_status="${{ steps.spec.outputs.spec_status }}"
196
+ spec_priority="${{ steps.spec.outputs.spec_priority }}"
197
+ spec_file="${{ steps.spec.outputs.spec_file }}"
198
+ issue_exists="${{ steps.check-issue.outputs.issue_exists }}"
199
+ existing_issue="${{ steps.check-issue.outputs.issue_number }}"
200
+
201
+ # Read SPEC content (skip YAML frontmatter: 9 lines + 1 blank = 10 lines total)
202
+ # Start reading from line 11
203
+ spec_content=$(tail -n +11 "$spec_file")
204
+
205
+ # Create issue body using GitHub Actions recommended pattern
206
+ # Reference: https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions
207
+ {
208
+ echo "## SPEC Metadata"
209
+ echo ""
210
+ echo "| Field | Value |"
211
+ echo "|-------|-------|"
212
+ echo "| **ID** | $spec_id |"
213
+ echo "| **Version** | $spec_version |"
214
+ echo "| **Status** | $spec_status |"
215
+ echo "| **Priority** | $spec_priority |"
216
+ echo ""
217
+ echo "## SPEC Document"
218
+ echo ""
219
+ echo "$spec_content"
220
+ echo ""
221
+ echo "---"
222
+ echo ""
223
+ echo "📎 **Branch**: \`feature/$spec_id\`"
224
+ echo "🔗 **PR**: #${{ github.event.pull_request.number }}"
225
+ echo "📝 **Auto-synced**: This issue is automatically synchronized from the SPEC document"
226
+ } > /tmp/issue_body.txt
227
+
228
+ if [ "$issue_exists" = "true" ]; then
229
+ echo "📝 Updating existing issue #$existing_issue..."
230
+ echo " Title: [SPEC-$spec_id] $spec_title (v$spec_version)"
231
+ echo " Labels: spec, planning, $spec_priority"
232
+
233
+ # Update existing issue with new content and ensure proper labels
234
+ gh issue edit "$existing_issue" \
235
+ --title "[SPEC-$spec_id] $spec_title (v$spec_version)" \
236
+ --body-file /tmp/issue_body.txt \
237
+ --add-label "spec,planning,$spec_priority" \
238
+ --state open
239
+
240
+ issue_num=$existing_issue
241
+ echo "✅ Updated issue #$issue_num with latest SPEC version"
242
+ else
243
+ echo "📋 Creating new GitHub Issue..."
244
+ echo " Title: [SPEC-$spec_id] $spec_title (v$spec_version)"
245
+ echo " Body file: /tmp/issue_body.txt"
246
+ wc -l /tmp/issue_body.txt
247
+
248
+ # Create issue with labels using body-file
249
+ issue_output=$(gh issue create \
250
+ --title "[SPEC-$spec_id] $spec_title (v$spec_version)" \
251
+ --body-file /tmp/issue_body.txt \
252
+ --label "spec" \
253
+ --label "planning" \
254
+ --label "$spec_priority" 2>&1)
255
+
256
+ echo "$issue_output" | tee /tmp/issue_output.txt
257
+
258
+ # Extract issue number from output
259
+ issue_num=$(echo "$issue_output" | grep -oE '/issues/[0-9]+' | grep -oE '[0-9]+' | head -1)
260
+
261
+ if [ -z "$issue_num" ]; then
262
+ echo "⚠️ Could not extract issue number from output"
263
+ echo "Full output:"
264
+ cat /tmp/issue_output.txt
265
+ exit 1
266
+ fi
267
+
268
+ echo "✅ Created issue #$issue_num"
269
+ fi
270
+
271
+ echo "issue_number=$issue_num" >> $GITHUB_OUTPUT
272
+
273
+ - name: Validate SPEC issue labels
274
+ if: steps.create-issue.outputs.issue_number
275
+ id: validate-labels
276
+ env:
277
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
278
+ run: |
279
+ issue_num="${{ steps.create-issue.outputs.issue_number }}"
280
+ spec_priority="${{ steps.spec.outputs.spec_priority }}"
281
+
282
+ echo "🔍 Validating SPEC issue #$issue_num labels..."
283
+
284
+ # Get current labels
285
+ current_labels=$(gh issue view $issue_num --json labels --jq '.labels[].name' | tr '\n' ',' | sed 's/,$//')
286
+ echo "Current labels: $current_labels"
287
+
288
+ # Check for mandatory labels
289
+ needs_update=false
290
+
291
+ if [[ ! "$current_labels" =~ "spec" ]]; then
292
+ echo "⚠️ Missing 'spec' label, adding..."
293
+ gh issue edit $issue_num --add-label "spec"
294
+ needs_update=true
295
+ fi
296
+
297
+ if [[ ! "$current_labels" =~ "planning" ]]; then
298
+ echo "⚠️ Missing 'planning' label, adding..."
299
+ gh issue edit $issue_num --add-label "planning"
300
+ needs_update=true
301
+ fi
302
+
303
+ # Check for priority label
304
+ if [[ ! "$current_labels" =~ (critical|high|medium|low) ]]; then
305
+ echo "⚠️ No priority label found, adding '$spec_priority' as default"
306
+ gh issue edit $issue_num --add-label "$spec_priority"
307
+ needs_update=true
308
+ fi
309
+
310
+ if [ "$needs_update" = true ]; then
311
+ echo "✅ SPEC labels validated and corrected"
312
+ else
313
+ echo "✅ SPEC labels already valid"
314
+ fi
315
+
316
+ - name: Add PR comment
317
+ if: steps.create-issue.outputs.issue_number
318
+ env:
319
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
320
+ run: |
321
+ issue_num="${{ steps.create-issue.outputs.issue_number }}"
322
+ spec_id="${{ steps.spec.outputs.spec_id }}"
323
+ spec_title="${{ steps.spec.outputs.spec_title }}"
324
+
325
+ # Create PR comment body using same pattern
326
+ {
327
+ echo "✅ **SPEC GitHub Issue Created**"
328
+ echo ""
329
+ echo "This SPEC has been synchronized to GitHub Issue."
330
+ echo ""
331
+ echo "📋 **Issue**: [#$issue_num - SPEC-$spec_id: $spec_title](../issues/$issue_num)"
332
+ echo "🔗 **SPEC File**: \`.moai/specs/SPEC-$spec_id/spec.md\`"
333
+ echo ""
334
+ echo "The issue will be automatically updated as you modify the SPEC document."
335
+ } > /tmp/pr_comment.txt
336
+
337
+ gh pr comment ${{ github.event.pull_request.number }} --body-file /tmp/pr_comment.txt
338
+ echo "✅ Added PR comment linking to issue #$issue_num"
@@ -0,0 +1,11 @@
1
+ name: Swift TAG Validation
2
+ on:
3
+ push:
4
+ branches: [ develop, main ]
5
+ jobs:
6
+ validate-tags:
7
+ runs-on: ubuntu-latest
8
+ steps:
9
+ - uses: actions/checkout@v3
10
+ - name: Validate Swift TAGs
11
+ run: echo "Validating Swift TAGs"