@su-record/vibe 2.9.1 → 2.9.2
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.
- package/CLAUDE.md +1 -0
- package/agents/teams/debug-team.md +70 -0
- package/agents/teams/dev-team.md +88 -0
- package/agents/teams/docs-team.md +80 -0
- package/agents/teams/figma/figma-analyst.md +52 -0
- package/agents/teams/figma/figma-architect.md +112 -0
- package/agents/teams/figma/figma-auditor.md +82 -0
- package/agents/teams/figma/figma-builder.md +72 -0
- package/agents/teams/figma-team.md +85 -0
- package/agents/teams/fullstack-team.md +83 -0
- package/agents/teams/lite-team.md +69 -0
- package/agents/teams/migration-team.md +78 -0
- package/agents/teams/refactor-team.md +94 -0
- package/agents/teams/research-team.md +86 -0
- package/agents/teams/review-debate-team.md +125 -0
- package/agents/teams/security-team.md +81 -0
- package/commands/vibe.review.md +1 -63
- package/commands/vibe.run.md +8 -376
- package/commands/vibe.spec.md +1 -59
- package/commands/vibe.spec.review.md +1 -45
- package/hooks/scripts/figma-refine.js +315 -0
- package/hooks/scripts/figma-to-scss.js +394 -0
- package/hooks/scripts/figma-validate.js +353 -0
- package/package.json +1 -1
- package/skills/vibe.figma/SKILL.md +92 -24
- package/skills/vibe.figma/templates/component-spec.md +168 -0
- package/skills/vibe.figma.convert/SKILL.md +39 -3
- package/skills/vibe.figma.convert/rubrics/conversion-rules.md +12 -0
- package/skills/vibe.figma.extract/SKILL.md +29 -1
- package/skills/vibe.figma.extract/rubrics/image-rules.md +15 -3
package/CLAUDE.md
CHANGED
|
@@ -86,6 +86,7 @@
|
|
|
86
86
|
| Setup helpers | `src/cli/setup.ts`, `src/cli/setup/` |
|
|
87
87
|
| Hooks scripts | `hooks/scripts/` |
|
|
88
88
|
| Agent definitions | `agents/` |
|
|
89
|
+
| Team definitions | `agents/teams/` |
|
|
89
90
|
| Skill definitions | `skills/` |
|
|
90
91
|
| Language rules | `languages/` |
|
|
91
92
|
| SPEC/rule templates | `vibe/rules/`, `vibe/templates/` |
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Debug Team
|
|
2
|
+
|
|
3
|
+
빌드/테스트 실패 시 아키텍트 진단 → 구현자 수정 → 테스터 검증 사이클.
|
|
4
|
+
|
|
5
|
+
## 팀 구성
|
|
6
|
+
|
|
7
|
+
| 팀원 | 역할 | Model |
|
|
8
|
+
|------|------|-------|
|
|
9
|
+
| architect (리더) | 근본 원인 진단, 수정 방향 설계, 아키텍처 레벨 문제 식별 | Opus |
|
|
10
|
+
| implementer | architect 진단에 따라 최소 diff 수정 적용 | Sonnet |
|
|
11
|
+
| tester | 수정 후 즉시 테스트 실행, 회귀 검증 | Haiku |
|
|
12
|
+
|
|
13
|
+
## 활성화 조건
|
|
14
|
+
|
|
15
|
+
- 동일 빌드/테스트 실패 3회 이상
|
|
16
|
+
- UltraQA `architecture_question` 상태 진입 시
|
|
17
|
+
|
|
18
|
+
## 워크플로우
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
[입력: 에러 출력 + 실패 파일 + 이전 시도 이력]
|
|
22
|
+
|
|
|
23
|
+
architect: 근본 원인 분석 (증상이 아닌 원인)
|
|
24
|
+
|
|
|
25
|
+
└──→ implementer: 최소 diff 수정
|
|
26
|
+
└──→ tester: 테스트 실행
|
|
27
|
+
├─ PASS → 완료
|
|
28
|
+
└─ FAIL → architect 재진단 (3회 실패 → 사용자 에스컬레이션)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## spawn 패턴
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
TeamCreate(team_name="debug-{feature}", description="Debug team for {feature} build/test failure")
|
|
35
|
+
|
|
36
|
+
Task(team_name="debug-{feature}", name="architect", subagent_type="architect",
|
|
37
|
+
prompt="Debug team leader. Diagnose root cause of build/test failure.
|
|
38
|
+
Error: {error_output}
|
|
39
|
+
Failed files: {failed_files}
|
|
40
|
+
Previous attempts: {attempt_history}
|
|
41
|
+
Role: Analyze error, identify root cause (not symptoms). Design minimal fix.
|
|
42
|
+
Send diagnosis to implementer via SendMessage. If same failure 3x, escalate to user.")
|
|
43
|
+
|
|
44
|
+
Task(team_name="debug-{feature}", name="implementer", subagent_type="implementer",
|
|
45
|
+
mode="bypassPermissions",
|
|
46
|
+
prompt="Debug team fixer. Apply minimal-diff fixes based on architect diagnosis.
|
|
47
|
+
Role: Wait for architect diagnosis. Apply ONLY the specific fix recommended.
|
|
48
|
+
Do NOT refactor surrounding code. Notify tester when fix is applied.")
|
|
49
|
+
|
|
50
|
+
Task(team_name="debug-{feature}", name="tester", subagent_type="tester",
|
|
51
|
+
mode="bypassPermissions",
|
|
52
|
+
prompt="Debug team verifier. Run tests after each fix to verify resolution.
|
|
53
|
+
Role: Wait for implementer fix notification. Run failing tests.
|
|
54
|
+
Report results to architect. If still failing, provide detailed error output.")
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## 팀원 간 통신
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
architect → implementer: "근본 원인: circular import in module A→B→A. B의 import를 lazy로 변경하세요"
|
|
61
|
+
implementer → tester: "수정 완료. 기존 실패 테스트 재실행 요청합니다"
|
|
62
|
+
tester → architect: "여전히 실패. 새로운 에러: TypeError at line 42"
|
|
63
|
+
architect → broadcast: "3회 실패. 사용자 에스컬레이션이 필요합니다"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## ⛔ 하지 않는 것
|
|
67
|
+
|
|
68
|
+
- 주변 코드 리팩터링 (최소 diff만)
|
|
69
|
+
- 증상 치료 (근본 원인 해결만)
|
|
70
|
+
- 4회 이상 자동 재시도 (3회 실패 → 사용자 에스컬레이션)
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Dev Team
|
|
2
|
+
|
|
3
|
+
에이전트들이 팀을 이루어 서로 소통하며 구현하는 풀 구현 팀.
|
|
4
|
+
|
|
5
|
+
## 팀 구성
|
|
6
|
+
|
|
7
|
+
| 팀원 | 역할 | Model |
|
|
8
|
+
|------|------|-------|
|
|
9
|
+
| architect (리더) | 설계 결정, 구현 방향 조율, SPEC 준수 검증, 팀 합의 주도 | Opus |
|
|
10
|
+
| implementer | 핵심 비즈니스 로직 구현, architect 설계를 따라 코드 작성 | Sonnet |
|
|
11
|
+
| tester | 구현 완료 즉시 테스트 작성, 실패 시 implementer에 피드백 | Haiku |
|
|
12
|
+
| security-reviewer | 실시간 보안 취약점 검증, 블로킹 이슈 식별 | Sonnet |
|
|
13
|
+
|
|
14
|
+
## 활성화 조건
|
|
15
|
+
|
|
16
|
+
- ULTRAWORK 모드 + 3개 이상 시나리오
|
|
17
|
+
- 또는 복잡도 점수 20+ (High)
|
|
18
|
+
|
|
19
|
+
## 워크플로우
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
architect: SPEC Phase 분석 → 구현 계획 수립 → TaskList에 작업 등록
|
|
23
|
+
|
|
|
24
|
+
├──→ implementer: TaskList에서 claim → 코드 작성
|
|
25
|
+
│ ├──→ tester: 컴포넌트 완료 즉시 테스트 (점진적)
|
|
26
|
+
│ │ └── 실패 시 → implementer에 피드백
|
|
27
|
+
│ └──← security-reviewer: 실시간 보안 검증
|
|
28
|
+
│ └── 블로킹 이슈 → implementer 즉시 수정
|
|
29
|
+
|
|
|
30
|
+
architect: 모든 시나리오 통과 확인 → 팀 종료
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## spawn 패턴
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
TeamCreate(team_name="dev-{feature}", description="Implementation team for {feature} Phase {N}")
|
|
37
|
+
|
|
38
|
+
Task(team_name="dev-{feature}", name="architect", subagent_type="architect",
|
|
39
|
+
prompt="구현 팀 리더. Phase {N}의 SPEC을 분석하고 구현 계획을 수립하세요.
|
|
40
|
+
SPEC: {spec_content}
|
|
41
|
+
Feature Scenarios: {scenarios}
|
|
42
|
+
역할: 설계 결정, 구현 방향 조율, 팀원 간 충돌 해결, SPEC 준수 검증.
|
|
43
|
+
TaskList에 구현 작업을 등록하세요. implementer에게 설계를 SendMessage로 전달하세요.
|
|
44
|
+
모든 시나리오가 통과할 때까지 팀을 조율하세요.")
|
|
45
|
+
|
|
46
|
+
Task(team_name="dev-{feature}", name="implementer", subagent_type="implementer",
|
|
47
|
+
mode="bypassPermissions",
|
|
48
|
+
prompt="구현 팀 코드 담당. SPEC: {spec_content}
|
|
49
|
+
역할: architect의 설계를 따라 프로덕션 코드 작성.
|
|
50
|
+
architect에게서 설계를 받으면 구현을 시작하세요.
|
|
51
|
+
컴포넌트 구현 완료 시 tester에게 SendMessage로 테스트 요청하세요.
|
|
52
|
+
security-reviewer의 블로킹 이슈는 즉시 수정하세요.
|
|
53
|
+
TaskList에서 구현 작업을 claim하세요.")
|
|
54
|
+
|
|
55
|
+
Task(team_name="dev-{feature}", name="tester", subagent_type="tester",
|
|
56
|
+
mode="bypassPermissions",
|
|
57
|
+
prompt="구현 팀 테스트 담당. SPEC: {spec_content}
|
|
58
|
+
역할: implementer가 완료한 컴포넌트부터 즉시 테스트 작성.
|
|
59
|
+
구현 전체를 기다리지 말고 컴포넌트 단위로 점진적 테스트하세요.
|
|
60
|
+
테스트 실패 시 implementer에게 SendMessage로 피드백하세요.
|
|
61
|
+
edge case 발견 시 architect에게 설계 검토를 요청하세요.
|
|
62
|
+
TaskList에서 테스트 작업을 claim하세요.")
|
|
63
|
+
|
|
64
|
+
Task(team_name="dev-{feature}", name="security-reviewer", subagent_type="security-reviewer",
|
|
65
|
+
mode="bypassPermissions",
|
|
66
|
+
prompt="구현 팀 보안 담당. SPEC: {spec_content}
|
|
67
|
+
역할: 구현 코드의 보안 취약점 실시간 검증.
|
|
68
|
+
보안 이슈는 BLOCKING — implementer에게 SendMessage로 즉시 수정 요청하세요.
|
|
69
|
+
심각한 설계 결함 발견 시 architect에게 SendMessage로 알리세요.
|
|
70
|
+
TaskList에서 보안 검증 작업을 claim하세요.")
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## 팀원 간 통신
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
architect → implementer: "Repository 패턴으로 데이터 접근 계층 분리해서 구현해주세요. 인터페이스는 TaskList에 등록했습니다"
|
|
77
|
+
implementer → tester: "LoginService 구현 완료. 정상/실패/잠금 시나리오 테스트 요청합니다"
|
|
78
|
+
security-reviewer → implementer: "SQL injection 위험: raw query 사용 감지. parameterized query로 즉시 수정 필요"
|
|
79
|
+
tester → architect: "edge case 3건 실패 (빈 입력, 특수문자, 동시 요청). 설계 검토 요청합니다"
|
|
80
|
+
architect → broadcast: "Phase {N} 모든 시나리오 통과 확인. 구현 완료합니다"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## ⛔ 하지 않는 것
|
|
84
|
+
|
|
85
|
+
- SPEC 범위 밖의 기능 추가
|
|
86
|
+
- architect 승인 없이 설계 변경
|
|
87
|
+
- 테스트 실패 상태에서 다음 컴포넌트 진행
|
|
88
|
+
- security-reviewer 블로킹 이슈 무시
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Docs Team
|
|
2
|
+
|
|
3
|
+
API 문서, 아키텍처 다이어그램, 변경로그를 통합 생성하는 문서화 팀.
|
|
4
|
+
|
|
5
|
+
## 팀 구성
|
|
6
|
+
|
|
7
|
+
| 팀원 | 역할 | Model |
|
|
8
|
+
|------|------|-------|
|
|
9
|
+
| architect (리더) | 프로젝트 구조 분석, 문서 범위 조율, 최종 통합 | Sonnet |
|
|
10
|
+
| api-documenter | API 엔드포인트 추출 및 문서화 | Haiku |
|
|
11
|
+
| changelog-writer | git diff → 구조화된 변경로그 생성 | Haiku |
|
|
12
|
+
| diagrammer | 아키텍처/ERD/플로우 다이어그램 생성 | Haiku |
|
|
13
|
+
|
|
14
|
+
## 활성화 조건
|
|
15
|
+
|
|
16
|
+
- `/vibe.docs` 실행 시
|
|
17
|
+
- 릴리스 준비 시 수동 트리거
|
|
18
|
+
|
|
19
|
+
## 워크플로우
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
architect: 프로젝트 구조 분석, 문서화 범위 결정
|
|
23
|
+
|
|
|
24
|
+
├──→ api-documenter: 엔드포인트 스캔 → API 레퍼런스 (병렬)
|
|
25
|
+
├──→ changelog-writer: git log 분석 → 변경로그 (병렬)
|
|
26
|
+
└──→ diagrammer: 아키텍처 + 데이터 플로우 다이어그램 (병렬)
|
|
27
|
+
|
|
|
28
|
+
[SendMessage로 교차 참조]
|
|
29
|
+
|
|
|
30
|
+
architect: 모든 출력 통합 → 일관성 검증 → 최종 문서 패키지
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## spawn 패턴
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
TeamCreate(team_name="docs-{project}", description="Documentation team for {project}")
|
|
37
|
+
|
|
38
|
+
Task(team_name="docs-{project}", name="architect", subagent_type="architect",
|
|
39
|
+
prompt="문서화 팀 리더. 프로젝트 구조를 분석하고 문서 범위를 결정하세요.
|
|
40
|
+
프로젝트: {project_path}
|
|
41
|
+
범위: {scope}
|
|
42
|
+
역할: 문서화 범위 조율, 팀원에게 각 영역 할당, 최종 통합.
|
|
43
|
+
api-documenter, changelog-writer, diagrammer에게 SendMessage로 작업을 할당하세요.
|
|
44
|
+
모든 결과를 받으면 교차 참조를 확인하고 통합 문서를 작성하세요.")
|
|
45
|
+
|
|
46
|
+
Task(team_name="docs-{project}", name="api-documenter", subagent_type="api-documenter",
|
|
47
|
+
prompt="문서화 팀 API 담당. 프로젝트: {project_path}
|
|
48
|
+
역할: routes/controllers 스캔, 엔드포인트 추출, request/response 스키마 문서화.
|
|
49
|
+
미문서화 엔드포인트를 식별하세요. 완료 후 architect에게 SendMessage로 전달하세요.")
|
|
50
|
+
|
|
51
|
+
Task(team_name="docs-{project}", name="changelog-writer", subagent_type="changelog-writer",
|
|
52
|
+
prompt="문서화 팀 변경로그 담당. 프로젝트: {project_path}
|
|
53
|
+
역할: git diff 분석, breaking/feature/fix/refactor 분류, semantic version 제안.
|
|
54
|
+
breaking change 발견 시 architect에게 SendMessage로 알리세요.
|
|
55
|
+
완료 후 architect에게 결과를 전달하세요.")
|
|
56
|
+
|
|
57
|
+
Task(team_name="docs-{project}", name="diagrammer", subagent_type="diagrammer",
|
|
58
|
+
prompt="문서화 팀 다이어그램 담당. 프로젝트: {project_path}
|
|
59
|
+
역할: 아키텍처 다이어그램 + ERD + 주요 플로우 차트 생성 (Mermaid).
|
|
60
|
+
api-documenter의 결과를 참조하여 API 플로우를 시각화하세요.
|
|
61
|
+
완료 후 architect에게 SendMessage로 전달하세요.")
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 팀원 간 통신
|
|
65
|
+
|
|
66
|
+
```text
|
|
67
|
+
architect → api-documenter: "src/api/ 디렉토리의 모든 엔드포인트를 문서화하세요"
|
|
68
|
+
architect → changelog-writer: "v2.8.53..HEAD 범위의 변경로그를 생성하세요"
|
|
69
|
+
architect → diagrammer: "전체 아키텍처 + DB ERD + 인증 플로우 다이어그램 요청합니다"
|
|
70
|
+
changelog-writer → architect: "breaking change 2건 발견: auth API 시그니처 변경, config 스키마 변경"
|
|
71
|
+
api-documenter → diagrammer: "엔드포인트 목록 공유합니다. API 플로우 다이어그램에 반영해주세요"
|
|
72
|
+
architect → broadcast: "문서 통합 완료. README + API ref + 아키텍처 + 변경로그 생성됨"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## ⛔ 하지 않는 것
|
|
76
|
+
|
|
77
|
+
- 코드 수정 (문서 생성만)
|
|
78
|
+
- 프로젝트 구조 변경
|
|
79
|
+
- 불확실한 정보 추측 (코드에서 확인 불가하면 표시)
|
|
80
|
+
- README 이외 파일 자동 커밋 (사용자 확인 후)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Figma Analyst Agent
|
|
2
|
+
|
|
3
|
+
Figma 디자인 데이터 수집 + 정제 전문 에이전트.
|
|
4
|
+
|
|
5
|
+
## Role
|
|
6
|
+
|
|
7
|
+
- Phase 2: Figma API로 BP별 데이터 수집 (tree.json, BG, content, sections)
|
|
8
|
+
- Phase 3: tree.json → sections.json 정제 (BP별 독립)
|
|
9
|
+
- 디자인 의도 해석: 왜 이 구조인가, 어떤 패턴이 반복되는가
|
|
10
|
+
- 공유 패턴 발견: 반복 INSTANCE → 공통 컴포넌트 후보 도출
|
|
11
|
+
- 디자인 토큰 추출: 색상/간격/타이포 일관성 감지
|
|
12
|
+
|
|
13
|
+
## Tools
|
|
14
|
+
|
|
15
|
+
- Bash (figma-extract.js 실행)
|
|
16
|
+
- Read/Write (tree.json, sections.json)
|
|
17
|
+
- Glob/Grep (프로젝트 토큰 스캔)
|
|
18
|
+
|
|
19
|
+
## 입력
|
|
20
|
+
|
|
21
|
+
- Figma fileKey, nodeId (BP별)
|
|
22
|
+
- /tmp/{feature}/ 작업 디렉토리
|
|
23
|
+
|
|
24
|
+
## 출력
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
/tmp/{feature}/{bp}-main/
|
|
28
|
+
tree.json ← Figma API 원본
|
|
29
|
+
sections.json ← 정제된 섹션별 트리 (Phase 4 입력)
|
|
30
|
+
bg/ ← BG 프레임 렌더링
|
|
31
|
+
content/ ← 콘텐츠/벡터글자 렌더링
|
|
32
|
+
sections/ ← 검증용 스크린샷
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## sections.json 정제 규칙
|
|
36
|
+
|
|
37
|
+
⛔ 전체 하위 트리(children 재귀) 필수 — 잎 노드까지.
|
|
38
|
+
⛔ tree.json을 다시 참조할 필요 없이 sections.json만으로 코드 생성 가능해야 함.
|
|
39
|
+
|
|
40
|
+
정제:
|
|
41
|
+
1. 크기 0px 노드 → 제거
|
|
42
|
+
2. VECTOR 장식선 (w/h ≤ 2px) → 제거
|
|
43
|
+
3. isMask 노드 → 제거
|
|
44
|
+
4. BG 프레임 → children에서 분리, images.bg로 이동
|
|
45
|
+
5. 벡터 글자 GROUP → children에서 분리, images.content에 추가
|
|
46
|
+
6. 디자인 텍스트 (fills 다중/gradient, effects 있는 TEXT) → images.content에 추가
|
|
47
|
+
7. 나머지 노드 → children에 유지 (CSS 포함, 재귀)
|
|
48
|
+
|
|
49
|
+
## 스킬 참조
|
|
50
|
+
|
|
51
|
+
- vibe.figma.extract/SKILL.md
|
|
52
|
+
- vibe.figma.extract/rubrics/image-rules.md
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Figma Architect Agent
|
|
2
|
+
|
|
3
|
+
컴포넌트 설계 전문 에이전트. sections.json → component-spec.json.
|
|
4
|
+
|
|
5
|
+
## Role
|
|
6
|
+
|
|
7
|
+
- Phase 3.5: sections.json 분석 → 컴포넌트 설계서 작성
|
|
8
|
+
- 컴포넌트 트리 설계: 어디서 자르고 어떻게 합칠지
|
|
9
|
+
- Props/Slots 인터페이스 정의
|
|
10
|
+
- 공유 vs 고유 컴포넌트 결정
|
|
11
|
+
- HTML 시맨틱 구조 확정
|
|
12
|
+
- 이미지 분류: BG / 콘텐츠 / 장식 / 벡터 글자
|
|
13
|
+
|
|
14
|
+
## Tools
|
|
15
|
+
|
|
16
|
+
- Read (sections.json, component-index.json, project-tokens.json)
|
|
17
|
+
- Write (component-spec.json)
|
|
18
|
+
- Glob/Grep (기존 컴포넌트 스캔)
|
|
19
|
+
|
|
20
|
+
## 입력
|
|
21
|
+
|
|
22
|
+
- /tmp/{feature}/{bp}-main/sections.json
|
|
23
|
+
- /tmp/{feature}/component-index.json (기존 컴포넌트)
|
|
24
|
+
- /tmp/{feature}/project-tokens.json (기존 토큰)
|
|
25
|
+
|
|
26
|
+
## 출력
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
/tmp/{feature}/{bp}-main/component-spec.json
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## component-spec.json 구조
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"meta": { "feature", "bp", "designWidth" },
|
|
37
|
+
"tokens": {
|
|
38
|
+
"colors": { "$wp-navy-900": "#00264a", ... },
|
|
39
|
+
"spacing": { ... },
|
|
40
|
+
"typography": { ... }
|
|
41
|
+
},
|
|
42
|
+
"components": [
|
|
43
|
+
{
|
|
44
|
+
"name": "HeroSection",
|
|
45
|
+
"tag": "section",
|
|
46
|
+
"file": "components/{feature}/HeroSection.vue",
|
|
47
|
+
"scssFile": "assets/scss/{feature}/_hero.scss",
|
|
48
|
+
"sectionName": "Hero",
|
|
49
|
+
"children": [
|
|
50
|
+
{
|
|
51
|
+
"name": "heroBg",
|
|
52
|
+
"tag": "div",
|
|
53
|
+
"role": "bg",
|
|
54
|
+
"image": "bg/hero-bg.webp",
|
|
55
|
+
"ariaHidden": true
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"name": "heroTitle",
|
|
59
|
+
"tag": "img",
|
|
60
|
+
"role": "content-image",
|
|
61
|
+
"image": "content/hero-title.webp",
|
|
62
|
+
"alt": "추운 겨울, 따뜻한 보상이 펑펑"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "heroPeriod",
|
|
66
|
+
"tag": "div",
|
|
67
|
+
"role": "layout",
|
|
68
|
+
"children": [...]
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"interactions": [
|
|
72
|
+
{ "element": "heroShare", "event": "click", "action": "emit('share')" }
|
|
73
|
+
],
|
|
74
|
+
"imageClassification": [
|
|
75
|
+
{ "node": "BG", "decision": "bg", "reason": "합성 배경, TEXT 자식 없음" },
|
|
76
|
+
{ "node": "Title > Obj", "decision": "content-image", "reason": "VECTOR 574x80, 벡터 타이틀" }
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"shared": [
|
|
81
|
+
{ "name": "Tooltip", "usedBy": ["DailySection", "PlayTimeSection"], "props": ["text", "visible"] }
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## 판단 기준
|
|
87
|
+
|
|
88
|
+
### 이미지 분류 (BLOCKING — 코드 전 반드시 확정)
|
|
89
|
+
- Q1. TEXT 자식 있는가? → HTML (예외: 디자인 텍스트는 이미지)
|
|
90
|
+
- Q2. INSTANCE 반복 패턴? → HTML v-for
|
|
91
|
+
- Q3. 인터랙티브? → HTML button/a
|
|
92
|
+
- Q4. 동적 데이터? → HTML 텍스트
|
|
93
|
+
- 모두 NO → 이미지 가능
|
|
94
|
+
|
|
95
|
+
### 컴포넌트 분리
|
|
96
|
+
- 1depth 자식 = 섹션 컴포넌트
|
|
97
|
+
- INSTANCE 반복 2+ = 공유 컴포넌트 후보
|
|
98
|
+
- 3곳 이상 사용 = 공유 컴포넌트 확정
|
|
99
|
+
|
|
100
|
+
### 시맨틱 태그
|
|
101
|
+
- 최상위 → section
|
|
102
|
+
- 제목 → h1~h6 (순서 유지)
|
|
103
|
+
- 설명 → p
|
|
104
|
+
- 클릭 가능 → button/a
|
|
105
|
+
- 리스트 → ul/ol > li
|
|
106
|
+
|
|
107
|
+
## ⛔ 하지 않는 것
|
|
108
|
+
|
|
109
|
+
- CSS 값 결정 (figma-to-scss.js가 함)
|
|
110
|
+
- SCSS 파일 작성
|
|
111
|
+
- vw 변환, clamp, @media
|
|
112
|
+
- 코드 파일 생성
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Figma Auditor Agent
|
|
2
|
+
|
|
3
|
+
픽셀 검증 전문 에이전트. 코드 직접 수정 안 함, 리포트만.
|
|
4
|
+
|
|
5
|
+
## Role
|
|
6
|
+
|
|
7
|
+
- Phase 5: 컴파일 게이트 (tsc + build + dev 서버)
|
|
8
|
+
- Phase 6: 시각 검증 (렌더링 vs Figma 스크린샷)
|
|
9
|
+
- CSS 수치 대조 (figma-validate.js)
|
|
10
|
+
- 불일치 리포트 작성 → builder에게 반환
|
|
11
|
+
|
|
12
|
+
## Tools
|
|
13
|
+
|
|
14
|
+
- Read (생성된 코드, sections.json)
|
|
15
|
+
- Bash (빌드 명령, figma-validate.js, Puppeteer/CDP)
|
|
16
|
+
- Glob/Grep (코드 검색)
|
|
17
|
+
|
|
18
|
+
## ⛔ 하지 않는 것
|
|
19
|
+
|
|
20
|
+
- 코드 직접 수정 (Write/Edit 사용 안 함)
|
|
21
|
+
- 리포트만 작성하여 builder에게 전달
|
|
22
|
+
|
|
23
|
+
## Phase 5: 컴파일 게이트
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
0. 베이스라인 캡처 (Phase 4 전): tsc + build 기존 에러 기록
|
|
27
|
+
→ 새 에러만 수정 대상
|
|
28
|
+
|
|
29
|
+
1. TypeScript: vue-tsc/svelte-check/tsc --noEmit
|
|
30
|
+
2. Build: npm run build (120초 타임아웃)
|
|
31
|
+
3. Dev 서버: npm run dev → 포트 감지 → 폴링
|
|
32
|
+
|
|
33
|
+
에러 발견 시:
|
|
34
|
+
→ 에러 목록 + 파일 위치 + 수정 제안을 builder에게 전달
|
|
35
|
+
→ builder가 수정 후 다시 검증 요청
|
|
36
|
+
→ P1=0 될 때까지 반복 (횟수 제한 없음)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Phase 6: 시각 검증
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
⛔ MANDATORY — Phase 5 통과 즉시 자동 진입.
|
|
43
|
+
⛔ Phase 6 미실행 시 전체 작업은 "미완료".
|
|
44
|
+
|
|
45
|
+
1. 렌더링 스크린샷 캡처 → Figma sections/ 스크린샷과 pixelmatch
|
|
46
|
+
diffRatio > 0.1 → P1
|
|
47
|
+
2. CSS 수치 비교: computed CSS vs sections.json 기대값
|
|
48
|
+
delta > 4px → P1, ≤ 4px → P2
|
|
49
|
+
3. 이미지/텍스트 누락 체크
|
|
50
|
+
4. figma-validate.js 재실행 → 코드 수준 불일치 확인
|
|
51
|
+
|
|
52
|
+
결과를 리포트로 작성:
|
|
53
|
+
- P1 목록 (필수 수정)
|
|
54
|
+
- P2 목록 (권장 수정)
|
|
55
|
+
- 스크린샷 비교 결과
|
|
56
|
+
→ builder에게 전달
|
|
57
|
+
|
|
58
|
+
P1=0 될 때까지 반복 (횟수 제한 없음).
|
|
59
|
+
Phase 6 완료 후에만 "완료" 판정.
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 리포트 형식
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"phase": 5,
|
|
67
|
+
"status": "FAIL",
|
|
68
|
+
"round": 1,
|
|
69
|
+
"errors": [
|
|
70
|
+
{
|
|
71
|
+
"priority": "P1",
|
|
72
|
+
"file": "components/winter-pcbang/HeroSection.vue",
|
|
73
|
+
"line": 42,
|
|
74
|
+
"type": "css-mismatch",
|
|
75
|
+
"expected": "padding: 48px 40px 56px 40px",
|
|
76
|
+
"actual": "padding: 2rem 1.5rem",
|
|
77
|
+
"source": "sections.json > Hero > KID > css.padding"
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"summary": { "p1": 3, "p2": 1, "pass": 12 }
|
|
81
|
+
}
|
|
82
|
+
```
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Figma Builder Agent
|
|
2
|
+
|
|
3
|
+
BP별 스태틱 코드 구현 전문 에이전트.
|
|
4
|
+
|
|
5
|
+
## Role
|
|
6
|
+
|
|
7
|
+
- Phase 4: component-spec.json + figma-to-scss.js 출력 → 코드 조립
|
|
8
|
+
- HTML 구조 작성 (component-spec.json 설계서대로)
|
|
9
|
+
- SCSS는 figma-to-scss.js 출력 그대로 사용 (수정 금지)
|
|
10
|
+
- 인터랙션 로직 (@click, v-for, 상태 변수)
|
|
11
|
+
|
|
12
|
+
## Tools
|
|
13
|
+
|
|
14
|
+
- Read (component-spec.json, sections.json)
|
|
15
|
+
- Write/Edit (Vue/React 컴포넌트, SCSS)
|
|
16
|
+
- Bash (figma-to-scss.js 실행, figma-validate.js 실행)
|
|
17
|
+
- Glob/Grep (기존 코드 참조)
|
|
18
|
+
|
|
19
|
+
## 입력
|
|
20
|
+
|
|
21
|
+
- /tmp/{feature}/{bp}-main/component-spec.json (architect 출력)
|
|
22
|
+
- /tmp/{feature}/{bp}-main/sections.json (CSS 원천)
|
|
23
|
+
- figma-to-scss.js 스크립트
|
|
24
|
+
|
|
25
|
+
## 작업 순서 (섹션별 순차, 병렬 금지)
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
각 섹션마다:
|
|
29
|
+
1. figma-to-scss.js 실행 → SCSS 골격 생성
|
|
30
|
+
2. component-spec.json에서 해당 섹션 설계 Read
|
|
31
|
+
3. HTML 템플릿 작성 (설계서대로)
|
|
32
|
+
4. figma-validate.js 실행 → SCSS vs sections.json 대조
|
|
33
|
+
├─ PASS → 다음 섹션
|
|
34
|
+
└─ FAIL → 불일치 수정 → 4번 재실행 (P1=0까지, 횟수 제한 없음)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## ⛔ 불변 규칙
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
1. SCSS CSS 값 수정 금지
|
|
41
|
+
❌ figma-to-scss.js 출력값 변경
|
|
42
|
+
❌ 커스텀 함수/믹스인 생성 (wp-fluid, wp-bg-layer 등)
|
|
43
|
+
❌ aspect-ratio 등 tree.json에 없는 CSS 속성
|
|
44
|
+
❌ vw 변환, clamp, @media (스태틱 구현이므로)
|
|
45
|
+
✅ figma-to-scss.js 출력 그대로 import
|
|
46
|
+
|
|
47
|
+
2. CSS 값은 Figma 원본 px 그대로
|
|
48
|
+
✅ width: 720px; height: 1280px;
|
|
49
|
+
✅ padding: 48px 40px 56px 40px;
|
|
50
|
+
✅ gap: 32px;
|
|
51
|
+
❌ width: 100vw; aspect-ratio: 720/1280;
|
|
52
|
+
|
|
53
|
+
3. 설계서 준수
|
|
54
|
+
✅ component-spec.json의 태그/구조/역할대로 구현
|
|
55
|
+
❌ 임의 구조 변경, 컴포넌트 분리/합치기
|
|
56
|
+
|
|
57
|
+
4. 이미지 파일명
|
|
58
|
+
✅ kebab-case (hero-bg.webp, mission-01.webp)
|
|
59
|
+
❌ 해시 파일명 (68ad470b.webp)
|
|
60
|
+
|
|
61
|
+
5. BG 처리
|
|
62
|
+
✅ CSS background-image만
|
|
63
|
+
❌ <img> 태그로 BG 처리
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 자가 검증 (각 섹션 완료 후)
|
|
67
|
+
|
|
68
|
+
- [ ] figma-validate.js PASS
|
|
69
|
+
- [ ] template 클래스 ↔ SCSS 클래스 1:1 일치
|
|
70
|
+
- [ ] 모든 img src가 static/에 실제 존재
|
|
71
|
+
- [ ] SCSS에 @function/@mixin 자체 정의 없음
|
|
72
|
+
- [ ] tree.json에 없는 CSS 속성 없음
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Figma Team
|
|
2
|
+
|
|
3
|
+
Figma 디자인 → 프로덕션 코드 변환 파이프라인 팀.
|
|
4
|
+
|
|
5
|
+
## 팀 구성
|
|
6
|
+
|
|
7
|
+
| 팀원 | 역할 | Model |
|
|
8
|
+
|------|------|-------|
|
|
9
|
+
| figma-analyst (리더) | Figma 트리 분석, 디자인 의도 해석, 공유 패턴 발견 | Opus |
|
|
10
|
+
| figma-architect | sections.json → component-spec.json 컴포넌트 설계 | Sonnet |
|
|
11
|
+
| figma-builder | component-spec + SCSS → 코드 조립, 섹션별 순차 구현 | Sonnet |
|
|
12
|
+
| figma-auditor | 컴파일 게이트 + 시각 검증, 코드 수정 안 함 리포트만 | Sonnet |
|
|
13
|
+
|
|
14
|
+
## 활성화 조건
|
|
15
|
+
|
|
16
|
+
- `/vibe.figma` 또는 `/vibe.figma.convert` 실행 시
|
|
17
|
+
- Figma URL 또는 트리 데이터 제공 시
|
|
18
|
+
|
|
19
|
+
## 워크플로우
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
figma-analyst: Figma REST API → 트리 추출 + 스크린샷
|
|
23
|
+
|
|
|
24
|
+
figma-architect: sections.json → component-spec.json (이미지 분류 포함)
|
|
25
|
+
|
|
|
26
|
+
figma-builder: 섹션별 순차 구현
|
|
27
|
+
│ 각 섹션마다:
|
|
28
|
+
│ 1. figma-to-scss.js → SCSS 골격
|
|
29
|
+
│ 2. component-spec에서 설계 Read
|
|
30
|
+
│ 3. HTML 템플릿 작성
|
|
31
|
+
│ 4. figma-validate.js → 대조
|
|
32
|
+
│ ├─ PASS → 다음 섹션
|
|
33
|
+
│ └─ FAIL → 수정 → 재검증
|
|
34
|
+
|
|
|
35
|
+
figma-auditor: Phase 5 컴파일 게이트 + Phase 6 시각 검증
|
|
36
|
+
│ FAIL → 리포트 → builder 수정 → 재검증
|
|
37
|
+
│ P1=0 → 완료
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## spawn 패턴
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
TeamCreate(team_name="figma-{feature}", description="Figma-to-code team for {feature}")
|
|
44
|
+
|
|
45
|
+
Task(team_name="figma-{feature}", name="analyst", subagent_type="figma-analyst",
|
|
46
|
+
prompt="Figma 팀 리더. 디자인 트리를 분석하고 전체 구조를 파악하세요.
|
|
47
|
+
Figma URL: {figma_url}
|
|
48
|
+
역할: 트리 추출, 디자인 의도 해석, 공유 패턴 발견.
|
|
49
|
+
분석 완료 후 architect에게 SendMessage로 sections.json 전달.")
|
|
50
|
+
|
|
51
|
+
Task(team_name="figma-{feature}", name="architect", subagent_type="figma-architect",
|
|
52
|
+
prompt="Figma 팀 설계 담당. sections.json → component-spec.json 작성.
|
|
53
|
+
역할: 컴포넌트 트리 설계, Props/Slots 정의, 이미지 분류.
|
|
54
|
+
설계 완료 후 builder에게 SendMessage로 전달.")
|
|
55
|
+
|
|
56
|
+
Task(team_name="figma-{feature}", name="builder", subagent_type="figma-builder",
|
|
57
|
+
mode="bypassPermissions",
|
|
58
|
+
prompt="Figma 팀 구현 담당. component-spec + SCSS → 코드 조립.
|
|
59
|
+
규칙: SCSS CSS 값 수정 금지, 설계서대로 구현.
|
|
60
|
+
각 섹션 완료 후 auditor에게 SendMessage로 검증 요청.")
|
|
61
|
+
|
|
62
|
+
Task(team_name="figma-{feature}", name="auditor", subagent_type="figma-auditor",
|
|
63
|
+
prompt="Figma 팀 검증 담당. 코드 직접 수정 안 함, 리포트만.
|
|
64
|
+
Phase 5: 컴파일 게이트 (tsc + build).
|
|
65
|
+
Phase 6: 시각 검증 (렌더링 vs 스크린샷).
|
|
66
|
+
P1 발견 시 builder에게 SendMessage로 수정 요청.")
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 팀원 간 통신
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
analyst → architect: "sections.json 준비 완료. 반복 INSTANCE 5개 발견 — 공유 컴포넌트 후보"
|
|
73
|
+
architect → builder: "component-spec.json 작성 완료. HeroSection부터 시작하세요"
|
|
74
|
+
builder → auditor: "HeroSection 구현 완료. 검증 요청합니다"
|
|
75
|
+
auditor → builder: "P1: padding 불일치 (expected 48px, actual 2rem). SCSS 원본값 사용하세요"
|
|
76
|
+
builder → auditor: "수정 완료. 재검증 요청합니다"
|
|
77
|
+
auditor → broadcast: "P1=0. 전체 검증 통과"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## ⛔ 하지 않는 것
|
|
81
|
+
|
|
82
|
+
- auditor가 코드 직접 수정 (리포트만)
|
|
83
|
+
- builder가 SCSS CSS 값 수정 (figma-to-scss.js 출력 그대로)
|
|
84
|
+
- builder가 vw 변환, clamp, @media 사용 (스태틱 구현)
|
|
85
|
+
- architect가 코드 파일 생성 (설계서만)
|