@su-record/vibe 2.7.20 → 2.7.22

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.
Files changed (122) hide show
  1. package/README.md +156 -57
  2. package/agents/qa/qa-coordinator.md +131 -0
  3. package/commands/vibe.review.md +79 -0
  4. package/commands/vibe.run.md +68 -9
  5. package/commands/vibe.spec.review.md +48 -8
  6. package/commands/vibe.verify.md +26 -0
  7. package/dist/cli/commands/init.d.ts.map +1 -1
  8. package/dist/cli/commands/init.js +4 -12
  9. package/dist/cli/commands/init.js.map +1 -1
  10. package/dist/cli/postinstall/claude-agents.d.ts.map +1 -1
  11. package/dist/cli/postinstall/claude-agents.js +1 -0
  12. package/dist/cli/postinstall/claude-agents.js.map +1 -1
  13. package/dist/cli/postinstall/codex-agents.d.ts +18 -6
  14. package/dist/cli/postinstall/codex-agents.d.ts.map +1 -1
  15. package/dist/cli/postinstall/codex-agents.js +78 -16
  16. package/dist/cli/postinstall/codex-agents.js.map +1 -1
  17. package/dist/cli/postinstall/constants.d.ts.map +1 -1
  18. package/dist/cli/postinstall/constants.js +17 -14
  19. package/dist/cli/postinstall/constants.js.map +1 -1
  20. package/dist/cli/postinstall/index.d.ts +1 -1
  21. package/dist/cli/postinstall/index.d.ts.map +1 -1
  22. package/dist/cli/postinstall/index.js +1 -1
  23. package/dist/cli/postinstall/index.js.map +1 -1
  24. package/dist/cli/postinstall/main.d.ts.map +1 -1
  25. package/dist/cli/postinstall/main.js +4 -8
  26. package/dist/cli/postinstall/main.js.map +1 -1
  27. package/dist/cli/postinstall.d.ts +1 -1
  28. package/dist/cli/postinstall.d.ts.map +1 -1
  29. package/dist/cli/postinstall.js +1 -1
  30. package/dist/cli/postinstall.js.map +1 -1
  31. package/dist/cli/types.d.ts +1 -0
  32. package/dist/cli/types.d.ts.map +1 -1
  33. package/dist/cli/utils/cli-detector.d.ts +1 -0
  34. package/dist/cli/utils/cli-detector.d.ts.map +1 -1
  35. package/dist/cli/utils/cli-detector.js +1 -0
  36. package/dist/cli/utils/cli-detector.js.map +1 -1
  37. package/dist/infra/lib/ComponentRegistry.d.ts +35 -0
  38. package/dist/infra/lib/ComponentRegistry.d.ts.map +1 -0
  39. package/dist/infra/lib/ComponentRegistry.js +59 -0
  40. package/dist/infra/lib/ComponentRegistry.js.map +1 -0
  41. package/dist/infra/lib/ReviewRace.d.ts.map +1 -1
  42. package/dist/infra/lib/ReviewRace.js +11 -7
  43. package/dist/infra/lib/ReviewRace.js.map +1 -1
  44. package/dist/infra/lib/__tests__/ComponentRegistry.test.d.ts +2 -0
  45. package/dist/infra/lib/__tests__/ComponentRegistry.test.d.ts.map +1 -0
  46. package/dist/infra/lib/__tests__/ComponentRegistry.test.js +99 -0
  47. package/dist/infra/lib/__tests__/ComponentRegistry.test.js.map +1 -0
  48. package/dist/infra/lib/evolution/DescriptionOptimizer.d.ts +45 -0
  49. package/dist/infra/lib/evolution/DescriptionOptimizer.d.ts.map +1 -1
  50. package/dist/infra/lib/evolution/DescriptionOptimizer.js +151 -0
  51. package/dist/infra/lib/evolution/DescriptionOptimizer.js.map +1 -1
  52. package/dist/infra/lib/evolution/__tests__/eval.test.js +64 -0
  53. package/dist/infra/lib/evolution/__tests__/eval.test.js.map +1 -1
  54. package/dist/infra/lib/gpt/chat.d.ts.map +1 -1
  55. package/dist/infra/lib/gpt/chat.js +8 -0
  56. package/dist/infra/lib/gpt/chat.js.map +1 -1
  57. package/dist/infra/lib/gpt/specializations.d.ts.map +1 -1
  58. package/dist/infra/lib/gpt/specializations.js +5 -0
  59. package/dist/infra/lib/gpt/specializations.js.map +1 -1
  60. package/dist/infra/lib/llm-availability.d.ts +21 -0
  61. package/dist/infra/lib/llm-availability.d.ts.map +1 -0
  62. package/dist/infra/lib/llm-availability.js +57 -0
  63. package/dist/infra/lib/llm-availability.js.map +1 -0
  64. package/dist/infra/lib/memory/IMemoryStorage.d.ts +16 -0
  65. package/dist/infra/lib/memory/IMemoryStorage.d.ts.map +1 -0
  66. package/dist/infra/lib/memory/IMemoryStorage.js +7 -0
  67. package/dist/infra/lib/memory/IMemoryStorage.js.map +1 -0
  68. package/dist/infra/lib/memory/InMemoryStorage.d.ts +13 -0
  69. package/dist/infra/lib/memory/InMemoryStorage.d.ts.map +1 -0
  70. package/dist/infra/lib/memory/InMemoryStorage.js +44 -0
  71. package/dist/infra/lib/memory/InMemoryStorage.js.map +1 -0
  72. package/dist/infra/lib/memory/MemoryStorage.d.ts +2 -1
  73. package/dist/infra/lib/memory/MemoryStorage.d.ts.map +1 -1
  74. package/dist/infra/lib/memory/MemoryStorage.js.map +1 -1
  75. package/dist/infra/lib/memory/__tests__/InMemoryStorage.test.d.ts +2 -0
  76. package/dist/infra/lib/memory/__tests__/InMemoryStorage.test.d.ts.map +1 -0
  77. package/dist/infra/lib/memory/__tests__/InMemoryStorage.test.js +114 -0
  78. package/dist/infra/lib/memory/__tests__/InMemoryStorage.test.js.map +1 -0
  79. package/dist/infra/lib/memory/index.d.ts +2 -0
  80. package/dist/infra/lib/memory/index.d.ts.map +1 -1
  81. package/dist/infra/lib/memory/index.js +1 -0
  82. package/dist/infra/lib/memory/index.js.map +1 -1
  83. package/dist/infra/lib/telemetry/SkillTelemetry.d.ts +8 -0
  84. package/dist/infra/lib/telemetry/SkillTelemetry.d.ts.map +1 -1
  85. package/dist/infra/lib/telemetry/SkillTelemetry.js +40 -0
  86. package/dist/infra/lib/telemetry/SkillTelemetry.js.map +1 -1
  87. package/dist/infra/lib/telemetry/SkillTelemetry.test.js +33 -0
  88. package/dist/infra/lib/telemetry/SkillTelemetry.test.js.map +1 -1
  89. package/dist/infra/lib/telemetry/VibeSpan.d.ts +20 -0
  90. package/dist/infra/lib/telemetry/VibeSpan.d.ts.map +1 -0
  91. package/dist/infra/lib/telemetry/VibeSpan.js +26 -0
  92. package/dist/infra/lib/telemetry/VibeSpan.js.map +1 -0
  93. package/dist/infra/orchestrator/MultiLlmResearch.d.ts.map +1 -1
  94. package/dist/infra/orchestrator/MultiLlmResearch.js +49 -40
  95. package/dist/infra/orchestrator/MultiLlmResearch.js.map +1 -1
  96. package/dist/infra/orchestrator/SmartRouter.d.ts.map +1 -1
  97. package/dist/infra/orchestrator/SmartRouter.js +4 -3
  98. package/dist/infra/orchestrator/SmartRouter.js.map +1 -1
  99. package/dist/infra/orchestrator/types.d.ts +8 -0
  100. package/dist/infra/orchestrator/types.d.ts.map +1 -1
  101. package/dist/infra/orchestrator/types.js +36 -0
  102. package/dist/infra/orchestrator/types.js.map +1 -1
  103. package/dist/tools/index.d.ts +6 -0
  104. package/dist/tools/index.d.ts.map +1 -1
  105. package/dist/tools/index.js +5 -0
  106. package/dist/tools/index.js.map +1 -1
  107. package/hooks/hooks.json +4 -0
  108. package/hooks/scripts/codex-detect.js +46 -0
  109. package/hooks/scripts/codex-review-gate.js +80 -0
  110. package/hooks/scripts/llm-orchestrate.js +9 -5
  111. package/package.json +1 -1
  112. package/skills/arch-guard/SKILL.md +1 -1
  113. package/skills/brand-assets/SKILL.md +1 -1
  114. package/skills/capability-loop/SKILL.md +1 -1
  115. package/skills/characterization-test/SKILL.md +1 -1
  116. package/skills/commerce-patterns/SKILL.md +1 -1
  117. package/skills/e2e-commerce/SKILL.md +1 -1
  118. package/skills/exec-plan/SKILL.md +1 -1
  119. package/skills/parallel-research/SKILL.md +1 -1
  120. package/skills/seo-checklist/SKILL.md +1 -1
  121. package/skills/ui-ux-pro-max/SKILL.md +1 -1
  122. package/skills/video-production/SKILL.md +1 -1
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # VIBE — AI Coding Framework for Claude Code
1
+ # VIBE — AI Coding Framework
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/@su-record/vibe)](https://www.npmjs.com/package/@su-record/vibe)
4
4
  [![npm downloads](https://img.shields.io/npm/dt/@su-record/vibe.svg?style=flat-square&color=blue)](https://www.npmjs.com/package/@su-record/vibe)
@@ -6,7 +6,9 @@
6
6
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.5+-blue)](https://www.typescriptlang.org/)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
8
 
9
- **설치 한 줄로 Claude Code에 53개 에이전트, 43+ 도구, 멀티 LLM 오케스트레이션을 더합니다.**
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
- | 리뷰 없이 머지 | 12개 에이전트 병렬 리뷰 |
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. **자동 리뷰** — 12개 전문 에이전트 병렬 검토, P1/P2 자동 수정
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
- ## 에이전트 (53개)
103
+ ## 에이전트 (56개)
66
104
 
67
105
  ### 메인 에이전트 (19)
68
106
 
@@ -87,48 +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
- ### 리서치 & QA (10)
91
-
92
- Best Practices, Framework Docs, Codebase Patterns, Security Advisory, Requirements Analyst, UX Advisor, Acceptance Tester, Edge Case Finder, API Documenter, Changelog Writer
93
-
94
- ### 이벤트 에이전트 (6)
128
+ ### QA & 리서치 (11)
95
129
 
96
- Event Listener, Event Trigger, Event Filter, Event Logger, Event Scheduler, Event Aggregator
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 |
97
135
 
98
- ### 에이전트 (9팀)
136
+ QA Coordinator는 변경된 코드를 분석하여 적절한 QA 에이전트를 병렬 디스패치하고, 통합 QA 리포트를 생성합니다.
99
137
 
100
- 에이전트가 팀을 구성하여 공유 태스크 리스트로 협업합니다.
138
+ ### 이벤트 에이전트 (6)
101
139
 
102
- | | 트리거 | 멤버 |
103
- |----|--------|------|
104
- | Lite | `/vibe.run` 일반 | architect, implementer, tester |
105
- | Dev | `/vibe.run` ULTRAWORK | + security-reviewer |
106
- | Research | `/vibe.spec` | 4개 리서치 에이전트 |
107
- | Review Debate | `/vibe.review` | security, architecture, performance, simplicity |
108
- | Debug | `/vibe.run` 실패 | architect, implementer, tester |
109
- | Security | `/vibe.run` 보안 | security, data-integrity, security-advisory, tester |
110
- | Migration | `/vibe.run` 마이그레이션 | + build-error-resolver |
111
- | Fullstack | `/vibe.run` 풀스택 | frontend + backend implementer |
112
- | SPEC Debate | `/vibe.spec.review` | 동일 |
140
+ Event Content, Event Image, Event Speaker, Event Ops, Event Comms, Event Scheduler
113
141
 
114
142
  ---
115
143
 
116
144
  ## 멀티 LLM 오케스트레이션
117
145
 
118
- | 프로바이더 | 역할 | 인증 |
119
- |-----------|------|------|
120
- | **Claude** | 오케스트레이션, 코드 생성 | 내장 (Claude Code) |
121
- | **GPT** | 아키텍처, 디버깅, 교차 리뷰 | Codex CLI / API Key |
122
- | **Gemini** | UI/UX, 검색, 음성, 리서치 | gemini-cli / API Key |
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 |
123
153
 
124
- ### SmartRouter
154
+ ### 동적 모델 라우팅
125
155
 
126
- 작업 유형별 자동 라우팅. 프로바이더는 CLI 위임 방식으로 호출합니다 (Codex CLI, gemini-cli).
156
+ Codex/Gemini 활성화 상태에 따라 자동 스위칭. 기본은 Claude만으로 동작.
127
157
 
128
- | 작업 유형 | 우선순위 |
129
- |----------|---------|
130
- | 코드 분석, 리뷰, 추론, 아키텍처 | GPT Gemini Claude |
131
- | UI/UX, 웹 검색 | Gemini GPT Claude |
158
+ | 상태 | 동작 |
159
+ |------|------|
160
+ | **Claude only** | Opus(설계/판단) + Sonnet(리뷰/구현) + Haiku(탐색) |
161
+ | **+Codex** | 구현→5.3-Codex, 리뷰→Spark, 추론→5.4 스위칭 |
162
+ | **+Gemini** | 리서치/리뷰에 Gemini 병렬 추가 |
163
+ | **+Codex +Gemini** | 풀 오케스트레이션 (7개 모델) |
132
164
 
133
165
  ---
134
166
 
@@ -150,6 +182,58 @@ ULTRAWORK 모드에서 다음 Phase의 `prepare()`를 병렬 실행.
150
182
 
151
183
  ---
152
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
+
153
237
  ## Session RAG
154
238
 
155
239
  SQLite + FTS5 하이브리드 검색으로 세션 간 컨텍스트를 유지합니다.
@@ -166,22 +250,21 @@ SQLite + FTS5 하이브리드 검색으로 세션 간 컨텍스트를 유지합
166
250
 
167
251
  ## 스킬
168
252
 
169
- ### 내장 스킬
253
+ ### 내장 스킬 (26개)
170
254
 
171
255
  에이전트가 활용하는 도메인별 스킬 모듈입니다. 스택 감지 결과에 따라 자동 설치됩니다.
172
256
 
173
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
174
258
 
175
- **프론트엔드**: Frontend Design, UI/UX Pro Max, Brand Assets, SEO Checklist, Vercel React Best Practices
259
+ **프론트엔드**: Frontend Design, UI/UX Pro Max, Brand Assets, SEO Checklist
176
260
 
177
- **도메인**: Commerce Patterns, E2E Commerce, Video Production, TypeScript Advanced Types
261
+ **도메인**: Commerce Patterns, E2E Commerce, Video Production
178
262
 
179
263
  ### 외부 스킬 (skills.sh)
180
264
 
181
265
  [skills.sh](https://skills.sh) 에코시스템의 외부 스킬을 설치할 수 있습니다.
182
266
 
183
267
  ```bash
184
- # 수동 설치
185
268
  vibe skills add vercel-labs/next-skills
186
269
  ```
187
270
 
@@ -192,8 +275,6 @@ vibe skills add vercel-labs/next-skills
192
275
  | `typescript-react` | `vercel-labs/agent-skills` |
193
276
  | `typescript-nextjs` | `vercel-labs/agent-skills`, `vercel-labs/next-skills` |
194
277
 
195
- 설치된 패키지는 `.claude/vibe/config.json`의 `installedExternalSkills`로 추적되어 중복 설치를 방지합니다.
196
-
197
278
  ---
198
279
 
199
280
  ## 25개 프레임워크 지원
@@ -239,7 +320,8 @@ vibe skills add vercel-labs/next-skills
239
320
  | 가드레일 | 메커니즘 |
240
321
  |----------|---------|
241
322
  | **타입 안전성** | Quality Gate — `any`, `@ts-ignore` 차단 |
242
- | **코드 리뷰** | 12개 전문 에이전트 병렬 리뷰 |
323
+ | **코드 리뷰** | 12개 Sonnet 에이전트 병렬 리뷰 + Codex 3중 교차 검증 |
324
+ | **경계면 검증** | API↔프론트엔드 타입/라우팅/상태 정합성 자동 검증 |
243
325
  | **완성도** | Ralph Loop — 100%까지 반복 (범위 축소 없음) |
244
326
  | **수렴 보장** | Convergence — P1=0이면 완료, 반복 시 범위 축소 |
245
327
  | **스코프 보호** | pre-tool-guard — 요청 범위 외 수정 방지 |
@@ -262,7 +344,7 @@ vibe skills add vercel-labs/next-skills
262
344
  | UserPromptSubmit | `keyword-detector.js` | 매직 키워드 감지 |
263
345
  | Notification | `context-save.js` | 컨텍스트 80/90/95% 자동 저장 |
264
346
 
265
- 추가: `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`
266
348
 
267
349
  ---
268
350
 
@@ -366,13 +448,16 @@ vibe help / version
366
448
  import { MemoryStorage, SessionRAGStore } from '@su-record/vibe/memory';
367
449
  import { SwarmOrchestrator, PhasePipeline } from '@su-record/vibe/orchestrator';
368
450
  import { findSymbol, validateCodeQuality } from '@su-record/vibe/tools';
451
+
452
+ // Agent-Lightning 패턴
453
+ import { InMemoryStorage, ComponentRegistry, createSpan } from '@su-record/vibe/tools';
369
454
  ```
370
455
 
371
456
  | 서브패스 | 주요 export |
372
457
  |---------|------------|
373
- | `@su-record/vibe/memory` | `MemoryStorage`, `KnowledgeGraph`, `SessionRAGStore` |
458
+ | `@su-record/vibe/memory` | `MemoryStorage`, `IMemoryStorage`, `InMemoryStorage`, `KnowledgeGraph`, `SessionRAGStore` |
374
459
  | `@su-record/vibe/orchestrator` | `SwarmOrchestrator`, `PhasePipeline`, `BackgroundManager` |
375
- | `@su-record/vibe/tools` | `findSymbol`, `validateCodeQuality`, `saveMemory` 등 |
460
+ | `@su-record/vibe/tools` | `findSymbol`, `validateCodeQuality`, `createSpan`, `ComponentRegistry` 등 |
376
461
  | `@su-record/vibe/tools/memory` | 메모리 도구 |
377
462
  | `@su-record/vibe/tools/convention` | 코드 품질 도구 |
378
463
  | `@su-record/vibe/tools/semantic` | 시맨틱 분석 도구 |
@@ -396,18 +481,27 @@ your-project/
396
481
  │ │ └── reports/ # 리뷰 리포트
397
482
  │ └── skills/ # 로컬 + 외부 스킬
398
483
  ├── CLAUDE.md # 프로젝트 가이드 (자동 생성)
484
+ ├── AGENTS.md # Codex CLI 가이드 (자동 생성)
399
485
  └── ...
400
486
 
401
487
  ~/.vibe/config.json # 전역 설정 (인증, 채널, 모델)
488
+ ~/.vibe/analytics/ # 텔레메트리 (로컬 JSONL)
489
+ │ ├── skill-usage.jsonl # 스킬 사용 기록
490
+ │ ├── spans.jsonl # 구조화된 스팬
491
+ │ └── decisions.jsonl # 의사결정 추적
402
492
  ~/.claude/
403
493
  ├── vibe/
404
494
  │ ├── rules/ # 코딩 규칙
405
495
  │ ├── skills/ # 전역 스킬
406
- ├── ui-ux-data/ # UI/UX CSV 데이터
407
- │ ├── session-rag.db # Session RAG (SQLite + FTS5)
408
- │ └── memories.json # 저장된 메모리
496
+ └── ui-ux-data/ # UI/UX CSV 데이터
409
497
  ├── commands/ # 슬래시 명령어
410
- └── agents/ # 에이전트 정의 (53개)
498
+ └── agents/ # 에이전트 정의 (56개)
499
+ ~/.codex/
500
+ └── plugins/vibe/ # Codex 플러그인
501
+ ├── .codex-plugin/plugin.json
502
+ ├── agents/
503
+ ├── skills/
504
+ └── AGENTS.md
411
505
  ```
412
506
 
413
507
  ---
@@ -421,8 +515,9 @@ flowchart TD
421
515
  C --> D["SmartRouter"]
422
516
 
423
517
  D --> E["LLMCluster"]
424
- E --> E1["GPT"]
425
- E --> E2["Gemini"]
518
+ E --> E1["GPT-5.4 (추론)"]
519
+ E --> E2["Codex Spark (리뷰)"]
520
+ E --> E3["Gemini (리서치)"]
426
521
 
427
522
  D --> F["PhasePipeline"]
428
523
  F --> G["SwarmOrchestrator"]
@@ -430,12 +525,16 @@ flowchart TD
430
525
  H --> I["AgentRegistry"]
431
526
 
432
527
  D --> J["병렬 리뷰"]
433
- J --> J1["12개 리뷰 에이전트"]
434
- J1 --> K["P1/P2/P3 분류"]
528
+ J --> J1["12개 Sonnet 리뷰 에이전트"]
529
+ J --> J2["/codex:review"]
530
+ J1 --> K["3중 교차 검증 → P1/P2/P3"]
531
+ J2 --> K
532
+ J --> J3["경계면 검증"]
435
533
 
436
534
  L["Session RAG"] -.-> M["Decision / Constraint / Goal / Evidence"]
437
- O["품질 게이트"] -.-> P["pre-tool-guard 차단"]
438
- O -.-> Q["code-check검증"]
535
+ N["VibeSpan"] -.-> O["spans.jsonl (로컬 텔레메트리)"]
536
+ P["품질 게이트"] -.-> Q["pre-tool-guard차단"]
537
+ P -.-> R["code-check → 검증"]
439
538
  ```
440
539
 
441
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.
@@ -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/`: