moai-adk 0.9.0__py3-none-any.whl → 0.15.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 (186) hide show
  1. moai_adk/cli/commands/init.py +14 -2
  2. moai_adk/cli/commands/update.py +214 -56
  3. moai_adk/core/issue_creator.py +2 -2
  4. moai_adk/core/project/detector.py +201 -12
  5. moai_adk/core/project/initializer.py +62 -1
  6. moai_adk/core/project/phase_executor.py +48 -6
  7. moai_adk/core/tags/ci_validator.py +34 -4
  8. moai_adk/core/tags/pre_commit_validator.py +40 -2
  9. moai_adk/core/tags/reporter.py +2 -3
  10. moai_adk/core/tags/validator.py +1 -1
  11. moai_adk/core/template_engine.py +20 -5
  12. moai_adk/templates/.claude/agents/alfred/backend-expert.md +319 -0
  13. moai_adk/templates/.claude/agents/alfred/devops-expert.md +464 -0
  14. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +1 -1
  15. moai_adk/templates/.claude/agents/alfred/frontend-expert.md +357 -0
  16. moai_adk/templates/.claude/agents/alfred/git-manager.md +2 -2
  17. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +76 -3
  18. moai_adk/templates/.claude/agents/alfred/project-manager.md +49 -10
  19. moai_adk/templates/.claude/agents/alfred/quality-gate.md +3 -3
  20. moai_adk/templates/.claude/agents/alfred/spec-builder.md +180 -41
  21. moai_adk/templates/.claude/agents/alfred/tag-agent.md +74 -0
  22. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +107 -5
  23. moai_adk/templates/.claude/agents/alfred/trust-checker.md +2 -2
  24. moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +571 -0
  25. moai_adk/templates/.claude/commands/alfred/0-project.md +928 -263
  26. moai_adk/templates/.claude/commands/alfred/1-plan.md +220 -68
  27. moai_adk/templates/.claude/commands/alfred/2-run.md +299 -51
  28. moai_adk/templates/.claude/commands/alfred/3-sync.md +452 -51
  29. moai_adk/templates/.claude/commands/alfred/9-feedback.md +1 -1
  30. moai_adk/templates/.claude/hooks/alfred/core/project.py +25 -27
  31. moai_adk/templates/.claude/hooks/alfred/core/timeout.py +136 -0
  32. moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +108 -0
  33. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +4 -4
  34. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +29 -0
  35. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +11 -19
  36. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +11 -19
  37. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +11 -19
  38. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +10 -18
  39. moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +2 -2
  40. moai_adk/templates/.claude/hooks/alfred/shared/core/checkpoint.py +3 -3
  41. moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +5 -5
  42. moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +40 -41
  43. moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +55 -23
  44. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +4 -4
  45. moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +132 -3
  46. moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +9 -10
  47. moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +3 -6
  48. moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +19 -0
  49. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +14 -22
  50. moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +1 -0
  51. moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +161 -0
  52. moai_adk/templates/.claude/settings.json +5 -5
  53. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +70 -0
  54. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +62 -0
  55. moai_adk/templates/{.moai/memory/CLAUDE-AGENTS-GUIDE.md → .claude/skills/moai-alfred-agent-guide/reference.md} +34 -0
  56. moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +56 -0
  57. moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +28 -0
  58. moai_adk/templates/.claude/skills/moai-alfred-config-schema/reference.md +444 -0
  59. moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +62 -0
  60. moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +28 -0
  61. moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +405 -0
  62. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +51 -0
  63. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +355 -0
  64. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +239 -0
  65. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +323 -0
  66. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +286 -0
  67. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +126 -0
  68. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/SKILL.md +74 -0
  69. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/examples.md +4 -0
  70. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/reference.md +269 -0
  71. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +19 -0
  72. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +4 -0
  73. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/SKILL.md +198 -0
  74. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/examples.md +431 -0
  75. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/reference.md +141 -0
  76. moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +89 -0
  77. moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +122 -0
  78. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +508 -0
  79. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +481 -0
  80. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +100 -0
  81. moai_adk/templates/.claude/skills/moai-alfred-reporting/SKILL.md +273 -0
  82. moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +77 -0
  83. moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +265 -0
  84. moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +19 -0
  85. moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +4 -0
  86. moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +84 -0
  87. moai_adk/templates/.claude/skills/{moai-spec-authoring → moai-alfred-spec-authoring}/SKILL.md +5 -5
  88. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/SKILL.md +115 -0
  89. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/examples.md +4 -0
  90. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/reference.md +348 -0
  91. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +19 -0
  92. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +4 -0
  93. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +211 -0
  94. moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +288 -0
  95. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/SKILL.md +19 -0
  96. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/examples.md +4 -0
  97. moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/SKILL.md +3 -3
  98. moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +802 -0
  99. moai_adk/templates/.claude/skills/moai-design-systems/examples.md +1238 -0
  100. moai_adk/templates/.claude/skills/moai-design-systems/reference.md +673 -0
  101. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +17 -13
  102. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +15 -12
  103. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +14 -12
  104. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +14 -11
  105. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +10 -8
  106. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +15 -12
  107. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +13 -11
  108. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +16 -10
  109. moai_adk/templates/.claude/skills/moai-project-documentation.md +622 -0
  110. moai_adk/templates/.git-hooks/pre-push +143 -0
  111. moai_adk/templates/.github/workflows/c-tag-validation.yml +11 -0
  112. moai_adk/templates/.github/workflows/cpp-tag-validation.yml +11 -0
  113. moai_adk/templates/.github/workflows/csharp-tag-validation.yml +11 -0
  114. moai_adk/templates/.github/workflows/dart-tag-validation.yml +11 -0
  115. moai_adk/templates/.github/workflows/go-tag-validation.yml +130 -0
  116. moai_adk/templates/.github/workflows/java-tag-validation.yml +11 -0
  117. moai_adk/templates/.github/workflows/javascript-tag-validation.yml +135 -0
  118. moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +11 -0
  119. moai_adk/templates/.github/workflows/moai-gitflow.yml +182 -25
  120. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +35 -29
  121. moai_adk/templates/.github/workflows/php-tag-validation.yml +11 -0
  122. moai_adk/templates/.github/workflows/python-tag-validation.yml +118 -0
  123. moai_adk/templates/.github/workflows/release.yml +76 -7
  124. moai_adk/templates/.github/workflows/ruby-tag-validation.yml +11 -0
  125. moai_adk/templates/.github/workflows/rust-tag-validation.yml +11 -0
  126. moai_adk/templates/.github/workflows/shell-tag-validation.yml +11 -0
  127. moai_adk/templates/.github/workflows/spec-issue-sync.yml +208 -41
  128. moai_adk/templates/.github/workflows/swift-tag-validation.yml +11 -0
  129. moai_adk/templates/.github/workflows/tag-report.yml +269 -0
  130. moai_adk/templates/.github/workflows/tag-validation.yml +186 -0
  131. moai_adk/templates/.github/workflows/typescript-tag-validation.yml +154 -0
  132. moai_adk/templates/.moai/config.json +3 -1
  133. moai_adk/templates/CLAUDE.md +940 -45
  134. moai_adk/templates/workflows/go-tag-validation.yml +30 -0
  135. moai_adk/templates/workflows/javascript-tag-validation.yml +41 -0
  136. moai_adk/templates/workflows/python-tag-validation.yml +42 -0
  137. moai_adk/templates/workflows/typescript-tag-validation.yml +31 -0
  138. moai_adk/utils/banner.py +5 -5
  139. {moai_adk-0.9.0.dist-info → moai_adk-0.15.1.dist-info}/METADATA +1253 -527
  140. {moai_adk-0.9.0.dist-info → moai_adk-0.15.1.dist-info}/RECORD +169 -109
  141. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -209
  142. moai_adk/templates/.claude/hooks/alfred/notification__handle_events.py +0 -102
  143. moai_adk/templates/.claude/hooks/alfred/stop__handle_interrupt.py +0 -102
  144. moai_adk/templates/.claude/hooks/alfred/subagent_stop__handle_subagent_end.py +0 -102
  145. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
  146. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
  147. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
  148. moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +0 -176
  149. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
  150. moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
  151. moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
  152. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -330
  153. moai_adk/templates/.moai/project/product.md +0 -161
  154. moai_adk/templates/.moai/project/structure.md +0 -156
  155. moai_adk/templates/.moai/project/tech.md +0 -227
  156. moai_adk/templates/README.md +0 -256
  157. moai_adk/templates/__init__.py +0 -2
  158. /moai_adk/templates/{.moai/memory/ISSUE-LABEL-MAPPING.md → .claude/skills/moai-alfred-issue-labels/reference.md} +0 -0
  159. /moai_adk/templates/{.moai/memory/CLAUDE-PRACTICES.md → .claude/skills/moai-alfred-practices/reference.md} +0 -0
  160. /moai_adk/templates/{.moai/memory/CLAUDE-RULES.md → .claude/skills/moai-alfred-rules/reference.md} +0 -0
  161. /moai_adk/templates/.claude/skills/{moai-spec-authoring → moai-alfred-spec-authoring}/README.md +0 -0
  162. /moai_adk/templates/.claude/skills/{moai-spec-authoring → moai-alfred-spec-authoring}/examples/validate-spec.sh +0 -0
  163. /moai_adk/templates/.claude/skills/{moai-spec-authoring → moai-alfred-spec-authoring}/examples.md +0 -0
  164. /moai_adk/templates/.claude/skills/{moai-spec-authoring → moai-alfred-spec-authoring}/reference.md +0 -0
  165. /moai_adk/templates/{.moai/memory/SKILLS-DESCRIPTION-POLICY.md → .claude/skills/moai-cc-skill-descriptions/reference.md} +0 -0
  166. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/CHECKLIST.md +0 -0
  167. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/EXAMPLES.md +0 -0
  168. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/INTERACTIVE-DISCOVERY.md +0 -0
  169. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/METADATA.md +0 -0
  170. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/PARALLEL-ANALYSIS-REPORT.md +0 -0
  171. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/PYTHON-VERSION-MATRIX.md +0 -0
  172. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/SKILL-FACTORY-WORKFLOW.md +0 -0
  173. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/SKILL-UPDATE-ADVISOR.md +0 -0
  174. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/STEP-BY-STEP-GUIDE.md +0 -0
  175. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/STRUCTURE.md +0 -0
  176. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/WEB-RESEARCH.md +0 -0
  177. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/reference.md +0 -0
  178. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/scripts/generate-structure.sh +0 -0
  179. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/scripts/validate-skill.sh +0 -0
  180. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/SKILL_TEMPLATE.md +0 -0
  181. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/examples-template.md +0 -0
  182. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/reference-template.md +0 -0
  183. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/scripts-template.sh +0 -0
  184. {moai_adk-0.9.0.dist-info → moai_adk-0.15.1.dist-info}/WHEEL +0 -0
  185. {moai_adk-0.9.0.dist-info → moai_adk-0.15.1.dist-info}/entry_points.txt +0 -0
  186. {moai_adk-0.9.0.dist-info → moai_adk-0.15.1.dist-info}/licenses/LICENSE +0 -0
