moai-adk 0.3.13__py3-none-any.whl → 0.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of moai-adk might be problematic. Click here for more details.

Files changed (91) hide show
  1. moai_adk/__init__.py +8 -1
  2. moai_adk/__main__.py +1 -1
  3. moai_adk/cli/commands/__init__.py +1 -1
  4. moai_adk/cli/commands/doctor.py +2 -2
  5. moai_adk/cli/commands/status.py +1 -1
  6. moai_adk/cli/commands/update.py +136 -90
  7. moai_adk/cli/prompts/init_prompts.py +1 -1
  8. moai_adk/core/__init__.py +1 -1
  9. moai_adk/core/git/branch.py +1 -1
  10. moai_adk/core/git/manager.py +1 -1
  11. moai_adk/core/quality/__init__.py +1 -1
  12. moai_adk/core/quality/trust_checker.py +1 -1
  13. moai_adk/core/quality/validators/__init__.py +1 -1
  14. moai_adk/core/quality/validators/base_validator.py +1 -1
  15. moai_adk/core/template/__init__.py +1 -1
  16. moai_adk/core/template/backup.py +2 -1
  17. moai_adk/core/template/config.py +24 -0
  18. moai_adk/core/template/languages.py +1 -1
  19. moai_adk/core/template/merger.py +58 -1
  20. moai_adk/core/template/processor.py +41 -12
  21. moai_adk/templates/.claude/agents/alfred/cc-manager.md +558 -3
  22. moai_adk/templates/.claude/commands/alfred/0-project.md +480 -12
  23. moai_adk/templates/.claude/commands/alfred/1-plan.md +563 -0
  24. moai_adk/templates/.claude/commands/alfred/1-spec.md +15 -516
  25. moai_adk/templates/.claude/commands/alfred/2-build.md +15 -417
  26. moai_adk/templates/.claude/commands/alfred/2-run.md +460 -0
  27. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +10 -31
  28. moai_adk/templates/.claude/skills/moai-claude-code/SKILL.md +67 -0
  29. moai_adk/templates/.claude/skills/moai-claude-code/examples.md +513 -0
  30. moai_adk/templates/.claude/skills/moai-claude-code/reference.md +419 -0
  31. moai_adk/templates/.claude/skills/moai-claude-code/templates/agent-full.md +332 -0
  32. moai_adk/templates/.claude/skills/moai-claude-code/templates/command-full.md +384 -0
  33. moai_adk/templates/.claude/skills/moai-claude-code/templates/plugin-full.json +349 -0
  34. moai_adk/templates/.claude/skills/moai-claude-code/templates/settings-full.json +552 -0
  35. moai_adk/templates/.claude/skills/moai-claude-code/templates/skill-full.md +499 -0
  36. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +68 -0
  37. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +64 -0
  38. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +67 -0
  39. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +69 -0
  40. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +69 -0
  41. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +68 -0
  42. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +67 -0
  43. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +62 -0
  44. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +74 -0
  45. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +66 -0
  46. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +66 -0
  47. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +68 -0
  48. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +59 -0
  49. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +76 -0
  50. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +61 -0
  51. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +63 -0
  52. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +64 -0
  53. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +61 -0
  54. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +54 -0
  55. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +46 -0
  56. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +68 -0
  57. moai_adk/templates/.claude/skills/moai-lang-clojure/SKILL.md +68 -0
  58. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +69 -0
  59. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +67 -0
  60. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +66 -0
  61. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +66 -0
  62. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +67 -0
  63. moai_adk/templates/.claude/skills/moai-lang-haskell/SKILL.md +67 -0
  64. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +66 -0
  65. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +64 -0
  66. moai_adk/templates/.claude/skills/moai-lang-julia/SKILL.md +66 -0
  67. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +67 -0
  68. moai_adk/templates/.claude/skills/moai-lang-lua/SKILL.md +65 -0
  69. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +65 -0
  70. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +64 -0
  71. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +66 -0
  72. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +66 -0
  73. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +68 -0
  74. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +68 -0
  75. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +67 -0
  76. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +68 -0
  77. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +67 -0
  78. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +64 -0
  79. moai_adk/templates/.claude/skills/scripts/standardize_skills.py +166 -0
  80. moai_adk/templates/.claude/skills/scripts/verify_standardization.sh +43 -0
  81. moai_adk/templates/CLAUDE.md +153 -0
  82. moai_adk/templates/__init__.py +1 -1
  83. moai_adk/utils/__init__.py +1 -1
  84. moai_adk/utils/banner.py +7 -7
  85. moai_adk/utils/logger.py +1 -1
  86. {moai_adk-0.3.13.dist-info → moai_adk-0.4.0.dist-info}/METADATA +231 -1
  87. moai_adk-0.4.0.dist-info/RECORD +145 -0
  88. moai_adk-0.3.13.dist-info/RECORD +0 -90
  89. {moai_adk-0.3.13.dist-info → moai_adk-0.4.0.dist-info}/WHEEL +0 -0
  90. {moai_adk-0.3.13.dist-info → moai_adk-0.4.0.dist-info}/entry_points.txt +0 -0
  91. {moai_adk-0.3.13.dist-info → moai_adk-0.4.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,166 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Skills 표준화 통합 스크립트
4
+ - YAML 필드 정리 (version, author, license, tags, model 제거)
5
+ - allowed-tools 추가 (누락된 스킬에만)
6
+ """
7
+
8
+ import sys
9
+ import re
10
+ from pathlib import Path
11
+
12
+ # Alfred 에이전트 도구
13
+ ALFRED_TOOLS = ["Read", "Write", "Edit", "Bash", "TodoWrite"]
14
+ # Lang 스킬 도구
15
+ LANG_TOOLS = ["Read", "Bash"]
16
+ # Domain 스킬 도구
17
+ DOMAIN_TOOLS = ["Read", "Bash"]
18
+
19
+ def parse_yaml_frontmatter(content):
20
+ """YAML frontmatter 파싱 (간단한 파서)"""
21
+ if not content.startswith('---'):
22
+ return None, content
23
+
24
+ parts = content.split('---', 2)
25
+ if len(parts) < 3:
26
+ return None, content
27
+
28
+ yaml_str = parts[1]
29
+ body = parts[2]
30
+
31
+ # YAML 파싱 (딕셔너리로)
32
+ data = {}
33
+ current_key = None
34
+ in_list = False
35
+
36
+ for line in yaml_str.strip().split('\n'):
37
+ if not line.strip():
38
+ continue
39
+
40
+ # 리스트 아이템
41
+ if line.strip().startswith('-'):
42
+ if in_list and current_key:
43
+ if isinstance(data[current_key], list):
44
+ data[current_key].append(line.strip()[1:].strip())
45
+ continue
46
+
47
+ # 키-값 쌍
48
+ if ':' in line:
49
+ key, value = line.split(':', 1)
50
+ key = key.strip()
51
+ value = value.strip()
52
+
53
+ if not value: # 리스트 시작
54
+ in_list = True
55
+ current_key = key
56
+ data[key] = []
57
+ else:
58
+ in_list = False
59
+ current_key = None
60
+ data[key] = value
61
+
62
+ return data, body
63
+
64
+ def build_yaml_frontmatter(data):
65
+ """딕셔너리를 YAML frontmatter로 변환"""
66
+ lines = []
67
+ for key, value in data.items():
68
+ if isinstance(value, list):
69
+ lines.append(f"{key}:")
70
+ for item in value:
71
+ lines.append(f" - {item}")
72
+ else:
73
+ lines.append(f"{key}: {value}")
74
+
75
+ return '\n'.join(lines)
76
+
77
+ def standardize_skill(skill_file):
78
+ """스킬 파일 표준화"""
79
+ content = skill_file.read_text()
80
+
81
+ data, body = parse_yaml_frontmatter(content)
82
+
83
+ if data is None:
84
+ print(f"⚠️ No YAML frontmatter: {skill_file}")
85
+ return False
86
+
87
+ # 보존할 필드만 추출
88
+ preserved = {}
89
+
90
+ if 'name' in data:
91
+ preserved['name'] = data['name']
92
+ if 'description' in data:
93
+ preserved['description'] = data['description']
94
+
95
+ # allowed-tools 처리
96
+ if 'allowed-tools' in data:
97
+ # 이미 있으면 유지
98
+ preserved['allowed-tools'] = data['allowed-tools']
99
+ else:
100
+ # 없으면 스킬 유형별로 추가
101
+ name = data.get('name', '')
102
+
103
+ if 'alfred' in name:
104
+ tools = ALFRED_TOOLS
105
+ elif 'lang' in name:
106
+ tools = LANG_TOOLS
107
+ elif 'domain' in name:
108
+ tools = DOMAIN_TOOLS
109
+ elif 'claude-code' in name:
110
+ # moai-claude-code는 이미 allowed-tools 있음 (건너뛰기)
111
+ tools = None
112
+ else:
113
+ # 기본값
114
+ tools = ["Read"]
115
+
116
+ if tools:
117
+ preserved['allowed-tools'] = tools
118
+
119
+ # 파일 재작성
120
+ new_yaml = build_yaml_frontmatter(preserved)
121
+ new_content = f"---\n{new_yaml}\n---{body}"
122
+
123
+ skill_file.write_text(new_content)
124
+ print(f"✅ Standardized: {skill_file.name}")
125
+ return True
126
+
127
+ def main():
128
+ """메인 함수"""
129
+ base_dir = Path("/Users/goos/MoAI/MoAI-ADK")
130
+
131
+ # .claude/skills/
132
+ skills_dir = base_dir / ".claude/skills"
133
+ success_count = 0
134
+ fail_count = 0
135
+
136
+ for skill_dir in sorted(skills_dir.glob("moai-*")):
137
+ skill_file = skill_dir / "SKILL.md"
138
+ if skill_file.exists():
139
+ try:
140
+ if standardize_skill(skill_file):
141
+ success_count += 1
142
+ else:
143
+ fail_count += 1
144
+ except Exception as e:
145
+ print(f"❌ Error: {skill_file.name} - {e}")
146
+ fail_count += 1
147
+
148
+ # src/moai_adk/templates/.claude/skills/
149
+ templates_dir = base_dir / "src/moai_adk/templates/.claude/skills"
150
+ for skill_dir in sorted(templates_dir.glob("moai-*")):
151
+ skill_file = skill_dir / "SKILL.md"
152
+ if skill_file.exists():
153
+ try:
154
+ if standardize_skill(skill_file):
155
+ success_count += 1
156
+ else:
157
+ fail_count += 1
158
+ except Exception as e:
159
+ print(f"❌ Error: {skill_file.name} - {e}")
160
+ fail_count += 1
161
+
162
+ print(f"\n📊 Summary: {success_count} succeeded, {fail_count} failed")
163
+ return 0 if fail_count == 0 else 1
164
+
165
+ if __name__ == "__main__":
166
+ sys.exit(main())
@@ -0,0 +1,43 @@
1
+ #!/bin/bash
2
+
3
+ echo "=== Skills 표준화 검증 ==="
4
+
5
+ # 1. 파일명 검증
6
+ skill_md_count=$(find .claude/skills/ -name "skill.md" 2>/dev/null | wc -l | tr -d ' ')
7
+ SKILL_md_count=$(find .claude/skills/ -name "SKILL.md" 2>/dev/null | wc -l | tr -d ' ')
8
+
9
+ echo "1. 파일명 표준화:"
10
+ echo " - skill.md (비표준): $skill_md_count (0이어야 함)"
11
+ echo " - SKILL.md (표준): $SKILL_md_count (46이어야 함)"
12
+
13
+ # 2. 중복 템플릿 검증
14
+ duplicate_count=$(ls .claude/skills/ 2>/dev/null | grep -c "moai-cc-.*-template" || echo 0)
15
+
16
+ echo "2. 중복 템플릿:"
17
+ echo " - moai-cc-*-template: $duplicate_count (0이어야 함)"
18
+
19
+ # 3. YAML 필드 검증
20
+ version_count=$(rg "^version:" .claude/skills/*/SKILL.md 2>/dev/null | wc -l | tr -d ' ')
21
+ model_count=$(rg "^model:" .claude/skills/*/SKILL.md 2>/dev/null | wc -l | tr -d ' ')
22
+ allowed_tools_count=$(rg "^allowed-tools:" .claude/skills/*/SKILL.md 2>/dev/null | wc -l | tr -d ' ')
23
+
24
+ echo "3. YAML 필드:"
25
+ echo " - version 필드: $version_count (0이어야 함)"
26
+ echo " - model 필드: $model_count (0이어야 함)"
27
+ echo " - allowed-tools 필드: $allowed_tools_count (46이어야 함)"
28
+
29
+ # 종합 판정
30
+ if [ "$skill_md_count" -eq 0 ] && \
31
+ [ "$SKILL_md_count" -eq 46 ] && \
32
+ [ "$duplicate_count" -eq 0 ] && \
33
+ [ "$version_count" -eq 0 ] && \
34
+ [ "$model_count" -eq 0 ] && \
35
+ [ "$allowed_tools_count" -eq 46 ]; then
36
+ echo ""
37
+ echo "✅ 모든 검증 통과!"
38
+ exit 0
39
+ else
40
+ echo ""
41
+ echo "❌ 검증 실패. 위 항목을 확인하세요."
42
+ exit 1
43
+ fi
@@ -176,6 +176,159 @@ Task(
176
176
  - `/alfred:2-build`: Phase 1에서 SPEC 분석 및 TDD 계획 수립 → Phase 2에서 RED-GREEN-REFACTOR 구현
177
177
  - `/alfred:3-sync`: Phase 1에서 동기화 범위 분석 → Phase 2에서 Living Document 동기화 및 TAG 업데이트
178
178
 
179
+ ---
180
+
181
+ ### Alfred 다음 단계 제안 원칙
182
+
183
+ **CRITICAL**: Alfred는 작업 완료 후 다음 단계를 제안할 때 **반드시 현재 상태를 확인**해야 합니다.
184
+
185
+ #### 제안 전 필수 체크리스트
186
+
187
+ ```python
188
+ # 다음 단계 제안 전 체크 (의사코드)
189
+ def suggest_next_step():
190
+ # 1. SPEC 상태 확인
191
+ spec_exists = check_spec_file_exists() # .moai/specs/SPEC-{ID}/spec.md
192
+ spec_version = get_spec_version() # YAML Front Matter의 version
193
+ spec_status = get_spec_status() # draft|active|completed|deprecated
194
+
195
+ # 2. 구현 상태 확인
196
+ tests_exist = check_test_files() # tests/**/*test*.py|ts|...
197
+ code_exists = check_code_files() # src/**/*.py|ts|...
198
+ tests_passing = check_test_results() # pytest, vitest 등 실행 결과
199
+
200
+ # 3. 문서 상태 확인
201
+ docs_synced = check_sync_status() # @TAG 체인 완전성
202
+
203
+ # 4. Git 상태 확인
204
+ branch_name = get_current_branch()
205
+ pr_status = get_pr_status() # draft|ready|merged
206
+
207
+ # 5. 현재 상태 기반 다음 단계 결정
208
+ if not spec_exists:
209
+ return "SPEC 작성: /alfred:1-spec"
210
+ elif spec_status == "draft" and not code_exists:
211
+ return "TDD 구현: /alfred:2-build SPEC-{ID}"
212
+ elif code_exists and not tests_passing:
213
+ return "테스트 수정: 실패한 테스트 확인"
214
+ elif tests_passing and not docs_synced:
215
+ return "문서 동기화: /alfred:3-sync"
216
+ elif pr_status == "ready":
217
+ return "PR 머지 대기 또는 다음 SPEC 작성"
218
+ else:
219
+ return "Git 커밋 또는 다음 작업"
220
+ ```
221
+
222
+ #### 잘못된 제안 예시 (❌)
223
+
224
+ ```markdown
225
+ # 시나리오: Alfred가 SPEC을 작성하고, 구현하고, 테스트까지 완료한 상태
226
+
227
+ ❌ 잘못된 제안:
228
+ "다음 단계:
229
+ 1. SPEC 검토 # ← SPEC은 이미 Alfred가 작성했음
230
+ 2. 테스트 실행 # ← 테스트는 이미 실행되었음
231
+ 3. Git 커밋"
232
+
233
+ ✅ 올바른 제안:
234
+ "다음 단계:
235
+ 1. Git 커밋 (변경 사항 커밋) # ← 실제 필요한 작업
236
+ 2. 통합 테스트 (수동) # ← 실제 동작 확인 필요"
237
+ ```
238
+
239
+ #### 올바른 제안 예시 (✅)
240
+
241
+ **시나리오 1: SPEC만 작성 완료**
242
+ ```markdown
243
+ ✅ 다음 단계:
244
+ - /alfred:2-build SPEC-{ID} 실행하여 TDD 구현 시작
245
+ ```
246
+
247
+ **시나리오 2: SPEC + 구현 완료, 테스트 통과**
248
+ ```markdown
249
+ ✅ 다음 단계:
250
+ 1. Git 커밋 (RED → GREEN → REFACTOR 커밋)
251
+ 2. /alfred:3-sync 실행하여 문서 동기화
252
+ ```
253
+
254
+ **시나리오 3: SPEC + 구현 + 동기화 완료**
255
+ ```markdown
256
+ ✅ 다음 단계:
257
+ 1. Git 커밋 (문서 동기화 커밋)
258
+ 2. PR 상태 확인 (Draft → Ready 전환)
259
+ 3. 다음 SPEC 작성 (/alfred:1-spec)
260
+ ```
261
+
262
+ **시나리오 4: 모든 작업 완료 (Git 커밋만 남음)**
263
+ ```markdown
264
+ ✅ 다음 단계:
265
+ - Git 커밋 (변경 사항 커밋)
266
+
267
+ Note: SPEC, 구현, 테스트, 문서는 모두 완료되었으므로 별도 검토 불필요
268
+ ```
269
+
270
+ #### 제안 금지 사항
271
+
272
+ Alfred는 다음과 같은 **불필요한 제안을 하지 않아야** 합니다:
273
+
274
+ 1. ❌ **자신이 작성한 문서 검토**: "SPEC-{ID}/spec.md 검토"
275
+ - Alfred가 SPEC을 작성했다면 이미 완료된 작업
276
+ - 사용자가 명시적으로 검토 요청하지 않는 한 불필요
277
+
278
+ 2. ❌ **이미 실행한 테스트 재실행**: "테스트 실행"
279
+ - Alfred가 이미 pytest/vitest를 실행하고 결과를 확인했다면 완료
280
+ - 실패한 테스트가 있을 때만 재실행 제안
281
+
282
+ 3. ❌ **이미 확인한 상태 재확인**: "Git 상태 확인"
283
+ - Alfred가 이미 git status를 실행했다면 불필요
284
+ - 새로운 변경사항이 있을 때만 재확인 제안
285
+
286
+ 4. ❌ **완료된 작업 반복**: "코드 품질 확인"
287
+ - mypy, ruff 검사를 이미 통과했다면 완료
288
+ - 새로운 코드 추가 시에만 재검사 제안
289
+
290
+ #### 제안 우선순위
291
+
292
+ Alfred는 다음 순서로 다음 단계를 제안합니다:
293
+
294
+ 1. **필수 작업** (반드시 수행해야 함)
295
+ - SPEC 없음 → SPEC 작성
296
+ - 테스트 실패 → 테스트 수정
297
+ - Git 커밋 필요 → Git 커밋
298
+
299
+ 2. **권장 작업** (수행하면 좋음)
300
+ - 문서 동기화 필요 → /alfred:3-sync
301
+ - PR 상태 변경 필요 → Draft → Ready 전환
302
+ - 다음 기능 개발 → 다음 SPEC 작성
303
+
304
+ 3. **선택 작업** (사용자 요청 시에만)
305
+ - 수동 통합 테스트
306
+ - 성능 테스트
307
+ - 보안 검사
308
+
309
+ #### 상태 확인 명령어
310
+
311
+ Alfred는 다음 명령어로 현재 상태를 확인합니다:
312
+
313
+ ```bash
314
+ # SPEC 존재 확인
315
+ ls .moai/specs/SPEC-*/spec.md
316
+
317
+ # SPEC 버전 및 상태 확인
318
+ grep "^version:" .moai/specs/SPEC-*/spec.md
319
+ grep "^status:" .moai/specs/SPEC-*/spec.md
320
+
321
+ # 테스트 파일 확인
322
+ find tests/ -name "*test*.py" -o -name "*test*.ts"
323
+
324
+ # Git 상태 확인
325
+ git status --short
326
+ git branch --show-current
327
+
328
+ # PR 상태 확인 (GitHub CLI)
329
+ gh pr list --head $(git branch --show-current)
330
+ ```
331
+
179
332
  ### 에러 메시지 표준 (공통)
180
333
 
181
334
  모든 Alfred 커맨드와 에이전트는 일관된 심각도 표시를 사용합니다:
@@ -1,2 +1,2 @@
1
- # @CODE:TEST-INTEGRATION-001 | SPEC: SPEC-TEST-INTEGRATION-001.md
1
+ # @CODE:TEST-INTEGRATION-001 | SPEC: SPEC-TEST-INTEGRATION-001/spec.md
2
2
  """MoAI-ADK Templates Package"""
@@ -1,4 +1,4 @@
1
- # @CODE:LOGGING-001 | SPEC: SPEC-LOGGING-001.md | TEST: tests/unit/test_logger.py
1
+ # @CODE:LOGGING-001 | SPEC: SPEC-LOGGING-001/spec.md | TEST: tests/unit/test_logger.py
2
2
  """
3
3
  MoAI-ADK utility module
4
4
  """
moai_adk/utils/banner.py CHANGED
@@ -1,4 +1,4 @@
1
- # @CODE:UTILS-001 | SPEC: SPEC-CLI-001.md
1
+ # @CODE:UTILS-001 | SPEC: SPEC-CLI-001/spec.md
2
2
  """ASCII banner module
3
3
 
4
4
  Render the MoAI-ADK ASCII art banner
@@ -9,12 +9,12 @@ from rich.console import Console
9
9
  console = Console()
10
10
 
11
11
  MOAI_BANNER = """
12
- ███╗ ███╗ █████╗ ██╗ █████╗ ██████╗ ██╗ ██╗
13
- ████╗ ████║ █████╗ ██╔══██╗██║ ██╔══██╗██╔══██╗██║ ██╔╝
14
- ██╔████╔██║ ██╔══██╗███████║██║█████╗███████║██║ ██║█████╔╝
15
- ██║╚██╔╝██║ ██║ ██║██╔══██║██║╚════╝██╔══██║██║ ██║██╔═██╗
16
- ██║ ╚═╝ ██║ ╚█████╔╝██║ ██║██║ ██║ ██║██████╔╝██║ ██╗
17
- ╚═╝ ╚═╝ ╚════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝
12
+ ███╗ ███╗ ██████╗ █████╗ ██╗ █████╗ ██████╗ ██╗ ██╗
13
+ ████╗ ████║██╔═══██╗██╔══██╗██║ ██╔══██╗██╔══██╗██║ ██╔╝
14
+ ██╔████╔██║██║ ██║███████║██║█████╗███████║██║ ██║█████╔╝
15
+ ██║╚██╔╝██║██║ ██║██╔══██║██║╚════╝██╔══██║██║ ██║██╔═██╗
16
+ ██║ ╚═╝ ██║╚██████╔╝██║ ██║██║ ██║ ██║██████╔╝██║ ██╗
17
+ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝
18
18
  """
19
19
 
20
20
 
moai_adk/utils/logger.py CHANGED
@@ -1,4 +1,4 @@
1
- # @CODE:LOGGING-001 | SPEC: SPEC-LOGGING-001.md | TEST: tests/unit/test_logger.py
1
+ # @CODE:LOGGING-001 | SPEC: SPEC-LOGGING-001/spec.md | TEST: tests/unit/test_logger.py
2
2
  """
3
3
  Logging system built on Python's logging module
4
4
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: moai-adk
3
- Version: 0.3.13
3
+ Version: 0.4.0
4
4
  Summary: MoAI Agentic Development Kit - SPEC-First TDD with Alfred SuperAgent
5
5
  Project-URL: Homepage, https://github.com/modu-ai/moai-adk
6
6
  Project-URL: Repository, https://github.com/modu-ai/moai-adk
@@ -23,6 +23,7 @@ Requires-Dist: click>=8.1.0
23
23
  Requires-Dist: gitpython>=3.1.45
24
24
  Requires-Dist: packaging>=21.0
25
25
  Requires-Dist: pyfiglet>=1.0.2
26
+ Requires-Dist: pyyaml>=6.0.0
26
27
  Requires-Dist: questionary>=2.0.0
27
28
  Requires-Dist: rich>=13.0.0
28
29
  Provides-Extra: dev
@@ -63,6 +64,7 @@ Description-Content-Type: text/markdown
63
64
  - [Quick Start](#quick-start-3분-실전)
64
65
  - [첫 번째 프로젝트: Todo API](#첫-번째-프로젝트-todo-api-만들기)
65
66
  - [3단계 워크플로우](#3단계-워크플로우)
67
+ - [v0.4.0: Skills Revolution (계획 중)](#v040-skills-revolution-계획-중)
66
68
  - [실전 시나리오](#실전-시나리오)
67
69
  - [AI 모델 선택 가이드](#ai-모델-선택-가이드)
68
70
  - [CLI Reference](#cli-reference)
@@ -708,6 +710,234 @@ graph TD
708
710
 
709
711
  ---
710
712
 
713
+ ## ■ v0.4.0: Skills Revolution (진행 중)
714
+
715
+ > **📍 현재 진행 상태**: v0.4.0 Skills 표준화 Phase 1 완료, SPEC-SKILLS-REDESIGN-001 v0.1.0 완료
716
+ >
717
+ > 모든 44개 Skills 재구성 완료, 4-Tier 아키텍처 구현 완료, Progressive Disclosure 메커니즘 활성화
718
+ >
719
+ > 상세 진행도는 [UPDATE-PLAN-0.4.0.md](UPDATE-PLAN-0.4.0.md) 및 [SPEC-SKILLS-REDESIGN-001](.moai/specs/SPEC-SKILLS-REDESIGN-001/spec.md)를 참고하세요.
720
+
721
+ MoAI-ADK v0.4.0은 **Claude Code Skills** 시스템을 도입하여 개발자 경험을 혁신합니다.
722
+
723
+ ### 🎯 핵심 비전
724
+
725
+ > **"Commands는 진입점, Skills는 능력, Sub-agents는 두뇌"**
726
+
727
+ v0.4.0은 Claude Code의 **Agent Skills 기능**을 핵심 실행 계층으로 도입하여 **4-Layer 아키텍처**로 전환합니다. Progressive Disclosure 메커니즘으로 **Effectively Unbounded Context**를 실현하며, 개발자는 명령어를 암기하지 않고 **자연어 대화**만으로 **레고 블록처럼 조립 가능한 개발 워크플로우**를 경험합니다.
728
+
729
+ ### 🔑 핵심 변경사항
730
+
731
+ | 변경 사항 | Before (v0.3.x) | After (v0.4.0) |
732
+ |-----------|-----------------|----------------|
733
+ | **아키텍처** | 3-Layer (Commands/Agents/Hooks) | **4-Layer (Commands/Sub-agents/Skills/Hooks)** |
734
+ | **용어** | "Agents" (혼동) | **"Sub-agents" (Claude Code 표준)** |
735
+ | **컨텍스트 전략** | Always Loaded | **Progressive Disclosure (Effectively Unbounded)** |
736
+ | **재사용성** | 프로젝트 전용 | **전역 (모든 프로젝트 공유)** |
737
+ | **Hooks 성능** | SessionStart 220ms | **<100ms (50% 단축)** |
738
+ | **조합 가능성** | 없음 (단독 실행) | **Composable (Skills 자동 조합)** |
739
+
740
+ ### 🏗️ 4-Layer 아키텍처
741
+
742
+ ```mermaid
743
+ %%{init: {'theme':'neutral'}}%%
744
+ graph TD
745
+ User([사용자]) --> L1[Layer 1: Commands<br/>워크플로우 진입점]
746
+ L1 --> L2[Layer 2: Sub-agents<br/>복잡한 추론 & 판단]
747
+ L2 --> L3[Layer 3: Skills ⭐<br/>재사용 가능한 지식]
748
+ L3 --> L4[Layer 4: Hooks<br/>가드레일 & JIT Context]
749
+
750
+ L1 -.직접 참조.-> L3
751
+
752
+ style L3 fill:#e1f5ff,stroke:#0066cc,stroke-width:3px
753
+ style L1 fill:#fff4e1,stroke:#cc6600
754
+ style L2 fill:#f0e1ff,stroke:#6600cc
755
+ style L4 fill:#e1ffe1,stroke:#00cc66
756
+ ```
757
+
758
+ **4-Layer 상세**:
759
+
760
+ | Layer | 역할 | 예시 | 특징 |
761
+ |-------|------|------|------|
762
+ | **Layer 1: Commands** | 워크플로우 진입점 | `/alfred:1-plan`, `/alfred:2-run` | 사용자 요청 해석, Skills/Sub-agents 조율 |
763
+ | **Layer 2: Sub-agents** | 복잡한 추론 & 판단 | spec-builder, tdd-implementer | Task tool 호출, 독립 컨텍스트 |
764
+ | **Layer 3: Skills ⭐** | 재사용 가능한 지식 | moai-spec-writer, python-expert | Progressive Disclosure, 전역 재사용 |
765
+ | **Layer 4: Hooks** | 가드레일 & JIT Context | SessionStart, PreToolUse | 위험 작업 차단, 빠른 실행 (<100ms) |
766
+
767
+ ### ▶ Progressive Disclosure - 게임 체인저
768
+
769
+ **3-Layer 로딩 메커니즘**:
770
+
771
+ ```text
772
+ ┌──────────────────────────────────────────────┐
773
+ │ Layer 1: Metadata (Startup) │
774
+ │ - name + description만 사전 로드 │
775
+ │ - 각 Skill당 ≈50 토큰만 소비 │
776
+ │ - 다수의 Skills 설치 시에도 부담 적음 │
777
+ └──────────────────────────────────────────────┘
778
+ ↓ Claude가 관련성 판단
779
+ ┌──────────────────────────────────────────────┐
780
+ │ Layer 2: SKILL.md (On-Demand) │
781
+ │ - 관련 있는 Skill만 전체 내용 로드 │
782
+ │ - 필요 시에만 로드 (≈500 토큰) │
783
+ │ - 여러 Skills 동시 로드 가능 │
784
+ └──────────────────────────────────────────────┘
785
+ ↓ 추가 정보 필요 시
786
+ ┌──────────────────────────────────────────────┐
787
+ │ Layer 3: Additional Files (Lazy Loading) │
788
+ │ - templates/, scripts/, resources/ │
789
+ │ - 필요한 파일만 선택적 로드 │
790
+ │ - 대용량 참고 자료를 효율적으로 관리 │
791
+ └──────────────────────────────────────────────┘
792
+ ```
793
+
794
+ **효과**:
795
+ - ✅ **Effectively Unbounded Context** (Anthropic 공식 표현)
796
+ - ✅ **컨텍스트 사용량 30% 절감** (Skills 재사용)
797
+ - ✅ **응답 속도 50% 단축** (Hooks 경량화: 220ms→100ms)
798
+
799
+ ### ▶ Composability - 레고 블록처럼 조립
800
+
801
+ Claude가 자동으로 필요한 Skills를 식별하고 조합합니다.
802
+
803
+ **예시: 모바일 앱 개발**
804
+
805
+ ```text
806
+ 사용자: "Flutter로 Todo 앱 만들어줘"
807
+
808
+ Alfred가 자동 조합:
809
+ ✅ moai-spec-writer (SPEC 작성)
810
+ ✅ dart-expert (Dart 베스트 프랙티스)
811
+ ✅ mobile-app-expert (iOS/Android 설계)
812
+ ✅ moai-tdd-orchestrator (TDD 구현)
813
+
814
+ 사용자: "Firebase 인증도 추가해줘"
815
+
816
+ Alfred가 자동 조합:
817
+ ✅ firebase-expert (새로 추가)
818
+ ✅ dart-expert (이미 로드됨, 재사용)
819
+ ✅ security-expert (자동 추가)
820
+ ```
821
+
822
+ **조합 원리**:
823
+ - **Automatic Coordination**: Claude가 자동으로 필요한 Skills 식별
824
+ - **No Explicit Reference**: Skills는 서로를 명시적으로 참조하지 않아도 됨
825
+ - **Multiple Skills Together**: 동시에 여러 Skills 활성화 가능
826
+
827
+ ### ▶ Commands 명칭 변경 철학
828
+
829
+ #### `/alfred:1-spec` → `/alfred:1-plan` ⭐ 핵심 변경
830
+
831
+ **철학적 배경**:
832
+ - **"항상 계획을 먼저 세우고 진행한다"** - 계획 우선 원칙 강조
833
+ - SPEC 문서 생성뿐만 아니라 **브레인스토밍 모드**로 확장
834
+ - 아이디어 구상, 요구사항 정리, 설계 논의 등 **계획 수립 전반** 지원
835
+
836
+ **사용 시나리오**:
837
+
838
+ ```bash
839
+ # 시나리오 1: SPEC 문서 생성 (기존 방식)
840
+ /alfred:1-plan "JWT 인증 시스템"
841
+ → SPEC-AUTH-001 생성, EARS 구문, 브랜치/PR
842
+
843
+ # 시나리오 2: 브레인스토밍 모드 (신규)
844
+ /alfred:1-plan "프로젝트 아키텍처 설계 논의"
845
+ → Alfred와 대화형 브레인스토밍
846
+ → 아이디어 정리 → SPEC 후보 도출
847
+
848
+ # 시나리오 3: 기술 선택 논의 (신규)
849
+ /alfred:1-plan "인증 방식 비교 (JWT vs Session)"
850
+ → 장단점 분석 → 의사결정 지원 → SPEC 문서화
851
+ ```
852
+
853
+ **핵심 가치**:
854
+ - ✅ **Think First, Code Later** (생각 먼저, 코딩 나중)
855
+ - ✅ **Collaborative Planning** (Alfred와 함께 계획 수립)
856
+ - ✅ **SPEC-First 유지** (최종적으로 SPEC 문서 생성)
857
+
858
+ #### `/alfred:2-build` → `/alfred:2-run` ⭐ 핵심 변경
859
+
860
+ **철학적 배경**:
861
+ - **"계획(Plan) → 실행(Run) → 동기화(Sync)"** - 명확한 워크플로우
862
+ - "build"는 코드 빌드만을 의미하지만, 실제로는 **계획 수행 전반** 지원
863
+ - TDD 구현, 테스트 실행, 리팩토링, 문서 초안 등 **다양한 실행 작업**
864
+
865
+ **사용 시나리오**:
866
+
867
+ ```bash
868
+ # 시나리오 1: TDD 구현 (주 사용 방식)
869
+ /alfred:2-run SPEC-AUTH-001
870
+ → RED → GREEN → REFACTOR
871
+
872
+ # 시나리오 2: 프로토타입 제작
873
+ /alfred:2-run SPEC-PROTO-001
874
+ → 빠른 검증을 위한 프로토타입 구현
875
+
876
+ # 시나리오 3: 문서화 작업
877
+ /alfred:2-run SPEC-DOCS-001
878
+ → 문서 작성 및 샘플 코드 생성
879
+ ```
880
+
881
+ **핵심 가치**:
882
+ - ✅ **Plan First, Run Next** (계획 먼저, 실행 나중)
883
+ - ✅ **Flexible Execution** (TDD뿐 아니라 다양한 실행 작업)
884
+ - ✅ **SPEC-Driven** (SPEC 기반 실행)
885
+
886
+ #### `/alfred:3-sync` - 유지
887
+
888
+ - **이유**: "sync(동기화)"가 문서-코드-TAG 동기화 의미를 정확히 전달
889
+ - **기능**: Living Document 갱신, TAG 체인 검증, PR Ready 전환
890
+
891
+ ### ▶ 10개 Foundation Skills
892
+
893
+ v0.4.0 Phase 1에서 도입되는 핵심 Skills:
894
+
895
+ | Skill | 역할 | 기존 대응 | 특징 |
896
+ |-------|------|----------|------|
897
+ | `moai-spec-writer` | EARS 명세 작성 | spec-builder 일부 | SPEC 문서 생성, EARS 구문 |
898
+ | `moai-tdd-orchestrator` | TDD 오케스트레이션 | tdd-implementer 일부 | RED-GREEN-REFACTOR 사이클 |
899
+ | `moai-tag-validator` | TAG 무결성 검증 | tag-agent 일부 | TAG 체인 검증, 고아 TAG 탐지 |
900
+ | `moai-doc-syncer` | Living Document 동기 | doc-syncer 일부 | 문서 자동 업데이트 |
901
+ | `moai-git-flow` | GitFlow 자동화 | git-manager 일부 | 브랜치/PR 생성, 커밋 자동화 |
902
+ | `moai-quality-gate` | TRUST 5원칙 검증 | trust-checker 일부 | 품질 게이트, 자동 검증 |
903
+ | `python-expert` | Python 전문가 | (신규) | pytest, mypy, ruff |
904
+ | `typescript-expert` | TypeScript 전문가 | (신규) | Vitest, Biome |
905
+ | `web-api-expert` | REST/GraphQL 전문가 | (신규) | API 설계, 보안 |
906
+ | `mobile-app-expert` | 모바일 전문가 | (신규) | iOS, Android, Flutter |
907
+
908
+ **Phase 2 이후**: 추가 35개 Skills (Language 18개 + Domain 8개 + Advanced 9개)
909
+
910
+ ### ▶ Before/After 개발 시간 비교
911
+
912
+ | 작업 | 기존 (Commands + Agents) | Skills 기반 (v0.4.0) | 개선율 |
913
+ | ------------------- | ------------------------ | -------------------- | ------ |
914
+ | **SPEC 작성** | 2~3분 | 1~2분 | 40%↓ |
915
+ | **TDD 구현** | 5~7분 | 3~4분 | 43%↓ |
916
+ | **문서 동기화** | 1~2분 | 30초~1분 | 50%↓ |
917
+ | **전체 사이클** | 8~12분 | 4.5~7분 | **44%↓** |
918
+ | **학습 곡선** | 3개 커맨드 + 12개 에이전트 | 자연어만 | **90%↓** |
919
+
920
+ **실제 개발자 경험**:
921
+
922
+ ```text
923
+ # 기존: 커맨드 이름 외우기
924
+ 개발자: "/alfred:1-spec 뭐였더라... /alfred:0-project? 아니면 /alfred:1-spec?"
925
+ → 커맨드 참조 → 실행 (학습 부담)
926
+
927
+ # Skills: 그냥 말하기
928
+ 개발자: "사용자 인증 SPEC 작성해줘"
929
+ → Alfred: "moai-spec-writer + web-api-expert 조합하겠습니다"
930
+ → 즉시 실행 (학습 불필요)
931
+ ```
932
+
933
+ ### ▶ 자세한 정보
934
+
935
+ v0.4.0 전체 계획, 아키텍처 설계, 마이그레이션 전략은 다음 문서를 참고하세요:
936
+
937
+ 📖 **[UPDATE-PLAN-0.4.0.md](UPDATE-PLAN-0.4.0.md)** - 전체 상세 분석 문서
938
+
939
+ ---
940
+
711
941
  ## ■ 실전 시나리오
712
942
 
713
943
  ### 시나리오 1: 긴급 버그 수정 (Hotfix)