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.
- clouvel/analytics.py +151 -0
- clouvel/server.py +575 -1136
- clouvel/tools/__init__.py +75 -0
- clouvel/tools/agents.py +245 -0
- clouvel/tools/core.py +315 -0
- clouvel/tools/docs.py +247 -0
- clouvel/tools/hooks.py +170 -0
- clouvel/tools/planning.py +320 -0
- clouvel/tools/rules.py +223 -0
- clouvel/tools/setup.py +166 -0
- clouvel/tools/verify.py +212 -0
- clouvel-0.6.3.dist-info/METADATA +269 -0
- clouvel-0.6.3.dist-info/RECORD +16 -0
- clouvel-0.3.1.dist-info/METADATA +0 -80
- clouvel-0.3.1.dist-info/RECORD +0 -6
- {clouvel-0.3.1.dist-info → clouvel-0.6.3.dist-info}/WHEEL +0 -0
- {clouvel-0.3.1.dist-info → clouvel-0.6.3.dist-info}/entry_points.txt +0 -0
clouvel/tools/verify.py
ADDED
|
@@ -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,,
|
clouvel-0.3.1.dist-info/METADATA
DELETED
|
@@ -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
|
clouvel-0.3.1.dist-info/RECORD
DELETED
|
@@ -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,,
|
|
File without changes
|
|
File without changes
|