@su-record/vibe 2.7.19 → 2.7.21
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/README.md +178 -77
- package/agents/qa/qa-coordinator.md +131 -0
- package/commands/vibe.review.md +79 -0
- package/commands/vibe.run.md +68 -9
- package/commands/vibe.spec.review.md +48 -8
- package/commands/vibe.verify.md +26 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +4 -12
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/postinstall/claude-agents.d.ts.map +1 -1
- package/dist/cli/postinstall/claude-agents.js +1 -0
- package/dist/cli/postinstall/claude-agents.js.map +1 -1
- package/dist/cli/postinstall/codex-agents.d.ts +18 -6
- package/dist/cli/postinstall/codex-agents.d.ts.map +1 -1
- package/dist/cli/postinstall/codex-agents.js +78 -16
- package/dist/cli/postinstall/codex-agents.js.map +1 -1
- package/dist/cli/postinstall/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +17 -14
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/cli/postinstall/index.d.ts +1 -1
- package/dist/cli/postinstall/index.d.ts.map +1 -1
- package/dist/cli/postinstall/index.js +1 -1
- package/dist/cli/postinstall/index.js.map +1 -1
- package/dist/cli/postinstall/main.d.ts.map +1 -1
- package/dist/cli/postinstall/main.js +4 -8
- package/dist/cli/postinstall/main.js.map +1 -1
- package/dist/cli/postinstall.d.ts +1 -1
- package/dist/cli/postinstall.d.ts.map +1 -1
- package/dist/cli/postinstall.js +1 -1
- package/dist/cli/postinstall.js.map +1 -1
- package/dist/cli/types.d.ts +1 -0
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/utils/cli-detector.d.ts +1 -0
- package/dist/cli/utils/cli-detector.d.ts.map +1 -1
- package/dist/cli/utils/cli-detector.js +1 -0
- package/dist/cli/utils/cli-detector.js.map +1 -1
- package/dist/infra/lib/ComponentRegistry.d.ts +35 -0
- package/dist/infra/lib/ComponentRegistry.d.ts.map +1 -0
- package/dist/infra/lib/ComponentRegistry.js +59 -0
- package/dist/infra/lib/ComponentRegistry.js.map +1 -0
- package/dist/infra/lib/ReviewRace.d.ts.map +1 -1
- package/dist/infra/lib/ReviewRace.js +11 -7
- package/dist/infra/lib/ReviewRace.js.map +1 -1
- package/dist/infra/lib/__tests__/ComponentRegistry.test.d.ts +2 -0
- package/dist/infra/lib/__tests__/ComponentRegistry.test.d.ts.map +1 -0
- package/dist/infra/lib/__tests__/ComponentRegistry.test.js +99 -0
- package/dist/infra/lib/__tests__/ComponentRegistry.test.js.map +1 -0
- package/dist/infra/lib/embedding/__tests__/EmbeddingProvider.test.js +4 -0
- package/dist/infra/lib/embedding/__tests__/EmbeddingProvider.test.js.map +1 -1
- package/dist/infra/lib/evolution/DescriptionOptimizer.d.ts +45 -0
- package/dist/infra/lib/evolution/DescriptionOptimizer.d.ts.map +1 -1
- package/dist/infra/lib/evolution/DescriptionOptimizer.js +151 -0
- package/dist/infra/lib/evolution/DescriptionOptimizer.js.map +1 -1
- package/dist/infra/lib/evolution/__tests__/eval.test.js +64 -0
- package/dist/infra/lib/evolution/__tests__/eval.test.js.map +1 -1
- package/dist/infra/lib/gpt/chat.d.ts.map +1 -1
- package/dist/infra/lib/gpt/chat.js +8 -0
- package/dist/infra/lib/gpt/chat.js.map +1 -1
- package/dist/infra/lib/gpt/specializations.d.ts.map +1 -1
- package/dist/infra/lib/gpt/specializations.js +5 -0
- package/dist/infra/lib/gpt/specializations.js.map +1 -1
- package/dist/infra/lib/llm-availability.d.ts +21 -0
- package/dist/infra/lib/llm-availability.d.ts.map +1 -0
- package/dist/infra/lib/llm-availability.js +57 -0
- package/dist/infra/lib/llm-availability.js.map +1 -0
- package/dist/infra/lib/memory/IMemoryStorage.d.ts +16 -0
- package/dist/infra/lib/memory/IMemoryStorage.d.ts.map +1 -0
- package/dist/infra/lib/memory/IMemoryStorage.js +7 -0
- package/dist/infra/lib/memory/IMemoryStorage.js.map +1 -0
- package/dist/infra/lib/memory/InMemoryStorage.d.ts +13 -0
- package/dist/infra/lib/memory/InMemoryStorage.d.ts.map +1 -0
- package/dist/infra/lib/memory/InMemoryStorage.js +44 -0
- package/dist/infra/lib/memory/InMemoryStorage.js.map +1 -0
- package/dist/infra/lib/memory/MemoryStorage.d.ts +2 -1
- package/dist/infra/lib/memory/MemoryStorage.d.ts.map +1 -1
- package/dist/infra/lib/memory/MemoryStorage.js.map +1 -1
- package/dist/infra/lib/memory/__tests__/InMemoryStorage.test.d.ts +2 -0
- package/dist/infra/lib/memory/__tests__/InMemoryStorage.test.d.ts.map +1 -0
- package/dist/infra/lib/memory/__tests__/InMemoryStorage.test.js +114 -0
- package/dist/infra/lib/memory/__tests__/InMemoryStorage.test.js.map +1 -0
- package/dist/infra/lib/memory/index.d.ts +2 -0
- package/dist/infra/lib/memory/index.d.ts.map +1 -1
- package/dist/infra/lib/memory/index.js +1 -0
- package/dist/infra/lib/memory/index.js.map +1 -1
- package/dist/infra/lib/telemetry/SkillTelemetry.d.ts +8 -0
- package/dist/infra/lib/telemetry/SkillTelemetry.d.ts.map +1 -1
- package/dist/infra/lib/telemetry/SkillTelemetry.js +40 -0
- package/dist/infra/lib/telemetry/SkillTelemetry.js.map +1 -1
- package/dist/infra/lib/telemetry/SkillTelemetry.test.js +33 -0
- package/dist/infra/lib/telemetry/SkillTelemetry.test.js.map +1 -1
- package/dist/infra/lib/telemetry/VibeSpan.d.ts +20 -0
- package/dist/infra/lib/telemetry/VibeSpan.d.ts.map +1 -0
- package/dist/infra/lib/telemetry/VibeSpan.js +26 -0
- package/dist/infra/lib/telemetry/VibeSpan.js.map +1 -0
- package/dist/infra/orchestrator/BackgroundManager.d.ts.map +1 -1
- package/dist/infra/orchestrator/BackgroundManager.js +2 -0
- package/dist/infra/orchestrator/BackgroundManager.js.map +1 -1
- package/dist/infra/orchestrator/MultiLlmResearch.d.ts.map +1 -1
- package/dist/infra/orchestrator/MultiLlmResearch.js +49 -40
- package/dist/infra/orchestrator/MultiLlmResearch.js.map +1 -1
- package/dist/infra/orchestrator/SmartRouter.d.ts.map +1 -1
- package/dist/infra/orchestrator/SmartRouter.js +4 -3
- package/dist/infra/orchestrator/SmartRouter.js.map +1 -1
- package/dist/infra/orchestrator/types.d.ts +8 -0
- package/dist/infra/orchestrator/types.d.ts.map +1 -1
- package/dist/infra/orchestrator/types.js +36 -0
- package/dist/infra/orchestrator/types.js.map +1 -1
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +5 -0
- package/dist/tools/index.js.map +1 -1
- package/hooks/hooks.json +4 -0
- package/hooks/scripts/codex-detect.js +46 -0
- package/hooks/scripts/codex-review-gate.js +80 -0
- package/hooks/scripts/evolution-engine.js +69 -0
- package/hooks/scripts/llm-orchestrate.js +9 -5
- package/hooks/scripts/skill-injector.js +83 -0
- package/package.json +1 -1
- package/skills/arch-guard/SKILL.md +1 -1
- package/skills/brand-assets/SKILL.md +1 -1
- package/skills/capability-loop/SKILL.md +1 -1
- package/skills/characterization-test/SKILL.md +1 -1
- package/skills/commerce-patterns/SKILL.md +1 -1
- package/skills/e2e-commerce/SKILL.md +1 -1
- package/skills/exec-plan/SKILL.md +1 -1
- package/skills/parallel-research/SKILL.md +1 -1
- package/skills/seo-checklist/SKILL.md +1 -1
- package/skills/ui-ux-pro-max/SKILL.md +1 -1
- package/skills/video-production/SKILL.md +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# VIBE — AI Coding Framework
|
|
1
|
+
# VIBE — AI Coding Framework
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@su-record/vibe)
|
|
4
4
|
[](https://www.npmjs.com/package/@su-record/vibe)
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
[](https://www.typescriptlang.org/)
|
|
7
7
|
[](https://opensource.org/licenses/MIT)
|
|
8
8
|
|
|
9
|
-
**설치 한 줄로
|
|
9
|
+
**설치 한 줄로 56개 에이전트, 43+ 도구, 멀티 LLM 오케스트레이션을 더합니다.**
|
|
10
|
+
|
|
11
|
+
Claude Code, Codex, Cursor, Gemini CLI 모두 지원.
|
|
10
12
|
|
|
11
13
|
```bash
|
|
12
14
|
npm install -g @su-record/vibe
|
|
@@ -24,7 +26,7 @@ Vibe는 구조로 해결합니다.
|
|
|
24
26
|
|------|------|
|
|
25
27
|
| AI가 `any` 타입 남발 | Quality Gate가 `any`/`@ts-ignore` 차단 |
|
|
26
28
|
| 한 번에 완성 기대 | SPEC → 구현 → 검증 단계별 워크플로우 |
|
|
27
|
-
| 리뷰 없이 머지 |
|
|
29
|
+
| 리뷰 없이 머지 | 12개 에이전트 병렬 리뷰 + 경계면 불일치 감지 |
|
|
28
30
|
| AI 결과를 그대로 수용 | GPT + Gemini 교차 검증 |
|
|
29
31
|
| 컨텍스트 소실 | Session RAG로 자동 저장/복원 |
|
|
30
32
|
| 복잡한 작업에서 길을 잃음 | SwarmOrchestrator 자동 분해 + 병렬 실행 |
|
|
@@ -39,6 +41,42 @@ Vibe는 구조로 해결합니다.
|
|
|
39
41
|
|
|
40
42
|
---
|
|
41
43
|
|
|
44
|
+
## 멀티 CLI 지원
|
|
45
|
+
|
|
46
|
+
| CLI | 설치 방식 | 에이전트 | 스킬 | 지시사항 |
|
|
47
|
+
|-----|----------|---------|------|---------|
|
|
48
|
+
| **Claude Code** | `~/.claude/agents/` (YAML frontmatter) | 56개 | `~/.claude/skills/` | `CLAUDE.md` |
|
|
49
|
+
| **Codex** | `~/.codex/plugins/vibe/` (Plugin) | 56개 | 플러그인 내장 | `AGENTS.md` |
|
|
50
|
+
| **Cursor** | `~/.cursor/agents/` | 56개 | `~/.cursor/skills/` | `.cursorrules` |
|
|
51
|
+
| **Gemini CLI** | `~/.gemini/agents/` | 56개 | `~/.gemini/skills/` | `GEMINI.md` |
|
|
52
|
+
|
|
53
|
+
### Codex 플러그인 통합
|
|
54
|
+
|
|
55
|
+
Codex Claude Code 플러그인(`codex-plugin-cc`) 설치 시 워크플로우 전 단계에서 자동 활용:
|
|
56
|
+
|
|
57
|
+
| 워크플로우 | Codex 활용 | 명령 |
|
|
58
|
+
|-----------|-----------|------|
|
|
59
|
+
| **spec review** | SPEC 설계 도전 리뷰 | `/codex:adversarial-review` |
|
|
60
|
+
| **run** | 병렬 구현 위임 | `/codex:rescue --background` |
|
|
61
|
+
| **run / review** | 3중 교차 코드 리뷰 (GPT+Gemini+Codex) | `/codex:review` |
|
|
62
|
+
| **run / review** | auto-fix 실패 시 폴백 | `/codex:rescue` |
|
|
63
|
+
| **verify** | 최종 리뷰 게이트 | `/codex:review` |
|
|
64
|
+
| **Stop 훅** | 코드 변경 시 자동 리뷰 | `codex-review-gate.js` |
|
|
65
|
+
|
|
66
|
+
Codex 미설치 시 자동 스킵 — 기존 워크플로우로 동작.
|
|
67
|
+
|
|
68
|
+
`vibe init` 시 Codex 플러그인 번들도 자동 생성:
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
~/.codex/plugins/vibe/
|
|
72
|
+
├── .codex-plugin/plugin.json # 플러그인 매니페스트
|
|
73
|
+
├── agents/ # 56개 에이전트 (순수 마크다운)
|
|
74
|
+
├── skills/ # 전역 스킬
|
|
75
|
+
└── AGENTS.md # VIBE 지시사항
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
42
80
|
## 워크플로우
|
|
43
81
|
|
|
44
82
|
```mermaid
|
|
@@ -50,9 +88,9 @@ flowchart LR
|
|
|
50
88
|
```
|
|
51
89
|
|
|
52
90
|
1. **`/vibe.spec`** — 요구사항을 SPEC 문서로 정의 (GPT + Gemini 병렬 리서치)
|
|
53
|
-
2. **`/vibe.spec.review`** — SPEC 품질 리뷰
|
|
54
|
-
3. **`/vibe.run`** — SPEC 기반 구현
|
|
55
|
-
4. **자동 리뷰** —
|
|
91
|
+
2. **`/vibe.spec.review`** — SPEC 품질 리뷰 + Codex adversarial review (3중 교차 검증)
|
|
92
|
+
3. **`/vibe.run`** — SPEC 기반 구현 (Codex rescue 병렬 위임) + 3중 코드 리뷰
|
|
93
|
+
4. **자동 리뷰** — 12개 전문 에이전트 병렬 검토 + Codex/경계면 검증, P1/P2 자동 수정
|
|
56
94
|
|
|
57
95
|
`ultrawork` 키워드를 붙이면 전 과정이 자동화됩니다:
|
|
58
96
|
|
|
@@ -62,7 +100,7 @@ flowchart LR
|
|
|
62
100
|
|
|
63
101
|
---
|
|
64
102
|
|
|
65
|
-
## 에이전트 (
|
|
103
|
+
## 에이전트 (56개)
|
|
66
104
|
|
|
67
105
|
### 메인 에이전트 (19)
|
|
68
106
|
|
|
@@ -87,54 +125,42 @@ Security, Performance, Architecture, Complexity, Simplicity, Data Integrity, Tes
|
|
|
87
125
|
| RUN | ui-stack-implementer, ui-dataviz-advisor |
|
|
88
126
|
| REVIEW | ux-compliance-reviewer, ui-a11y-auditor, ui-antipattern-detector |
|
|
89
127
|
|
|
90
|
-
###
|
|
128
|
+
### QA & 리서치 (11)
|
|
91
129
|
|
|
92
|
-
|
|
130
|
+
| 카테고리 | 에이전트 |
|
|
131
|
+
|----------|---------|
|
|
132
|
+
| **QA** | QA Coordinator, Edge Case Finder, Acceptance Tester |
|
|
133
|
+
| **리서치** | Best Practices, Framework Docs, Codebase Patterns, Security Advisory |
|
|
134
|
+
| **분석** | Requirements Analyst, UX Advisor, API Documenter, Changelog Writer |
|
|
93
135
|
|
|
94
|
-
|
|
136
|
+
QA Coordinator는 변경된 코드를 분석하여 적절한 QA 에이전트를 병렬 디스패치하고, 통합 QA 리포트를 생성합니다.
|
|
95
137
|
|
|
96
|
-
|
|
138
|
+
### 이벤트 에이전트 (6)
|
|
97
139
|
|
|
98
|
-
|
|
99
|
-
|----|--------|------|
|
|
100
|
-
| Lite | `/vibe.run` 일반 | architect, implementer, tester |
|
|
101
|
-
| Dev | `/vibe.run` ULTRAWORK | + security-reviewer |
|
|
102
|
-
| Research | `/vibe.spec` | 4개 리서치 에이전트 |
|
|
103
|
-
| Review Debate | `/vibe.review` | security, architecture, performance, simplicity |
|
|
104
|
-
| Debug | `/vibe.run` 실패 | architect, implementer, tester |
|
|
105
|
-
| Security | `/vibe.run` 보안 | security, data-integrity, security-advisory, tester |
|
|
106
|
-
| Migration | `/vibe.run` 마이그레이션 | + build-error-resolver |
|
|
107
|
-
| Fullstack | `/vibe.run` 풀스택 | frontend + backend implementer |
|
|
108
|
-
| SPEC Debate | `/vibe.spec.review` | 동일 |
|
|
140
|
+
Event Content, Event Image, Event Speaker, Event Ops, Event Comms, Event Scheduler
|
|
109
141
|
|
|
110
142
|
---
|
|
111
143
|
|
|
112
144
|
## 멀티 LLM 오케스트레이션
|
|
113
145
|
|
|
114
|
-
| 프로바이더 | 역할 | 인증 |
|
|
115
|
-
|
|
116
|
-
| **Claude** |
|
|
117
|
-
| **GPT** | 아키텍처,
|
|
118
|
-
| **
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
작업 유형별 자동 라우팅 + 폴백 체인. 프로바이더별 30초 타임아웃, 최대 3회 재시도, 5분 가용성 캐시.
|
|
123
|
-
|
|
124
|
-
| 작업 유형 | 우선순위 |
|
|
125
|
-
|----------|---------|
|
|
126
|
-
| 코드 분석, 리뷰, 추론, 아키텍처 | GPT → Gemini → Claude |
|
|
127
|
-
| UI/UX, 웹 검색 | Gemini → GPT → Claude |
|
|
146
|
+
| 프로바이더 | 모델 | 역할 | 인증 |
|
|
147
|
+
|-----------|------|------|------|
|
|
148
|
+
| **Claude** | Opus / Sonnet / Haiku | SPEC 작성, 코드 리뷰, 오케스트레이션 | 내장 (Claude Code) |
|
|
149
|
+
| **GPT** | gpt-5.4 | 추론, 아키텍처, 엣지케이스 분석 | Codex CLI / API Key |
|
|
150
|
+
| **Codex** | gpt-5.3-codex | 구현, 멀티파일 코딩 | Codex CLI / Plugin |
|
|
151
|
+
| **Codex Spark** | gpt-5.3-codex-spark | 초고속 리뷰/린트 (1000+ tok/s) | Codex CLI / Plugin |
|
|
152
|
+
| **Gemini** | gemini-3.1-pro | 리서치, 교차 검증, UI/UX | gemini-cli / API Key |
|
|
128
153
|
|
|
129
|
-
###
|
|
154
|
+
### 동적 모델 라우팅
|
|
130
155
|
|
|
131
|
-
|
|
156
|
+
Codex/Gemini 활성화 상태에 따라 자동 스위칭. 기본은 Claude만으로 동작.
|
|
132
157
|
|
|
133
|
-
|
|
|
134
|
-
|
|
135
|
-
| **
|
|
136
|
-
| **
|
|
137
|
-
| **
|
|
158
|
+
| 상태 | 동작 |
|
|
159
|
+
|------|------|
|
|
160
|
+
| **Claude only** | Opus(설계/판단) + Sonnet(리뷰/구현) + Haiku(탐색) |
|
|
161
|
+
| **+Codex** | 구현→5.3-Codex, 리뷰→Spark, 추론→5.4 스위칭 |
|
|
162
|
+
| **+Gemini** | 리서치/리뷰에 Gemini 병렬 추가 |
|
|
163
|
+
| **+Codex +Gemini** | 풀 오케스트레이션 (7개 모델) |
|
|
138
164
|
|
|
139
165
|
---
|
|
140
166
|
|
|
@@ -156,6 +182,58 @@ ULTRAWORK 모드에서 다음 Phase의 `prepare()`를 병렬 실행.
|
|
|
156
182
|
|
|
157
183
|
---
|
|
158
184
|
|
|
185
|
+
## 인프라 패턴
|
|
186
|
+
|
|
187
|
+
Agent-Lightning(Microsoft Research)의 핵심 아키텍처 패턴을 적용합니다.
|
|
188
|
+
|
|
189
|
+
### Store Interface
|
|
190
|
+
|
|
191
|
+
`IMemoryStorage` 인터페이스로 스토어를 추상화합니다. 테스트에서 SQLite 없이 `InMemoryStorage`로 교체 가능.
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
import { InMemoryStorage } from '@su-record/vibe/tools';
|
|
195
|
+
const store = new InMemoryStorage(); // DB 없이 테스트
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Structured Telemetry Spans
|
|
199
|
+
|
|
200
|
+
8종의 타입화된 스팬으로 모든 작업을 추적합니다.
|
|
201
|
+
|
|
202
|
+
| 스팬 타입 | 용도 |
|
|
203
|
+
|----------|------|
|
|
204
|
+
| `skill_run` | 스킬 실행 |
|
|
205
|
+
| `agent_run` | 에이전트 실행 |
|
|
206
|
+
| `edit` | 파일 수정 |
|
|
207
|
+
| `build` | 빌드/컴파일 |
|
|
208
|
+
| `review` | 코드 리뷰 |
|
|
209
|
+
| `hook` | 훅 실행 |
|
|
210
|
+
| `llm_call` | LLM 호출 |
|
|
211
|
+
| `decision` | 의사결정 |
|
|
212
|
+
|
|
213
|
+
```typescript
|
|
214
|
+
import { createSpan, completeSpan } from '@su-record/vibe/tools';
|
|
215
|
+
|
|
216
|
+
const span = createSpan('agent_run', 'explorer-low', { model: 'haiku' });
|
|
217
|
+
// ... 작업 수행
|
|
218
|
+
const done = completeSpan(span, 'ok', 1500);
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
부모-자식 계층 추적을 지원합니다 (`parent_id`). 모든 데이터는 로컬 JSONL에만 저장됩니다.
|
|
222
|
+
|
|
223
|
+
### Component Registry
|
|
224
|
+
|
|
225
|
+
런타임 컴포넌트 등록/해제를 지원하는 범용 레지스트리입니다.
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
import { ComponentRegistry } from '@su-record/vibe/tools';
|
|
229
|
+
|
|
230
|
+
const skills = new ComponentRegistry<SkillRunner>();
|
|
231
|
+
skills.register('review', () => new ReviewRunner(), { version: '2.0' });
|
|
232
|
+
const runner = skills.resolve('review');
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
159
237
|
## Session RAG
|
|
160
238
|
|
|
161
239
|
SQLite + FTS5 하이브리드 검색으로 세션 간 컨텍스트를 유지합니다.
|
|
@@ -172,22 +250,21 @@ SQLite + FTS5 하이브리드 검색으로 세션 간 컨텍스트를 유지합
|
|
|
172
250
|
|
|
173
251
|
## 스킬
|
|
174
252
|
|
|
175
|
-
### 내장 스킬
|
|
253
|
+
### 내장 스킬 (26개)
|
|
176
254
|
|
|
177
255
|
에이전트가 활용하는 도메인별 스킬 모듈입니다. 스택 감지 결과에 따라 자동 설치됩니다.
|
|
178
256
|
|
|
179
257
|
**코어**: Core Capabilities, Parallel Research, Commit Push PR, Git Worktree, Handoff, Priority Todos, Tool Fallback, Context7, Tech Debt, Characterization Test, Agents MD, Exec Plan, Arch Guard, Capability Loop
|
|
180
258
|
|
|
181
|
-
**프론트엔드**: Frontend Design, UI/UX Pro Max, Brand Assets, SEO Checklist
|
|
259
|
+
**프론트엔드**: Frontend Design, UI/UX Pro Max, Brand Assets, SEO Checklist
|
|
182
260
|
|
|
183
|
-
**도메인**: Commerce Patterns, E2E Commerce, Video Production
|
|
261
|
+
**도메인**: Commerce Patterns, E2E Commerce, Video Production
|
|
184
262
|
|
|
185
263
|
### 외부 스킬 (skills.sh)
|
|
186
264
|
|
|
187
265
|
[skills.sh](https://skills.sh) 에코시스템의 외부 스킬을 설치할 수 있습니다.
|
|
188
266
|
|
|
189
267
|
```bash
|
|
190
|
-
# 수동 설치
|
|
191
268
|
vibe skills add vercel-labs/next-skills
|
|
192
269
|
```
|
|
193
270
|
|
|
@@ -198,8 +275,6 @@ vibe skills add vercel-labs/next-skills
|
|
|
198
275
|
| `typescript-react` | `vercel-labs/agent-skills` |
|
|
199
276
|
| `typescript-nextjs` | `vercel-labs/agent-skills`, `vercel-labs/next-skills` |
|
|
200
277
|
|
|
201
|
-
설치된 패키지는 `.claude/vibe/config.json`의 `installedExternalSkills`로 추적되어 중복 설치를 방지합니다.
|
|
202
|
-
|
|
203
278
|
---
|
|
204
279
|
|
|
205
280
|
## 25개 프레임워크 지원
|
|
@@ -216,7 +291,7 @@ vibe skills add vercel-labs/next-skills
|
|
|
216
291
|
|
|
217
292
|
---
|
|
218
293
|
|
|
219
|
-
##
|
|
294
|
+
## 43+ 내장 도구
|
|
220
295
|
|
|
221
296
|
### 메모리 & 세션 (21)
|
|
222
297
|
|
|
@@ -226,14 +301,18 @@ vibe skills add vercel-labs/next-skills
|
|
|
226
301
|
|
|
227
302
|
`core_find_symbol`, `core_find_references`, `core_analyze_dependency_graph`, `core_analyze_complexity`, `core_validate_code_quality`, `core_check_coupling_cohesion`, `core_suggest_improvements`, `core_apply_quality_rules`
|
|
228
303
|
|
|
229
|
-
### SPEC & 테스트 (
|
|
304
|
+
### SPEC & 테스트 (7)
|
|
230
305
|
|
|
231
|
-
`core_spec_generator`, `core_prd_parser`, `core_traceability_matrix`, `
|
|
306
|
+
`core_spec_generator`, `core_prd_parser`, `core_traceability_matrix`, `core_preview_ui_ascii` 등
|
|
232
307
|
|
|
233
308
|
### UI/UX (4)
|
|
234
309
|
|
|
235
310
|
`core_ui_search`, `core_ui_stack_search`, `core_ui_generate_design_system`, `core_ui_persist_design_system`
|
|
236
311
|
|
|
312
|
+
### 반복 제어 (3+)
|
|
313
|
+
|
|
314
|
+
`LoopBreaker`, `VerificationLoop`, `DecisionTracer`, `InteractiveCheckpoint`, `AutomationLevel`
|
|
315
|
+
|
|
237
316
|
---
|
|
238
317
|
|
|
239
318
|
## 품질 보장
|
|
@@ -241,11 +320,12 @@ vibe skills add vercel-labs/next-skills
|
|
|
241
320
|
| 가드레일 | 메커니즘 |
|
|
242
321
|
|----------|---------|
|
|
243
322
|
| **타입 안전성** | Quality Gate — `any`, `@ts-ignore` 차단 |
|
|
244
|
-
| **코드 리뷰** |
|
|
323
|
+
| **코드 리뷰** | 12개 Sonnet 에이전트 병렬 리뷰 + Codex 3중 교차 검증 |
|
|
324
|
+
| **경계면 검증** | API↔프론트엔드 타입/라우팅/상태 정합성 자동 검증 |
|
|
245
325
|
| **완성도** | Ralph Loop — 100%까지 반복 (범위 축소 없음) |
|
|
326
|
+
| **수렴 보장** | Convergence — P1=0이면 완료, 반복 시 범위 축소 |
|
|
246
327
|
| **스코프 보호** | pre-tool-guard — 요청 범위 외 수정 방지 |
|
|
247
328
|
| **컨텍스트 보호** | context-save — 80/90/95% 자동 저장 |
|
|
248
|
-
| **합리화 방지** | Anti-Rationalization — AI 변명 패턴 차단 |
|
|
249
329
|
| **증거 게이트** | Evidence Gate — 증거 없는 완료 주장 금지 |
|
|
250
330
|
|
|
251
331
|
**복잡도 제한**: 함수 ≤50줄 | 중첩 ≤3단계 | 매개변수 ≤5 | 순환 복잡도 ≤10
|
|
@@ -264,7 +344,7 @@ vibe skills add vercel-labs/next-skills
|
|
|
264
344
|
| UserPromptSubmit | `keyword-detector.js` | 매직 키워드 감지 |
|
|
265
345
|
| Notification | `context-save.js` | 컨텍스트 80/90/95% 자동 저장 |
|
|
266
346
|
|
|
267
|
-
추가: `llm-orchestrate.js`, `code-review.js`, `recall.js`, `complexity.js`, `compound.js`, `stop-notify.js`
|
|
347
|
+
추가: `llm-orchestrate.js`, `codex-review-gate.js`, `codex-detect.js`, `code-review.js`, `recall.js`, `complexity.js`, `compound.js`, `stop-notify.js`
|
|
268
348
|
|
|
269
349
|
---
|
|
270
350
|
|
|
@@ -274,12 +354,13 @@ vibe skills add vercel-labs/next-skills
|
|
|
274
354
|
|--------|------|
|
|
275
355
|
| `/vibe.spec "기능"` | SPEC 작성 + GPT/Gemini 병렬 리서치 |
|
|
276
356
|
| `/vibe.spec.review` | SPEC 품질 리뷰 |
|
|
277
|
-
| `/vibe.run "기능"` | SPEC 기반 구현 +
|
|
357
|
+
| `/vibe.run "기능"` | SPEC 기반 구현 + 병렬 코드 리뷰 |
|
|
278
358
|
| `/vibe.verify "기능"` | SPEC 대비 BDD 검증 |
|
|
279
|
-
| `/vibe.review` |
|
|
359
|
+
| `/vibe.review` | 12개 에이전트 병렬 코드 리뷰 |
|
|
280
360
|
| `/vibe.trace "기능"` | 요구사항 추적성 매트릭스 |
|
|
281
361
|
| `/vibe.reason "문제"` | 체계적 추론 프레임워크 |
|
|
282
362
|
| `/vibe.analyze` | 프로젝트 분석 |
|
|
363
|
+
| `/vibe.event` | 이벤트 자동화 |
|
|
283
364
|
| `/vibe.utils` | 유틸리티 (E2E, 다이어그램, UI, 세션 복원) |
|
|
284
365
|
|
|
285
366
|
---
|
|
@@ -316,8 +397,8 @@ vibe help / version
|
|
|
316
397
|
|
|
317
398
|
| 프로바이더 | 우선순위 |
|
|
318
399
|
|-----------|---------|
|
|
319
|
-
| **GPT** |
|
|
320
|
-
| **Gemini** | gemini-cli 자동감지 →
|
|
400
|
+
| **GPT** | Codex CLI → API Key |
|
|
401
|
+
| **Gemini** | gemini-cli 자동감지 → API Key |
|
|
321
402
|
|
|
322
403
|
---
|
|
323
404
|
|
|
@@ -342,8 +423,8 @@ vibe help / version
|
|
|
342
423
|
```json
|
|
343
424
|
{
|
|
344
425
|
"credentials": {
|
|
345
|
-
"gpt": { "
|
|
346
|
-
"gemini": { "
|
|
426
|
+
"gpt": { "apiKey": "..." },
|
|
427
|
+
"gemini": { "apiKey": "..." }
|
|
347
428
|
},
|
|
348
429
|
"channels": {
|
|
349
430
|
"telegram": { "botToken": "...", "allowedChatIds": ["..."] },
|
|
@@ -367,14 +448,22 @@ vibe help / version
|
|
|
367
448
|
import { MemoryStorage, SessionRAGStore } from '@su-record/vibe/memory';
|
|
368
449
|
import { SwarmOrchestrator, PhasePipeline } from '@su-record/vibe/orchestrator';
|
|
369
450
|
import { findSymbol, validateCodeQuality } from '@su-record/vibe/tools';
|
|
451
|
+
|
|
452
|
+
// Agent-Lightning 패턴
|
|
453
|
+
import { InMemoryStorage, ComponentRegistry, createSpan } from '@su-record/vibe/tools';
|
|
370
454
|
```
|
|
371
455
|
|
|
372
456
|
| 서브패스 | 주요 export |
|
|
373
457
|
|---------|------------|
|
|
374
|
-
| `@su-record/vibe/
|
|
375
|
-
| `@su-record/vibe/memory` | `MemoryStorage`, `KnowledgeGraph`, `SessionRAGStore` |
|
|
458
|
+
| `@su-record/vibe/memory` | `MemoryStorage`, `IMemoryStorage`, `InMemoryStorage`, `KnowledgeGraph`, `SessionRAGStore` |
|
|
376
459
|
| `@su-record/vibe/orchestrator` | `SwarmOrchestrator`, `PhasePipeline`, `BackgroundManager` |
|
|
377
|
-
| `@su-record/vibe/tools` | `findSymbol`, `validateCodeQuality`, `
|
|
460
|
+
| `@su-record/vibe/tools` | `findSymbol`, `validateCodeQuality`, `createSpan`, `ComponentRegistry` 등 |
|
|
461
|
+
| `@su-record/vibe/tools/memory` | 메모리 도구 |
|
|
462
|
+
| `@su-record/vibe/tools/convention` | 코드 품질 도구 |
|
|
463
|
+
| `@su-record/vibe/tools/semantic` | 시맨틱 분석 도구 |
|
|
464
|
+
| `@su-record/vibe/tools/ui` | UI/UX 도구 |
|
|
465
|
+
| `@su-record/vibe/tools/interaction` | 사용자 상호작용 도구 |
|
|
466
|
+
| `@su-record/vibe/tools/time` | 시간 도구 |
|
|
378
467
|
|
|
379
468
|
---
|
|
380
469
|
|
|
@@ -392,18 +481,27 @@ your-project/
|
|
|
392
481
|
│ │ └── reports/ # 리뷰 리포트
|
|
393
482
|
│ └── skills/ # 로컬 + 외부 스킬
|
|
394
483
|
├── CLAUDE.md # 프로젝트 가이드 (자동 생성)
|
|
484
|
+
├── AGENTS.md # Codex CLI 가이드 (자동 생성)
|
|
395
485
|
└── ...
|
|
396
486
|
|
|
397
487
|
~/.vibe/config.json # 전역 설정 (인증, 채널, 모델)
|
|
488
|
+
~/.vibe/analytics/ # 텔레메트리 (로컬 JSONL)
|
|
489
|
+
│ ├── skill-usage.jsonl # 스킬 사용 기록
|
|
490
|
+
│ ├── spans.jsonl # 구조화된 스팬
|
|
491
|
+
│ └── decisions.jsonl # 의사결정 추적
|
|
398
492
|
~/.claude/
|
|
399
493
|
├── vibe/
|
|
400
494
|
│ ├── rules/ # 코딩 규칙
|
|
401
495
|
│ ├── skills/ # 전역 스킬
|
|
402
|
-
│
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
└──
|
|
496
|
+
│ └── ui-ux-data/ # UI/UX CSV 데이터
|
|
497
|
+
├── commands/ # 슬래시 명령어
|
|
498
|
+
└── agents/ # 에이전트 정의 (56개)
|
|
499
|
+
~/.codex/
|
|
500
|
+
└── plugins/vibe/ # Codex 플러그인
|
|
501
|
+
├── .codex-plugin/plugin.json
|
|
502
|
+
├── agents/
|
|
503
|
+
├── skills/
|
|
504
|
+
└── AGENTS.md
|
|
407
505
|
```
|
|
408
506
|
|
|
409
507
|
---
|
|
@@ -417,23 +515,26 @@ flowchart TD
|
|
|
417
515
|
C --> D["SmartRouter"]
|
|
418
516
|
|
|
419
517
|
D --> E["LLMCluster"]
|
|
420
|
-
E --> E1["GPT"]
|
|
421
|
-
E --> E2["
|
|
518
|
+
E --> E1["GPT-5.4 (추론)"]
|
|
519
|
+
E --> E2["Codex Spark (리뷰)"]
|
|
520
|
+
E --> E3["Gemini (리서치)"]
|
|
422
521
|
|
|
423
522
|
D --> F["PhasePipeline"]
|
|
424
523
|
F --> G["SwarmOrchestrator"]
|
|
425
524
|
G --> H["BackgroundManager"]
|
|
426
525
|
H --> I["AgentRegistry"]
|
|
427
526
|
|
|
428
|
-
D --> J["
|
|
429
|
-
J --> J1["
|
|
430
|
-
J --> J2["
|
|
431
|
-
J1 --> K["교차 검증 → P1/P2/P3"]
|
|
527
|
+
D --> J["병렬 리뷰"]
|
|
528
|
+
J --> J1["12개 Sonnet 리뷰 에이전트"]
|
|
529
|
+
J --> J2["/codex:review"]
|
|
530
|
+
J1 --> K["3중 교차 검증 → P1/P2/P3"]
|
|
432
531
|
J2 --> K
|
|
532
|
+
J --> J3["경계면 검증"]
|
|
433
533
|
|
|
434
534
|
L["Session RAG"] -.-> M["Decision / Constraint / Goal / Evidence"]
|
|
435
|
-
|
|
436
|
-
|
|
535
|
+
N["VibeSpan"] -.-> O["spans.jsonl (로컬 텔레메트리)"]
|
|
536
|
+
P["품질 게이트"] -.-> Q["pre-tool-guard → 차단"]
|
|
537
|
+
P -.-> R["code-check → 검증"]
|
|
437
538
|
```
|
|
438
539
|
|
|
439
540
|
---
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# QA Coordinator
|
|
2
|
+
|
|
3
|
+
<!-- QA Orchestrator Agent — routes changed code to appropriate QA agents -->
|
|
4
|
+
|
|
5
|
+
## Role
|
|
6
|
+
|
|
7
|
+
- Analyze code changes to determine which QA modalities are needed
|
|
8
|
+
- Dispatch QA agents in parallel based on change type
|
|
9
|
+
- Collect and synthesize results into a unified QA report
|
|
10
|
+
- Ensure feature readiness before dispatching (build passes, no syntax errors)
|
|
11
|
+
|
|
12
|
+
## Model
|
|
13
|
+
|
|
14
|
+
**Sonnet** — Balanced reasoning for routing decisions
|
|
15
|
+
|
|
16
|
+
## Execution Mode: Sub-Agent (Fan-out/Fan-in)
|
|
17
|
+
|
|
18
|
+
Dispatches multiple QA agents in parallel, collects results, synthesizes.
|
|
19
|
+
|
|
20
|
+
## Change Type → QA Agent Routing
|
|
21
|
+
|
|
22
|
+
| Change Type | Signal | QA Agents to Dispatch |
|
|
23
|
+
|-------------|--------|----------------------|
|
|
24
|
+
| **API/Backend** | `src/api/`, `src/services/`, `routes/`, `controllers/` | security-reviewer, edge-case-finder, performance-reviewer |
|
|
25
|
+
| **Frontend/UI** | `src/components/`, `src/pages/`, `*.tsx`, `*.vue` | ui-a11y-auditor, ux-compliance-reviewer, edge-case-finder |
|
|
26
|
+
| **Data/Schema** | `models/`, `migrations/`, `schema/`, `*.prisma` | data-integrity-reviewer, edge-case-finder, acceptance-tester |
|
|
27
|
+
| **Auth/Security** | `auth/`, `middleware/`, `session/`, `token/` | security-reviewer, edge-case-finder, e2e-tester |
|
|
28
|
+
| **State Machine** | state transitions, workflow, status changes | edge-case-finder, acceptance-tester, data-integrity-reviewer |
|
|
29
|
+
| **E2E Flow** | checkout, payment, multi-step form | e2e-tester, edge-case-finder, acceptance-tester |
|
|
30
|
+
| **Config/Infra** | `.env`, `config/`, `docker`, CI/CD | security-reviewer, architecture-reviewer |
|
|
31
|
+
|
|
32
|
+
## Workflow
|
|
33
|
+
|
|
34
|
+
### Phase 1: Readiness Check
|
|
35
|
+
|
|
36
|
+
Before dispatching any QA agent, verify:
|
|
37
|
+
|
|
38
|
+
1. **Build passes**: Run `npm run build` (or project equivalent) — if it fails, STOP and report build errors
|
|
39
|
+
2. **Changed files identified**: Use `git diff --name-only` to get the list of changed files
|
|
40
|
+
3. **Change type classified**: Match changed files against the routing table above
|
|
41
|
+
|
|
42
|
+
If build fails → return build errors immediately. Do not dispatch QA agents on broken code.
|
|
43
|
+
|
|
44
|
+
### Phase 2: Agent Dispatch (Parallel)
|
|
45
|
+
|
|
46
|
+
Based on classified change types, dispatch agents in a single message:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
Agent(subagent_type="edge-case-finder", model="haiku",
|
|
50
|
+
prompt="Analyze these changed files for edge cases: {file_list}. Read each file fully before analysis.",
|
|
51
|
+
run_in_background=true)
|
|
52
|
+
|
|
53
|
+
Agent(subagent_type="security-reviewer", model="haiku",
|
|
54
|
+
prompt="Security review for: {file_list}. Check OWASP Top 10. Read each file fully.",
|
|
55
|
+
run_in_background=true)
|
|
56
|
+
|
|
57
|
+
Agent(subagent_type="{other-agent}", model="haiku",
|
|
58
|
+
prompt="...",
|
|
59
|
+
run_in_background=true)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Rules:**
|
|
63
|
+
- Maximum 5 parallel agents (avoid context explosion)
|
|
64
|
+
- Always include `edge-case-finder` (catches what others miss)
|
|
65
|
+
- De-duplicate: if multiple change types route to the same agent, dispatch once with combined file list
|
|
66
|
+
- Each agent prompt MUST include the specific file list to review
|
|
67
|
+
|
|
68
|
+
### Phase 3: Result Collection & Synthesis
|
|
69
|
+
|
|
70
|
+
1. Wait for all agents to complete
|
|
71
|
+
2. Read each agent's output
|
|
72
|
+
3. Merge findings by priority:
|
|
73
|
+
- **P1 (Critical)**: Aggregate from all agents, de-duplicate
|
|
74
|
+
- **P2 (Important)**: Aggregate, de-duplicate
|
|
75
|
+
- **P3 (Nice-to-have)**: List briefly
|
|
76
|
+
4. Cross-reference: if multiple agents flag the same location, elevate confidence
|
|
77
|
+
|
|
78
|
+
### Phase 4: Unified Report
|
|
79
|
+
|
|
80
|
+
```markdown
|
|
81
|
+
## QA Coordinator Report
|
|
82
|
+
|
|
83
|
+
### Summary
|
|
84
|
+
- Changed files: {N}
|
|
85
|
+
- Change types: {list}
|
|
86
|
+
- QA agents dispatched: {N} ({agent names})
|
|
87
|
+
- Total findings: P1={N}, P2={N}, P3={N}
|
|
88
|
+
|
|
89
|
+
### Build Status
|
|
90
|
+
- [PASS/FAIL] Build check
|
|
91
|
+
|
|
92
|
+
### P1 Findings (Must Fix)
|
|
93
|
+
| # | Agent | Finding | Location | Recommendation |
|
|
94
|
+
|---|-------|---------|----------|----------------|
|
|
95
|
+
| 1 | security-reviewer | SQL injection risk | src/api/users.ts:42 | Use parameterized query |
|
|
96
|
+
| 2 | edge-case-finder | No null check | src/services/auth.ts:15 | Add validation |
|
|
97
|
+
|
|
98
|
+
### P2 Findings (Should Fix)
|
|
99
|
+
| # | Agent | Finding | Location | Recommendation |
|
|
100
|
+
|---|-------|---------|----------|----------------|
|
|
101
|
+
|
|
102
|
+
### P3 Findings (Consider)
|
|
103
|
+
- {brief list}
|
|
104
|
+
|
|
105
|
+
### Cross-Validated Findings
|
|
106
|
+
Findings flagged by 2+ agents (high confidence):
|
|
107
|
+
- {finding} — flagged by {agent1}, {agent2}
|
|
108
|
+
|
|
109
|
+
### Coverage Gaps
|
|
110
|
+
QA modalities NOT run (and why):
|
|
111
|
+
- {e.g., "e2e-tester: no E2E flow changes detected"}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Error Handling
|
|
115
|
+
|
|
116
|
+
| Situation | Strategy |
|
|
117
|
+
|-----------|----------|
|
|
118
|
+
| Agent fails | 1 retry. If fails again, note in report as "coverage gap" |
|
|
119
|
+
| Agent timeout | Use partial results if available, note in report |
|
|
120
|
+
| Build fails | Stop immediately, report build errors only |
|
|
121
|
+
| No changed files | Report "nothing to review" |
|
|
122
|
+
| All agents return P1=0 | Report clean status, still list what was checked |
|
|
123
|
+
|
|
124
|
+
## CRITICAL: NO DIRECT CODE FIXES
|
|
125
|
+
|
|
126
|
+
This agent coordinates and reports only. It does NOT:
|
|
127
|
+
- Modify source code
|
|
128
|
+
- Create fix PRs
|
|
129
|
+
- Write test files
|
|
130
|
+
|
|
131
|
+
It produces the QA report. Fixes are handled by the user or implementer agents.
|
package/commands/vibe.review.md
CHANGED
|
@@ -20,6 +20,16 @@ argument-hint: "PR number, branch name, or file path"
|
|
|
20
20
|
|
|
21
21
|
> **⏱️ Timer**: Call `getCurrentTime` tool at the START. Record the result as `{start_time}`.
|
|
22
22
|
|
|
23
|
+
## Codex Plugin Integration
|
|
24
|
+
|
|
25
|
+
> **Codex 플러그인 감지**: 워크플로우 시작 시 아래 명령으로 자동 감지.
|
|
26
|
+
>
|
|
27
|
+
> ```bash
|
|
28
|
+
> CODEX_AVAILABLE=$(node "{{VIBE_PATH}}/hooks/scripts/codex-detect.js" 2>/dev/null || echo "unavailable")
|
|
29
|
+
> ```
|
|
30
|
+
>
|
|
31
|
+
> `available`이면 `/codex:review`, `/codex:rescue` 자동 호출. `unavailable`이면 기존 GPT+Gemini Race 모드로 동작.
|
|
32
|
+
|
|
23
33
|
## Race Mode (v2.6.9)
|
|
24
34
|
|
|
25
35
|
**Multi-LLM competitive review** - Same review task runs on GPT + Gemini in parallel, results are cross-validated.
|
|
@@ -89,6 +99,25 @@ security-review:
|
|
|
89
99
|
- **Location**: `src/components/Comment.tsx:15`
|
|
90
100
|
```
|
|
91
101
|
|
|
102
|
+
### Codex Review (Codex 플러그인 활성화 시)
|
|
103
|
+
|
|
104
|
+
Race Mode에서 GPT+Gemini와 **동시에** Codex review 실행하여 3중 교차 검증:
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
/codex:review
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
교차 검증 테이블:
|
|
111
|
+
|
|
112
|
+
```markdown
|
|
113
|
+
| Issue | GPT | Gemini | Codex | Confidence |
|
|
114
|
+
|-------|-----|--------|-------|------------|
|
|
115
|
+
| {이슈} | ✅/❌ | ✅/❌ | ✅/❌ | {%} |
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
- 3개 모델 중 2개 이상 동의 → **High Confidence** (P1 자동 수정)
|
|
119
|
+
- Codex만 발견 → **Medium Confidence** (P2 수동 검토)
|
|
120
|
+
|
|
92
121
|
### When to Use Race Mode
|
|
93
122
|
|
|
94
123
|
| Scenario | Recommended |
|
|
@@ -257,6 +286,46 @@ Task(subagent_type="ui-antipattern-detector",
|
|
|
257
286
|
|
|
258
287
|
**⑦ Critical finding 에스컬레이션**: ui-a11y-auditor의 P1 finding은 Review Debate Team(Phase 4.5)에 자동 포함
|
|
259
288
|
|
|
289
|
+
### Phase 2.7: Boundary Mismatch Detection (Integration Coherence)
|
|
290
|
+
|
|
291
|
+
> **활성화 조건**: 변경된 파일 중 API route + 프론트엔드 훅/컴포넌트가 함께 존재
|
|
292
|
+
> 경계면 불일치는 개별 파일 리뷰로는 발견 불가 — **양쪽을 동시에 읽어야** 잡힘
|
|
293
|
+
|
|
294
|
+
**검증 방법: "양쪽 동시 읽기"**
|
|
295
|
+
|
|
296
|
+
반드시 **생산자와 소비자 코드를 동시에** Read하여 교차 비교한다.
|
|
297
|
+
|
|
298
|
+
| 검증 영역 | 생산자 (왼쪽) | 소비자 (오른쪽) | 검증 내용 |
|
|
299
|
+
|----------|-------------|---------------|----------|
|
|
300
|
+
| API ↔ 훅 타입 | route의 Response.json() shape | hooks의 fetch\<T\> 타입 | shape 일치, 래핑 unwrap, case 변환 |
|
|
301
|
+
| 라우팅 정합성 | src/app/ page 파일 경로 | href, router.push 값 | 경로 매칭, route group 처리, 동적 세그먼트 |
|
|
302
|
+
| 상태 전이 | STATE_TRANSITIONS 맵 | .update({ status }) 코드 | 죽은 전이, 무단 전이, 중간→최종 누락 |
|
|
303
|
+
| 데이터 흐름 | DB 스키마 필드명 | API 응답 → 프론트 타입 | 필드명 일치, optional 처리 일관성 |
|
|
304
|
+
|
|
305
|
+
**실행 방식 — 변경 파일 기반 자동 판별:**
|
|
306
|
+
|
|
307
|
+
```text
|
|
308
|
+
1. git diff에서 API route 파일과 대응 프론트 파일을 짝으로 매칭
|
|
309
|
+
2. 짝이 있는 경우 → 아래 4개 검증 실행
|
|
310
|
+
3. 짝이 없는 경우 (API만 또는 프론트만 변경) → "대응 파일 미변경" 경고 후 스킵
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
**검증 체크리스트:**
|
|
314
|
+
|
|
315
|
+
- [ ] API 응답 shape과 대응 훅의 제네릭 타입이 일치
|
|
316
|
+
- [ ] 래핑된 응답(`{ items: [...] }`)은 훅에서 unwrap하는지 확인
|
|
317
|
+
- [ ] snake_case ↔ camelCase 변환이 일관되게 적용
|
|
318
|
+
- [ ] 모든 API 엔드포인트에 대응하는 프론트 훅이 존재하고 실제 호출됨
|
|
319
|
+
- [ ] 코드 내 모든 href/router.push 값이 실제 page 파일 경로와 매칭
|
|
320
|
+
- [ ] 정의된 모든 상태 전이가 코드에서 실행됨 (죽은 전이 없음)
|
|
321
|
+
- [ ] 프론트에서 상태 기반 분기의 값이 실제 도달 가능한 상태
|
|
322
|
+
- [ ] DB 필드명 → API 응답 필드명 → 프론트 타입 정의 간 매핑 일관
|
|
323
|
+
|
|
324
|
+
**Findings 분류:**
|
|
325
|
+
- 경계면 불일치 → **P1** (런타임 에러의 주요 원인)
|
|
326
|
+
- 대응 파일 미존재 (API 있으나 훅 없음) → **P2**
|
|
327
|
+
- case 변환 비일관성 → **P2**
|
|
328
|
+
|
|
260
329
|
### Phase 3: Deep Analysis
|
|
261
330
|
|
|
262
331
|
After agent results:
|
|
@@ -408,6 +477,16 @@ P2 Important:
|
|
|
408
477
|
|
|
409
478
|
→ Manual handling instructions in Phase 6
|
|
410
479
|
|
|
480
|
+
### Auto-Fix 실패 시 Codex Rescue (Codex 플러그인 활성화 시)
|
|
481
|
+
|
|
482
|
+
P1/P2 auto-fix **3회 실패** 시, Codex에 위임:
|
|
483
|
+
|
|
484
|
+
```
|
|
485
|
+
/codex:rescue "Fix {priority} issue: {issue-description}. File: {file-path}"
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
Codex 수정 완료 후 해당 리뷰 에이전트가 재검증.
|
|
489
|
+
|
|
411
490
|
### Phase 6: Todo File Creation (Items Requiring Manual Handling)
|
|
412
491
|
|
|
413
492
|
Save **remaining** findings to `.claude/vibe/todos/`:
|