clouvel 0.3.1__py3-none-any.whl → 0.6.3__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.
@@ -0,0 +1,212 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Verify tools (v0.5): verify, gate, handoff"""
3
+
4
+ from pathlib import Path
5
+ from datetime import datetime
6
+ from mcp.types import TextContent
7
+
8
+
9
+ async def verify(path: str, scope: str, checklist: list) -> list[TextContent]:
10
+ """Context Bias 제거 검증"""
11
+ # 기본 체크리스트
12
+ default_checklist = {
13
+ "file": [
14
+ "함수가 단일 책임을 가지는가?",
15
+ "에러 처리가 되어 있는가?",
16
+ "타입이 명시되어 있는가?",
17
+ ],
18
+ "feature": [
19
+ "PRD에 명시된 기능인가?",
20
+ "엣지 케이스가 처리되어 있는가?",
21
+ "테스트가 작성되어 있는가?",
22
+ ],
23
+ "full": [
24
+ "모든 필수 문서가 업데이트되었는가?",
25
+ "보안 취약점이 없는가?",
26
+ "성능 이슈가 없는가?",
27
+ "접근성이 고려되었는가?",
28
+ ],
29
+ }
30
+
31
+ active_checklist = checklist if checklist else default_checklist.get(scope, default_checklist["file"])
32
+ checklist_md = "\n".join(f"- [ ] {item}" for item in active_checklist)
33
+
34
+ return [TextContent(type="text", text=f"""# Context Bias 제거 검증
35
+
36
+ ## 검증 대상
37
+ `{path}`
38
+
39
+ ## 검증 범위
40
+ **{scope}**
41
+
42
+ ---
43
+
44
+ ## ⚠️ 중요
45
+
46
+ **같은 세션에서 작성한 코드를 검증하면 문제를 못 봅니다.**
47
+
48
+ ### 권장 절차
49
+ 1. `/clear` 실행 (컨텍스트 초기화)
50
+ 2. 아래 체크리스트로 검증
51
+ 3. 문제 발견 시 수정
52
+
53
+ ---
54
+
55
+ ## 체크리스트
56
+
57
+ {checklist_md}
58
+
59
+ ---
60
+
61
+ ## 검증 후
62
+
63
+ - 모든 항목 통과 → `gate` 도구로 자동 검증
64
+ - 실패 항목 있음 → 수정 후 재검증
65
+
66
+ **"/clear 후 다시 보면 다르게 보인다"**
67
+ """)]
68
+
69
+
70
+ async def gate(path: str, steps: list, fix: bool) -> list[TextContent]:
71
+ """Gate 검증 자동화"""
72
+ project_path = Path(path)
73
+
74
+ if not project_path.exists():
75
+ return [TextContent(type="text", text=f"❌ 경로가 존재하지 않습니다: {path}")]
76
+
77
+ # 기본 단계
78
+ default_steps = ["lint", "test", "build"]
79
+ active_steps = steps if steps else default_steps
80
+
81
+ # 단계별 명령어 (예시)
82
+ step_commands = {
83
+ "lint": "npm run lint || pylint . || ruff check .",
84
+ "test": "npm test || pytest || go test ./...",
85
+ "build": "npm run build || python -m build || go build",
86
+ }
87
+
88
+ steps_md = ""
89
+ for i, step in enumerate(active_steps, 1):
90
+ cmd = step_commands.get(step, step)
91
+ steps_md += f"{i}. **{step}**\n ```\n {cmd}\n ```\n\n"
92
+
93
+ # EVIDENCE.md 템플릿
94
+ evidence_template = f"""# Gate 검증 결과
95
+
96
+ > 검증일: {datetime.now().strftime('%Y-%m-%d %H:%M')}
97
+ > 경로: {path}
98
+
99
+ ## 단계별 결과
100
+
101
+ | 단계 | 결과 | 비고 |
102
+ |------|------|------|
103
+ {chr(10).join(f'| {s} | ⏳ | |' for s in active_steps)}
104
+
105
+ ## 자동 수정
106
+ {'활성화' if fix else '비활성화'}
107
+
108
+ ---
109
+
110
+ 모든 단계 PASS 시 "완료" 처리
111
+ """
112
+
113
+ # EVIDENCE.md 생성
114
+ evidence_file = project_path / "EVIDENCE.md"
115
+ evidence_file.write_text(evidence_template, encoding='utf-8')
116
+
117
+ return [TextContent(type="text", text=f"""# Gate 검증 시작
118
+
119
+ ## 검증 단계
120
+
121
+ {steps_md}
122
+
123
+ ## EVIDENCE.md
124
+ `{evidence_file}` 에 결과가 기록됩니다.
125
+
126
+ ---
127
+
128
+ ## 실행 방법
129
+
130
+ 각 단계를 순서대로 실행하고 결과를 기록하세요.
131
+
132
+ {'lint 에러는 자동 수정을 시도합니다.' if fix else ''}
133
+
134
+ **모든 단계 PASS = 완료!**
135
+ """)]
136
+
137
+
138
+ async def handoff(path: str, feature: str, decisions: str, warnings: str, next_steps: str) -> list[TextContent]:
139
+ """의도 기록"""
140
+ project_path = Path(path)
141
+
142
+ if not project_path.exists():
143
+ return [TextContent(type="text", text=f"❌ 경로가 존재하지 않습니다: {path}")]
144
+
145
+ handoffs_dir = project_path / ".claude" / "handoffs"
146
+ handoffs_dir.mkdir(parents=True, exist_ok=True)
147
+
148
+ # 파일명 생성
149
+ timestamp = datetime.now().strftime('%Y-%m-%d')
150
+ safe_feature = feature.replace(" ", "-").replace("/", "-")[:30]
151
+ handoff_file = handoffs_dir / f"{timestamp}_{safe_feature}.md"
152
+
153
+ content = f"""# Handoff: {feature}
154
+
155
+ > 작성일: {datetime.now().strftime('%Y-%m-%d %H:%M')}
156
+ > 경로: {path}
157
+
158
+ ---
159
+
160
+ ## 완료한 작업
161
+
162
+ {feature}
163
+
164
+ ---
165
+
166
+ ## 주요 결정사항 (왜 이렇게 했는지)
167
+
168
+ {decisions if decisions else '(기록 필요)'}
169
+
170
+ ---
171
+
172
+ ## 주의할 점
173
+
174
+ {warnings if warnings else '(없음)'}
175
+
176
+ ---
177
+
178
+ ## 다음에 해야 할 것
179
+
180
+ {next_steps if next_steps else '(없음)'}
181
+
182
+ ---
183
+
184
+ ## Context Bias 제거 권장
185
+
186
+ 이 기록을 남긴 후:
187
+ 1. `/clear` 실행 또는 새 세션 시작
188
+ 2. `verify` 도구로 검증
189
+ 3. `gate` 도구로 최종 확인
190
+ 4. 커밋
191
+
192
+ """
193
+ handoff_file.write_text(content, encoding='utf-8')
194
+
195
+ return [TextContent(type="text", text=f"""# Handoff 기록 완료
196
+
197
+ ## 기록 위치
198
+ `{handoff_file}`
199
+
200
+ ## 요약
201
+
202
+ | 항목 | 내용 |
203
+ |------|------|
204
+ | 기능 | {feature} |
205
+ | 결정사항 | {decisions[:50] + '...' if decisions and len(decisions) > 50 else decisions or '없음'} |
206
+ | 주의사항 | {warnings[:50] + '...' if warnings and len(warnings) > 50 else warnings or '없음'} |
207
+ | 다음 단계 | {next_steps[:50] + '...' if next_steps and len(next_steps) > 50 else next_steps or '없음'} |
208
+
209
+ ---
210
+
211
+ **다음 작업자(또는 미래의 나)를 위한 기록이 저장되었습니다.**
212
+ """)]
@@ -0,0 +1,269 @@
1
+ Metadata-Version: 2.4
2
+ Name: clouvel
3
+ Version: 0.6.3
4
+ Summary: 바이브코딩 프로세스를 강제하는 MCP 서버 - PRD 없으면 코딩 없다
5
+ Project-URL: Homepage, https://github.com/Whitening-Sinabro/clouvel
6
+ Project-URL: Repository, https://github.com/Whitening-Sinabro/clouvel
7
+ Project-URL: Issues, https://github.com/Whitening-Sinabro/clouvel/issues
8
+ Author: SINABRO
9
+ License-Expression: MIT
10
+ Keywords: documentation,mcp,prd,vibe-coding
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Requires-Python: >=3.10
17
+ Requires-Dist: mcp>=1.0.0
18
+ Requires-Dist: pydantic>=2.0.0
19
+ Description-Content-Type: text/markdown
20
+
21
+ # Clouvel
22
+
23
+ > **PRD 없으면 코딩 없다.**
24
+
25
+ 바이브코딩 프로세스를 강제하는 MCP 서버.
26
+ 문서 없이 코딩 시작? 차단됩니다.
27
+
28
+ ---
29
+
30
+ ## 설치
31
+
32
+ ```bash
33
+ pip install clouvel
34
+ ```
35
+
36
+ ---
37
+
38
+ ## Claude Code 연동
39
+
40
+ `claude_desktop_config.json`에 추가:
41
+
42
+ ```json
43
+ {
44
+ "mcpServers": {
45
+ "clouvel": {
46
+ "command": "uvx",
47
+ "args": ["clouvel"]
48
+ }
49
+ }
50
+ }
51
+ ```
52
+
53
+ ---
54
+
55
+ ## 도구 목록 (23개)
56
+
57
+ ### Core (4개)
58
+
59
+ | 도구 | 설명 |
60
+ |------|------|
61
+ | `can_code` | 코딩 가능? PRD 있어야 허용 |
62
+ | `scan_docs` | docs 폴더 파일 목록 |
63
+ | `analyze_docs` | 필수 문서 체크 |
64
+ | `init_docs` | docs 폴더 + 템플릿 생성 |
65
+
66
+ **예시: can_code**
67
+ ```
68
+ You: "로그인 기능 만들어줘"
69
+ Claude: can_code 호출...
70
+
71
+ ❌ 코딩 차단
72
+ - PRD.md 없음
73
+ - Architecture.md 없음
74
+ 💡 먼저 PRD를 작성하세요.
75
+ ```
76
+
77
+ ---
78
+
79
+ ### Docs (6개)
80
+
81
+ | 도구 | 설명 |
82
+ |------|------|
83
+ | `get_prd_template` | PRD 템플릿 생성 |
84
+ | `write_prd_section` | PRD 섹션별 가이드 |
85
+ | `get_prd_guide` | PRD 작성 전체 가이드 |
86
+ | `get_verify_checklist` | 검증 체크리스트 |
87
+ | `get_setup_guide` | 플랫폼별 설정 가이드 |
88
+ | `get_analytics` | 사용량 통계 |
89
+
90
+ **예시: get_analytics**
91
+ ```
92
+ 📊 최근 7일 사용 통계
93
+ - can_code: 23회
94
+ - gate: 8회
95
+ - Gate 통과율: 85%
96
+ ```
97
+
98
+ ---
99
+
100
+ ### Setup (2개)
101
+
102
+ | 도구 | 설명 |
103
+ |------|------|
104
+ | `init_clouvel` | 온보딩 (플랫폼 선택) |
105
+ | `setup_cli` | CLI 환경 설정 |
106
+
107
+ **예시: setup_cli**
108
+ ```
109
+ You: "strict 모드로 설정해줘"
110
+
111
+ ⚙️ CLI 설정 완료
112
+ - CLAUDE.md 생성됨
113
+ - pre-commit 훅 설치됨
114
+ - PRD 없으면 커밋 차단
115
+ ```
116
+
117
+ ---
118
+
119
+ ### Rules - v0.5 (3개)
120
+
121
+ | 도구 | 설명 |
122
+ |------|------|
123
+ | `init_rules` | 규칙 파일 생성 |
124
+ | `get_rule` | 파일별 적용 규칙 조회 |
125
+ | `add_rule` | 새 규칙 추가 |
126
+
127
+ **예시: get_rule**
128
+ ```
129
+ You: "auth.ts 수정하려는데 규칙 뭐야?"
130
+
131
+ 📜 auth.ts 적용 규칙
132
+ NEVER:
133
+ - 비밀번호 평문 저장
134
+ - JWT 시크릿 하드코딩
135
+ ALWAYS:
136
+ - bcrypt로 해싱
137
+ ```
138
+
139
+ ---
140
+
141
+ ### Verify - v0.5 (3개)
142
+
143
+ | 도구 | 설명 |
144
+ |------|------|
145
+ | `verify` | Context Bias 제거 검증 |
146
+ | `gate` | lint → test → build 자동화 |
147
+ | `handoff` | 의도 기록 (다음 세션용) |
148
+
149
+ **예시: gate**
150
+ ```
151
+ You: "gate 돌려줘"
152
+
153
+ 🚦 Gate 실행
154
+ 1. Lint... ✅
155
+ 2. Test... ✅ (12/12)
156
+ 3. Build.. ✅
157
+ 🎉 Gate PASS - 커밋 가능!
158
+ ```
159
+
160
+ **예시: handoff**
161
+ ```
162
+ You: "로그인 기능 끝났어"
163
+
164
+ 📋 핸드오프 저장됨
165
+ - 기능: 로그인
166
+ - 결정: JWT 선택
167
+ - 주의: refresh token 미구현
168
+ - 다음: 회원가입
169
+ ```
170
+
171
+ ---
172
+
173
+ ### Planning - v0.6 (4개)
174
+
175
+ | 도구 | 설명 |
176
+ |------|------|
177
+ | `init_planning` | 작업 목표 설정 |
178
+ | `save_finding` | 조사 결과 저장 |
179
+ | `refresh_goals` | 목표 리마인드 |
180
+ | `update_progress` | 진행 상황 업데이트 |
181
+
182
+ **예시: refresh_goals**
183
+ ```
184
+ You: "지금 뭐하고 있었지?"
185
+
186
+ 🎯 현재 목표
187
+ 작업: 결제 시스템
188
+
189
+ ✅ Stripe 연동
190
+ 🔄 웹훅 처리 (진행 중)
191
+ ⬚ 영수증 발송
192
+
193
+ 진행률: 33%
194
+ ```
195
+
196
+ ---
197
+
198
+ ### Agents - v0.7 (2개)
199
+
200
+ | 도구 | 설명 |
201
+ |------|------|
202
+ | `spawn_explore` | 코드베이스 탐색 |
203
+ | `spawn_librarian` | 외부 문서/API 조사 |
204
+
205
+ **예시: spawn_explore**
206
+ ```
207
+ You: "인증 로직 어디있어?"
208
+
209
+ 🔍 탐색 결과
210
+ - src/lib/auth.ts (메인)
211
+ - src/middleware/auth.ts
212
+ - src/api/auth/route.ts
213
+ ```
214
+
215
+ **예시: spawn_librarian**
216
+ ```
217
+ You: "Next.js 15 바뀐거 조사해줘"
218
+
219
+ 📚 조사 결과
220
+ - async/await 서버 컴포넌트 기본
221
+ - 새 캐싱 전략
222
+ - Turbopack 안정화
223
+ 출처: Next.js 공식 문서
224
+ ```
225
+
226
+ ---
227
+
228
+ ### Hooks - v0.8 (2개)
229
+
230
+ | 도구 | 설명 |
231
+ |------|------|
232
+ | `hook_design` | 코딩 전 자동 체크 |
233
+ | `hook_verify` | 코딩 후 자동 검증 |
234
+
235
+ **예시: hook_verify**
236
+ ```
237
+ You: "커밋 전에 자동으로 검사하게 해줘"
238
+
239
+ 🪝 검증 훅 생성됨
240
+ 트리거: pre_commit
241
+ 단계: lint, test
242
+ 실패 시: 커밋 차단
243
+ ```
244
+
245
+ ---
246
+
247
+ ## Pro 버전
248
+
249
+ 더 강력한 기능이 필요하다면 **Clouvel Pro**를 확인하세요.
250
+
251
+ - **Shovel 워크플로우** 자동 설치
252
+ - **에러 학습 시스템**
253
+ - **Context 관리 도구**
254
+
255
+ **[Clouvel Pro 보러가기](https://whitening-sinabro.github.io/clouvel/)**
256
+
257
+ ---
258
+
259
+ ## 링크
260
+
261
+ - [GitHub](https://github.com/Whitening-Sinabro/clouvel)
262
+ - [Landing Page](https://whitening-sinabro.github.io/clouvel/)
263
+ - [Issues](https://github.com/Whitening-Sinabro/clouvel/issues)
264
+
265
+ ---
266
+
267
+ ## 라이선스
268
+
269
+ MIT
@@ -0,0 +1,16 @@
1
+ clouvel/__init__.py,sha256=kd5Da6RpqW39wTlqulTHiEdOPNmPaxxs4Ke14XeuyIg,45
2
+ clouvel/analytics.py,sha256=thAbz1zHL8XV56T8dNbeIrebgI5MpA5hUyV_Wm5suLU,4456
3
+ clouvel/server.py,sha256=Sq091oNbIFBlj-cTK6-k3LHlj-PAxBE3vJPUO1oGAoc,23647
4
+ clouvel/tools/__init__.py,sha256=kwEmKiyDohhDjkm65G8nG6shxm9gY_K6HG0u3LEL-oI,1412
5
+ clouvel/tools/agents.py,sha256=W6xvg2-QUIOGm_7xOio1bsXikn-0NlMGh-ifaoG7yJY,6949
6
+ clouvel/tools/core.py,sha256=YMkK0pcFaionFFzVMoO31WdjEvGwPbUhSrL4BKGA86I,11939
7
+ clouvel/tools/docs.py,sha256=JS3idaEFNggM4II5cv2CLA99Q3G-TBHZWyrBcDStiEQ,6031
8
+ clouvel/tools/hooks.py,sha256=F3clvkkMaTIb4hdjsiLCNz-c1s2eo3e31ObftzzIFd4,5269
9
+ clouvel/tools/planning.py,sha256=1VMLypxgf506vEAUhjmDxkyBmiWlr27Mc2OLIX2D-NE,7360
10
+ clouvel/tools/rules.py,sha256=0zWlVSv94vwM11FnyjXnEiaykzfuYEEuWMWjZNpIXe8,6140
11
+ clouvel/tools/setup.py,sha256=HltxSRxOy9pV0ozvJifFEdR_08Cf_d3IC1DOtO3p-1E,4888
12
+ clouvel/tools/verify.py,sha256=1ZBFP62FaDYALII_bWBrUj2I4gOjEqieEDizUVu1UPo,5291
13
+ clouvel-0.6.3.dist-info/METADATA,sha256=FSttvhA30ocvpmTNpnDektAvNG9Ds00RTU44V2FX1-4,5204
14
+ clouvel-0.6.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
15
+ clouvel-0.6.3.dist-info/entry_points.txt,sha256=OvZ_fGmyJXE-9o54QYRRbGt4CCsm_u5r-9Bnc0BdquE,41
16
+ clouvel-0.6.3.dist-info/RECORD,,
@@ -1,80 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: clouvel
3
- Version: 0.3.1
4
- Summary: 바이브코딩 프로세스를 강제하는 MCP 서버
5
- Project-URL: Homepage, https://github.com/sinabro/clouvel
6
- Project-URL: Repository, https://github.com/sinabro/clouvel
7
- Author: SINABRO
8
- License-Expression: MIT
9
- Keywords: documentation,mcp,prd,vibe-coding
10
- Classifier: Development Status :: 3 - Alpha
11
- Classifier: Intended Audience :: Developers
12
- Classifier: License :: OSI Approved :: MIT License
13
- Classifier: Programming Language :: Python :: 3.11
14
- Classifier: Programming Language :: Python :: 3.12
15
- Requires-Python: >=3.11
16
- Requires-Dist: mcp>=1.0.0
17
- Requires-Dist: pydantic>=2.0.0
18
- Description-Content-Type: text/markdown
19
-
20
- # Clouvel
21
-
22
- 바이브코딩 프로세스를 강제하는 MCP 서버.
23
-
24
- 코딩 전에 PRD 검증부터.
25
-
26
- ## 설치
27
-
28
- Claude Desktop 설정 (`claude_desktop_config.json`):
29
-
30
- ```json
31
- {
32
- "mcpServers": {
33
- "clouvel": {
34
- "command": "uvx",
35
- "args": ["clouvel"]
36
- }
37
- }
38
- }
39
- ```
40
-
41
- 끝. pip install 필요 없음.
42
-
43
- ## 제공 도구
44
-
45
- | 도구 | 설명 |
46
- |------|------|
47
- | `scan_docs` | docs 폴더 파일 목록 |
48
- | `analyze_docs` | 필수 문서 체크. 빠진 거 알려줌 |
49
- | `get_prd_guide` | PRD 작성 가이드 |
50
- | `get_verify_checklist` | 검증 체크리스트 |
51
-
52
- ## 사용법
53
-
54
- Claude한테:
55
- - "이 프로젝트 docs 검증해줘"
56
- - "PRD 어떻게 써야 해?"
57
- - "검증 체크리스트 보여줘"
58
-
59
- ## 필수 문서
60
-
61
- `analyze_docs`가 체크하는 것들:
62
-
63
- - PRD (제품 요구사항)
64
- - 아키텍처 문서
65
- - API 스펙
66
- - DB 스키마
67
- - 검증 계획
68
-
69
- 다 있어야 "바이브코딩 시작해도 됨" 나옴.
70
-
71
- ## 왜?
72
-
73
- 바이브코딩 = AI가 코드 짬.
74
- 근데 PRD 없이 시작하면 = 나중에 다 뜯어고침.
75
-
76
- Clouvel = 문서 없으면 코딩 못 하게 강제.
77
-
78
- ## License
79
-
80
- MIT
@@ -1,6 +0,0 @@
1
- clouvel/__init__.py,sha256=kd5Da6RpqW39wTlqulTHiEdOPNmPaxxs4Ke14XeuyIg,45
2
- clouvel/server.py,sha256=5ROWIMKoGmjknx1JdtWzDd2UnkfAWwylwf33dhVW-rk,30698
3
- clouvel-0.3.1.dist-info/METADATA,sha256=dOjQLN-RIN-X1jabrNvCZ1-I6WtGe9ZTs4ntc0sbj2c,1775
4
- clouvel-0.3.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
5
- clouvel-0.3.1.dist-info/entry_points.txt,sha256=OvZ_fGmyJXE-9o54QYRRbGt4CCsm_u5r-9Bnc0BdquE,41
6
- clouvel-0.3.1.dist-info/RECORD,,