@@ -1,474 +0,0 @@
1
- ---
2
- name: Study with Alfred
3
- description: "Learning mode to easily learn new skills with Alfred"
4
- # Translations:
5
- # - ko: "Alfred와 함께 새로운 기술을 쉽게 학습하는 학습 모드"
6
- # - ja: "Alfredと一緒に新しいスキルを簡単に学習する学習モード"
7
- # - zh: "与Alfred一起轻松学习新技能的学习模式"
8
- ---
9
-
10
- # Study with Alfred
11
- > Interactive prompts rely on `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
12
-
13
- **Audience**: Developers looking to learn new technologies/languages/frameworks
14
-
15
- This is a learning mode where Alfred easily explains new skills and helps you practice, like a friend learning together.
16
-
17
- ## How to Learn with Alfred
18
-
19
- **Alfred's role**:
20
- - Explain complex concepts in an easy-to-understand manner
21
- - Improve understanding with real-life analogies
22
- - Practice together step by step
23
- - Answer frequently asked questions
24
-
25
- **Learning Flow**:
26
- ```
27
- 1. What (What is this?) → Understanding the basic concept
28
- 2. Why (Why do you need it?) → Reasons for use and advantages
29
- 3. How (How to use it?) → Practice-based learning
30
- 4. Practice → Integration with MoAI-ADK
31
- ```
32
-
33
- ---
34
-
35
- ## 4 stages of learning
36
-
37
- ### Step 1: What (What is this?)
38
-
39
- **Alfred**: "I'll summarize the new technology in one sentence."
40
-
41
- **Explanation method**:
42
- - One line summary
43
- - Real life analogy
44
- - 3 key concepts
45
-
46
- **Example**: FastAPI (Python web framework)
47
- ```
48
- Alfred: "FastAPI is a tool to quickly create APIs with Python."
49
-
50
- Real life analogy:
51
- A tool that quickly assembles API pieces like Lego blocks
52
-
53
- One-line summary:
54
- Python + automatic verification + fast speed = FastAPI
55
-
56
- Key concepts:
57
- 1. Automatic documentation (Swagger UI)
58
- 2. Type verification (Pydantic)
59
- 3. Asynchronous processing (async/await)
60
- ```
61
-
62
- ### Step 2: Why (Why do you need it?)
63
-
64
- **Alfred**: “Let’s think together about the problems this technology solves.”
65
-
66
- **How ​​to explain**:
67
- - Problem situation
68
- - Solution
69
- - Actual use case
70
-
71
- **Example**: Why use FastAPI?
72
- ```
73
- Let's think about it with Alfred:
74
-
75
- Problem:
76
- "Flask is slow, and Django is too heavy. Type validation also has to be done manually."
77
-
78
- Solution:
79
- FastAPI is fast, lightweight, and automatically verifies types.
80
-
81
- Real world usage:
82
- - Uber: Real-time location API
83
- - Netflix: Recommendation system API
84
- - Microsoft: Azure services API
85
-
86
- Alfred: “Used in places where high speed and stability are required!”
87
- ```
88
-
89
- ### Step 3: How (How do I use it?)
90
-
91
- **Alfred**: "Let's start with the simplest example"
92
-
93
- **Learning order**:
94
- 1. Minimal example (Hello World)
95
- 2. Practical example (CRUD API)
96
- 3. Frequently Asked Questions
97
-
98
- **Example**: How to use FastAPI
99
- ```
100
- Alfred: “Let’s start with the simplest example”
101
-
102
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
103
- [Minimum example]
104
-
105
- from fastapi import FastAPI # ← Import FastAPI
106
-
107
- app = FastAPI() # ← Create app
108
-
109
- @app.get("/hello") # ← Create /hello address
110
- def hello():
111
- return {"message": "Hello!"} # ← Send response
112
-
113
- Alfred: “An API is complete in just 5 lines!”
114
-
115
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
116
- [Practical example: User inquiry API]
117
-
118
- from fastapi import FastAPI, HTTPException
119
- from pydantic import BaseModel
120
-
121
- app = FastAPI()
122
-
123
- class User(BaseModel):
124
- id: int
125
- name: str
126
- email: str
127
-
128
- @app.get("/users/{user_id}")
129
- async def get_user(user_id: int) -> User:
130
- user = await db.find_user(user_id)
131
- if not user:
132
- raise HTTPException(status_code=404, detail="User not found")
133
- return user
134
-
135
- Alfred: "Automatic verification with Pydantic, error handling with HTTPException!"
136
-
137
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
138
- [Frequently Asked Questions]
139
-
140
- Q: Compared to Flask?
141
- Alfred: “FastAPI is 3 times faster and has automatic verification.”
142
-
143
- Q: What is async/await?
144
- Alfred: "It's a way to handle multiple tasks simultaneously. While waiting for one request, you can process another request."
145
-
146
- Q: When is it best to use it?
147
- Alfred: “It’s best for fast API, real-time processing, and microservices.”
148
- ```
149
-
150
- ### Step 4: Practice
151
-
152
- **Alfred**: “Now shall we try using it with MoAI-ADK?”
153
-
154
- **Practice method**:
155
- - Practice with SPEC → TEST → CODE flow
156
- - Application of @TAG system
157
- - Compliance with TRUST 5 principles
158
-
159
- **Example**: Creating a user API with FastAPI
160
- ```
161
- Alfred: “Let’s create it together with the MoAI-ADK workflow!”
162
-
163
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
164
- [Step 1: Write SPEC]
165
-
166
- /alfred:1-plan "User Lookup API"
167
-
168
- SPEC created by Alfred:
169
- ---
170
- id: USER-001
171
- version: 0.0.1
172
- status: draft
173
- ---
174
-
175
- # @SPEC:USER-001: User Lookup API
176
-
177
- ## Ubiquitous Requirements
178
- - The system must provide an API to search user information by user ID.
179
-
180
- ## Event-driven Requirements
181
- - WHEN If a user ID that exists is requested, the system SHOULD return user information
182
- - WHEN If a user ID that does not exist is requested, the system SHOULD return a 404 error.
183
-
184
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
185
- [Step 2: TDD implementation]
186
-
187
- /alfred:2-run USER-001
188
-
189
- Alfred: “I’ll write a test first”
190
-
191
- # @TEST:USER-001 | SPEC: SPEC-USER-001.md
192
- def test_get_user_returns_user():
193
- response = client.get("/users/1")
194
- assert response.status_code == 200
195
- assert response.json()["id"] == 1
196
-
197
- def test_get_user_not_found():
198
- response = client.get("/users/999")
199
- assert response.status_code == 404
200
-
201
- Alfred: “Now let me write the code”
202
-
203
- # @CODE:USER-001 | SPEC: SPEC-USER-001.md | TEST: tests/test_user.py
204
- @app.get("/users/{user_id}")
205
- async def get_user(user_id: int) -> User:
206
- """@CODE:USER-001: User Lookup API"""
207
- user = await db.users.find_by_id(user_id)
208
- if not user:
209
- raise HTTPException(status_code=404, detail="User not found")
210
- return user
211
-
212
- Alfred: “SPEC → TEST → CODE are all connected!”
213
-
214
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
215
- [Step 3: Document Synchronization]
216
-
217
- /alfred:3-sync
218
-
219
- Alfred: “I will verify the TAG chain”
220
-
221
- ✓ @SPEC:USER-001 → .moai/specs/SPEC-USER-001.md
222
- ✓ @TEST:USER-001 → tests/test_user.py
223
- ✓ @CODE:USER-001 → src/api/user.py
224
- ✓ @DOC:USER-001 → docs/api/user.md (automatically generated)
225
-
226
- Alfred: "Complete! FastAPI + MoAI-ADK work together!"
227
- ```
228
-
229
- ---
230
-
231
- ## Framework-specific study guide
232
-
233
- ### TypeScript + Express
234
-
235
- **Alfred**: "It's the most popular web framework in Node.js"
236
-
237
- #### What (What is this?)
238
- ```
239
- Alfred: "Express is a tool to easily create a web server with Node.js."
240
-
241
- Real life analogy:
242
- The role is like a waiter in a restaurant, taking requests and delivering responses.
243
-
244
- One-line summary:
245
- Node.js + middleware + routing = Express
246
-
247
- Key concepts:
248
- 1. Middleware chain
249
- 2. Routing
250
- 3. Request-response processing
251
- ```
252
-
253
- #### Why (Why do you need it?)
254
- ```
255
- Alfred: “More than 95% of Node.js APIs use Express”
256
-
257
- Problem: Node.js default http module is too complicated
258
- Solution: Express can be easily created with a simple API
259
-
260
- Practical Use:
261
- - Uber, Netflix, PayPal, etc.
262
- ```
263
-
264
- #### How (How do you use it?)
265
- ```
266
- Alfred: “It’s the simplest example.”
267
-
268
- import express from 'express';
269
-
270
- const app = express();
271
-
272
- app.get('/users/:id', async (req, res) => {
273
- const user = await db.users.findById(req.params.id);
274
- res.json(user);
275
- });
276
-
277
- app.listen(3000);
278
-
279
- Alfred: “All you need is this to complete your API server!”
280
- ```
281
-
282
- #### Practice (with MoAI-ADK)
283
- ```
284
- Alfred: “Now let’s make it TDD”
285
-
286
- // @TEST:USER-001 | SPEC: SPEC-USER-001.md
287
- test('GET /users/:id returns user', async () => {
288
- const res = await request(app).get('/users/1');
289
- expect(res.status).toBe(200);
290
- expect(res.body.id).toBe('1');
291
- });
292
-
293
- // @CODE:USER-001 | SPEC: SPEC-USER-001.md | TEST: tests/user.test.ts
294
- app.get('/users/:id', async (req, res) => {
295
- const user = await db.users.findById(req.params.id);
296
- if (!user) {
297
- return res.status(404).json({ error: 'Not found' });
298
- }
299
- res.json(user);
300
- });
301
-
302
- Alfred: “SPEC → TEST → CODE completed!”
303
- ```
304
-
305
- #### Frequently Asked Questions
306
- ```
307
- Q: What is middleware?
308
- Alfred: "It is a step that goes through before processing a request. It is used for logging, authentication, etc."
309
-
310
- Q: How to handle async errors?
311
- Alfred: "If you use the express-async-errors package, it will be handled automatically."
312
-
313
- Q: FastAPI vs Express?
314
- Alfred: “Express is flexible and has a large ecosystem, and FastAPI is fast and has strong automatic verification.”
315
- ```
316
-
317
- ---
318
-
319
- ### Python + FastAPI
320
-
321
- **Alfred**: "It's the standard for modern Python web frameworks."
322
-
323
- #### What (What is this?)
324
- ```
325
- Alfred: "FastAPI is a tool to create fast APIs with Python."
326
-
327
- Real life analogy:
328
- Automatically verify and document like robots in a car factory
329
-
330
- One-line summary:
331
- Python + Pydantic + Async = FastAPI
332
-
333
- Key concepts:
334
- 1. Automatic Verification (Pydantic)
335
- 2. Automatic documentation (Swagger)
336
- 3. Asynchronous processing (async/await)
337
- ```
338
-
339
- #### Why (Why do you need it?)
340
- ```
341
- Alfred: “3x faster than Flask and more concise than Django”
342
-
343
- Problem: Flask is slow, Django is heavy
344
- Solution: FastAPI is fast, lightweight, yet powerful
345
-
346
- Actual use:
347
- - Uber, Microsoft, Netflix
348
- ```
349
-
350
- #### How (How do you use it?)
351
- ```
352
- Alfred: “It’s a basic example.”
353
-
354
- from fastapi import FastAPI
355
- from pydantic import BaseModel
356
-
357
- app = FastAPI()
358
-
359
- class User(BaseModel):
360
- id: int
361
- name: str
362
-
363
- @app.get("/users/{user_id}")
364
- async def get_user(user_id: int) -> User:
365
- return await db.find_user(user_id)
366
-
367
- Alfred: “Pydantic verifies it automatically!”
368
- ```
369
-
370
- #### Practice (with MoAI-ADK)
371
- ```
372
- Alfred: “Let’s build it together with TDD”
373
-
374
- # @TEST:USER-001 | SPEC: SPEC-USER-001.md
375
- def test_get_user():
376
- response = client.get("/users/1")
377
- assert response.status_code == 200
378
-
379
- # @CODE:USER-001 | SPEC: SPEC-USER-001.md | TEST: tests/test_user.py
380
- @app.get("/users/{user_id}")
381
- async def get_user(user_id: int) -> User:
382
- """@CODE:USER-001: User query"""
383
- user = await db.find_user(user_id)
384
- if not user:
385
- raise HTTPException(status_code=404)
386
- return user
387
-
388
- Alfred: “Complete!”
389
- ```
390
-
391
- #### Frequently Asked Questions
392
- ```
393
- Q: What is Pydantic?
394
- Alfred: “It is a library that automatically verifies data.”
395
-
396
- Q: Is async/await really necessary?
397
- Alfred: "If you need fast performance, it's essential, otherwise the sync function is fine."
398
-
399
- Q: Django vs FastAPI?
400
- Alfred: "Django is full-stack, FastAPI is API-only."
401
- ```
402
-
403
- ---
404
-
405
- ## Study Tips
406
-
407
- ### Alfred's Study Advice
408
-
409
- **1. Start small**
410
- ```
411
- Alfred: "Let's start with Hello World"
412
-
413
- Examples that are too complex can be confusing.
414
- Start with the simplest example and expand gradually.
415
- ```
416
-
417
- **2. Practice-oriented**
418
- ```
419
- Alfred: "Try the code yourself"
420
-
421
- Just read it and forget it right away.
422
- Try it yourself, run it, and correct the errors.
423
- ```
424
-
425
- **3. Integration with MoAI-ADK**
426
- ```
427
- Alfred: “I learn MoAI-ADK while learning new technologies.”
428
-
429
- If you practice with the SPEC → TEST → CODE flow,
430
- You can kill two birds with one stone!
431
- ```
432
-
433
- **4. Use frequently asked questions**
434
- ```
435
- Alfred: “If you have any questions, feel free to ask”
436
-
437
- “Why do I have to do this?”
438
- “Is there another way?”
439
- “How do I use it in practice?”
440
- ```
441
-
442
- ### Recommended learning sequence
443
-
444
- ```
445
- Step 1: Familiarize yourself with MoAI-ADK
446
- → /output-style moai-adk-learning
447
-
448
- Step 2: Learning a new framework (now)
449
- → /output-style study-with-alfred
450
-
451
- Step 3: Apply practical projects
452
- → /output-style agentic-coding
453
- ```
454
-
455
- ---
456
-
457
- ## Style conversion guide
458
-
459
- ### When this style suits you
460
- - ✅ When learning a new language/framework
461
- - ✅ When you want to easily understand complex concepts
462
- - ✅ When you want to learn practice-oriented
463
- - ✅ When you want to learn by talking with Alfred
464
-
465
- ### Switch to a different style
466
-
467
- | Situation | Recommended Style | Conversion command |
468
- | ----------------------------- | ----------------- | --------------------------------- |
469
- | First time using MoAI-ADK | moai-adk-learning | `/output-style moai-adk-learning` |
470
- | Practical project development | agentic-coding | `/output-style agentic-coding` |
471
-
472
- ---
473
-
474
- **Study with Alfred**: This is a learning mode that allows you to easily learn new skills as if talking with Alfred and apply them directly to practice by integrating with MoAI-ADK.
@@ -1,176 +0,0 @@
1
- name: 📋 SPEC Document
2
- description: Create a new SPEC document for feature planning
3
- title: "[SPEC-] "
4
- labels: ["spec", "planning"]
5
- assignees: []
6
-
7
- body:
8
- - type: markdown
9
- attributes:
10
- value: |
11
- ## 📋 SPEC Metadata
12
-
13
- Fill out the SPEC details below. This will be synchronized with the SPEC document and GitHub Issue.
14
-
15
- - type: input
16
- id: spec-id
17
- attributes:
18
- label: SPEC ID
19
- description: "Format: DOMAIN-###. Example: AUTH-001, API-DESIGN-001"
20
- placeholder: "AUTH-001"
21
- validations:
22
- required: true
23
-
24
- - type: input
25
- id: spec-title
26
- attributes:
27
- label: SPEC Title
28
- description: "Brief description of the specification"
29
- placeholder: "JWT-based authentication system"
30
- validations:
31
- required: true
32
-
33
- - type: dropdown
34
- id: priority
35
- attributes:
36
- label: Priority
37
- description: "Feature priority level"
38
- options:
39
- - "critical"
40
- - "high"
41
- - "medium"
42
- - "low"
43
- validations:
44
- required: true
45
-
46
- - type: dropdown
47
- id: category
48
- attributes:
49
- label: Category
50
- description: "SPEC category"
51
- options:
52
- - "API"
53
- - "Backend"
54
- - "Frontend"
55
- - "Infrastructure"
56
- - "Security"
57
- - "Testing"
58
- - "DevOps"
59
- - "Documentation"
60
- - "Performance"
61
- - "Other"
62
- validations:
63
- required: true
64
-
65
- - type: textarea
66
- id: ubiquitous-requirements
67
- attributes:
68
- label: "Ubiquitous Requirements"
69
- description: "Statements that apply universally to the system"
70
- placeholder: |
71
- - The system must provide JWT-based authentication
72
- - The system must support token expiration
73
- value: "### Ubiquitous\n"
74
- validations:
75
- required: true
76
-
77
- - type: textarea
78
- id: event-requirements
79
- attributes:
80
- label: "Event-driven Requirements (WHEN)"
81
- description: "Event-triggered requirements in EARS format"
82
- placeholder: |
83
- - WHEN the user submits login credentials, the system must validate them against the database
84
- - WHEN credentials are valid, the system must issue a JWT token with expiration
85
- value: "### Event-driven (WHEN)\n"
86
- validations:
87
- required: false
88
-
89
- - type: textarea
90
- id: state-requirements
91
- attributes:
92
- label: "State-driven Requirements (WHILE)"
93
- description: "State-based requirements in EARS format"
94
- placeholder: |
95
- - WHILE the token is unexpired, the system must allow access to protected resources
96
- - WHILE the user is logged in, the system must track the session
97
- value: "### State-driven (WHILE)\n"
98
- validations:
99
- required: false
100
-
101
- - type: textarea
102
- id: optional-requirements
103
- attributes:
104
- label: "Optional Requirements (WHERE)"
105
- description: "Optional features and capabilities"
106
- placeholder: |
107
- - WHERE the user requests token refresh, the system can issue a new token
108
- - WHERE OAuth2 is available, the system can support social login
109
- value: "### Optional (WHERE)\n"
110
- validations:
111
- required: false
112
-
113
- - type: textarea
114
- id: unwanted-behaviors
115
- attributes:
116
- label: "Unwanted Behaviors (IF-THEN)"
117
- description: "Error handling, quality gates, and business rule enforcement"
118
- placeholder: |
119
- - IF the token has expired, THEN the system must return 401 Unauthorized
120
- - IF the password is incorrect, THEN the system must reject the login attempt
121
- value: "### Unwanted Behaviors (IF-THEN)\n"
122
- validations:
123
- required: false
124
-
125
- - type: textarea
126
- id: acceptance-criteria
127
- attributes:
128
- label: "Acceptance Criteria (Given-When-Then)"
129
- description: "At least 2-3 test scenarios"
130
- placeholder: |
131
- **Scenario 1: Successful Login**
132
- - Given a user with valid credentials exists
133
- - When the user submits their credentials
134
- - Then the system returns a valid JWT token
135
-
136
- **Scenario 2: Token Expiration**
137
- - Given a user with an expired token
138
- - When the user tries to access a protected resource
139
- - Then the system returns a 401 Unauthorized response
140
- value: "## Acceptance Criteria\n\n"
141
- validations:
142
- required: true
143
-
144
- - type: textarea
145
- id: dependencies
146
- attributes:
147
- label: "Dependencies"
148
- description: "Related SPECs, tasks, or blockers"
149
- placeholder: |
150
- - Related: SPEC-SECURITY-001
151
- - Blocks: SPEC-API-DESIGN-001
152
- - Depends on: SPEC-DATABASE-001
153
- validations:
154
- required: false
155
-
156
- - type: textarea
157
- id: notes
158
- attributes:
159
- label: "Additional Notes"
160
- description: "Technical notes, assumptions, or context"
161
- placeholder: |
162
- - Consider token refresh token rotation
163
- - JWT payload should be minimal for performance
164
- - Consider rate limiting on login attempts
165
- validations:
166
- required: false
167
-
168
- - type: markdown
169
- attributes:
170
- value: |
171
- ## 📚 Reference
172
-
173
- - **SPEC Metadata Guide**: See `.moai/memory/spec-metadata.md`
174
- - **EARS Syntax Guide**: See `.moai/memory/development-guide.md`
175
- - **Acceptance Criteria**: Use Given-When-Then (Gherkin) format
176
- - **@TAG System**: @SPEC, @TEST, @CODE, @DOC traceability
@@ -1,69 +0,0 @@
1
- # MoAI-ADK GitFlow PR
2
-
3
- > 🗿 Full GitFlow Transparency — the agent auto-fills information
4
-
5
- ## 📝 SPEC Info
6
-
7
- - Related SPEC: `SPEC-AUTH-001` (e.g., JWT authentication system)
8
- - Directory: `.moai/specs/SPEC-AUTH-001/`
9
- - @TAG Links: @SPEC:AUTH-001 @CODE:AUTH-001 (auto-tagging)
10
-
11
- ## ✅ SPEC Quality Checks
12
-
13
- - [ ] YAML Front Matter: 7 required fields (id, version, status, created, updated, author, priority)
14
- - [ ] HISTORY Section: Record versioned change log (include v0.0.1 INITIAL)
15
- - [ ] EARS Requirements: Ubiquitous, Event-driven, State-driven, Optional, Unwanted Behaviors
16
- - [ ] @SPEC:ID TAG: Include TAG in doc and check duplicates (`rg "@SPEC:<ID>" -n`)
17
-
18
- ## 🤖 Automated Validation Status
19
-
20
- <!-- The checklist below is auto-updated by the agent -->
21
- <!-- /alfred:1-plan → create feature branch → Draft PR -->
22
- <!-- /alfred:2-run → implement via TDD → auto-check checkboxes -->
23
- <!-- /alfred:3-sync → synchronize documents → Ready for Review -->
24
-
25
- - [ ] spec-builder: Complete EARS spec and create feature branch
26
- - [ ] code-builder: Finish TDD RED-GREEN-REFACTOR
27
- - [ ] doc-syncer: Sync Living Documents and mark PR Ready
28
-
29
- ## 📊 Quality Metrics (auto-calculated)
30
-
31
- - TRUST 5 Principles: ✅ Compliant
32
- - Test Coverage: XX% (target ≥ 85%)
33
- - @TAG Traceability: 100%
34
-
35
- ## 🌍 Locale Settings
36
-
37
- - Project Language: <!-- ko/en/ja/zh -->
38
- - Commit Messages: <!-- generated automatically according to locale -->
39
-
40
- ## 🎯 Changes
41
-
42
- <!-- code-builder auto-fills TDD results -->
43
-
44
- ### 🔴 RED (Test Authoring)
45
- - Test File: `tests/auth/service.test.ts`
46
- - Test Description: [describe the failing test]
47
-
48
- ### 🟢 GREEN (Implementation)
49
- - Implementation File: `src/auth/service.ts`
50
- - Implementation Done: [describe functionality]
51
-
52
- ### ♻️ REFACTOR (Improvements)
53
- - Refactoring Details: [code quality improvements]
54
-
55
- ## 📚 Documentation Sync
56
-
57
- <!-- auto-filled by doc-syncer -->
58
-
59
- - [ ] Update README
60
- - [ ] Sync API docs
61
- - [ ] Update TAG index
62
- - [ ] Update HISTORY section (SPEC docs)
63
-
64
- ---
65
-
66
- 🚀 MoAI-ADK: Professional development without Git commands via a 3-stage pipeline!
67
-
68
- Reviewers: Check TRUST 5 compliance and SPEC metadata completeness only.
69
-