@su-record/vibe 2.6.8 â 2.6.10
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 +42 -1
- package/commands/vibe.review.md +86 -0
- package/commands/vibe.run.md +43 -49
- package/commands/vibe.spec.review.md +57 -38
- package/dist/cli/postinstall.js +7 -7
- package/dist/lib/ReviewRace.d.ts +82 -0
- package/dist/lib/ReviewRace.d.ts.map +1 -0
- package/dist/lib/ReviewRace.js +446 -0
- package/dist/lib/ReviewRace.js.map +1 -0
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -40,7 +40,7 @@ vibe init
|
|
|
40
40
|
| `/vibe.run "feature" ultrawork` | Maximum performance mode |
|
|
41
41
|
| `/vibe.verify "feature"` | BDD verification |
|
|
42
42
|
| `/vibe.trace "feature"` | Requirements traceability matrix (v2.6) |
|
|
43
|
-
| `/vibe.review` | 13+ agent parallel review |
|
|
43
|
+
| `/vibe.review` | 13+ agent parallel review (`--race` for GPT+Gemini) |
|
|
44
44
|
| `/vibe.analyze` | Code analysis |
|
|
45
45
|
| `/vibe.reason "problem"` | Systematic reasoning |
|
|
46
46
|
| `/vibe.utils --ui` | UI preview (Gemini image / ASCII fallback) |
|
|
@@ -58,6 +58,7 @@ vibe init
|
|
|
58
58
|
|
|
59
59
|
| Feature | Description |
|
|
60
60
|
|---------|-------------|
|
|
61
|
+
| **Race Review (v2.6.9)** | GPT + Gemini parallel review with cross-validation |
|
|
61
62
|
| **Fire-and-Forget Agents (v2.6)** | Non-blocking background execution with instant handle return |
|
|
62
63
|
| **Phase Pipelining (v2.6)** | Prepare next phase during current execution |
|
|
63
64
|
| **PRD-to-SPEC Automation (v2.6)** | Auto-generate SPEC from PRD documents |
|
|
@@ -274,6 +275,46 @@ During `/vibe.spec`, research agents use **3 LLM perspectives** for quality assu
|
|
|
274
275
|
|
|
275
276
|
> vibe = Quality Assurance Framework
|
|
276
277
|
|
|
278
|
+
## Race Review (v2.6.9)
|
|
279
|
+
|
|
280
|
+
**Multi-LLM competitive review** - Same task runs on GPT + Gemini in parallel, results cross-validated:
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
/vibe.review --race # All review types
|
|
284
|
+
/vibe.review --race security # Security only
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
**Cross-validation confidence:**
|
|
288
|
+
|
|
289
|
+
| Agreement | Priority | Action |
|
|
290
|
+
|-------------------|----------|-------------------------|
|
|
291
|
+
| Both agree (100%) | P1 | High confidence finding |
|
|
292
|
+
| One model (50%) | P2 | Needs verification |
|
|
293
|
+
|
|
294
|
+
**Output:**
|
|
295
|
+
|
|
296
|
+
```text
|
|
297
|
+
đ RACE REVIEW
|
|
298
|
+
ââ GPT: [SQL injection, XSS]
|
|
299
|
+
ââ Gemini: [SQL injection, CSRF]
|
|
300
|
+
â
|
|
301
|
+
Cross-validation:
|
|
302
|
+
- SQL injection (2/2) â đ´ P1 (100%)
|
|
303
|
+
- XSS (1/2) â đĄ P2 (50%)
|
|
304
|
+
- CSRF (1/2) â đĄ P2 (50%)
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
**ULTRAWORK default:** Race review is automatically enabled in ULTRAWORK mode.
|
|
308
|
+
|
|
309
|
+
**API usage:**
|
|
310
|
+
|
|
311
|
+
```javascript
|
|
312
|
+
import('@su-record/vibe/tools').then(t =>
|
|
313
|
+
t.raceReview({ reviewType: 'security', code: 'CODE' })
|
|
314
|
+
.then(r => console.log(t.formatRaceResult(r)))
|
|
315
|
+
)
|
|
316
|
+
```
|
|
317
|
+
|
|
277
318
|
## Parallel Review Agents
|
|
278
319
|
|
|
279
320
|
`/vibe.review` runs 13+ agents concurrently:
|
package/commands/vibe.review.md
CHANGED
|
@@ -14,6 +14,92 @@ argument-hint: "PR number, branch name, or file path"
|
|
|
14
14
|
/vibe.review PR#123 # Review specific PR
|
|
15
15
|
/vibe.review feature/login # Review specific branch
|
|
16
16
|
/vibe.review src/api/ # Review specific path
|
|
17
|
+
/vibe.review --race # Multi-LLM race mode (GPT + Gemini)
|
|
18
|
+
/vibe.review --race security # Race mode for specific review type
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Race Mode (v2.6.9)
|
|
22
|
+
|
|
23
|
+
**Multi-LLM competitive review** - Same review task runs on GPT + Gemini in parallel, results are cross-validated.
|
|
24
|
+
|
|
25
|
+
### How It Works
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
/vibe.review --race
|
|
29
|
+
|
|
30
|
+
security-review:
|
|
31
|
+
ââ GPT-5.2-Codex â [SQL injection, XSS]
|
|
32
|
+
ââ Gemini-3-Flash â [SQL injection, CSRF]
|
|
33
|
+
â
|
|
34
|
+
Cross-validation:
|
|
35
|
+
- SQL injection (2/2) â đ´ P1 (100% confidence)
|
|
36
|
+
- XSS (1/2) â đĄ P2 (50% confidence)
|
|
37
|
+
- CSRF (1/2) â đĄ P2 (50% confidence)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Confidence-Based Priority
|
|
41
|
+
|
|
42
|
+
| Confidence | Priority | Meaning |
|
|
43
|
+
|------------|----------|---------|
|
|
44
|
+
| 100% (2/2) | P1 | Both models agree - high confidence |
|
|
45
|
+
| 50% (1/2) | P2 | One model found - needs verification |
|
|
46
|
+
|
|
47
|
+
### Race Mode Options
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
/vibe.review --race # All review types
|
|
51
|
+
/vibe.review --race security # Security only
|
|
52
|
+
/vibe.review --race performance # Performance only
|
|
53
|
+
/vibe.review --race architecture # Architecture only
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Race Mode Output
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
## SECURITY Review (Race Mode)
|
|
60
|
+
|
|
61
|
+
**Duration**: 3420ms
|
|
62
|
+
**Models**: GPT-5.2-Codex, Gemini-3-Flash
|
|
63
|
+
|
|
64
|
+
### Model Results
|
|
65
|
+
|
|
66
|
+
| Model | Issues Found | Duration | Status |
|
|
67
|
+
|-------|--------------|----------|--------|
|
|
68
|
+
| gpt | 3 | 1823ms | OK |
|
|
69
|
+
| gemini | 2 | 2156ms | OK |
|
|
70
|
+
|
|
71
|
+
### Cross-Validated Issues
|
|
72
|
+
|
|
73
|
+
**Summary**: 4 issues (P1: 1, P2: 2, P3: 1)
|
|
74
|
+
**Consensus Rate**: 75%
|
|
75
|
+
|
|
76
|
+
#### đ´ P1 - SQL Injection in user query
|
|
77
|
+
|
|
78
|
+
- **Confidence**: 100% (gpt, gemini)
|
|
79
|
+
- **Severity**: critical
|
|
80
|
+
- **Location**: `src/api/users.ts:42`
|
|
81
|
+
- **Suggestion**: Use parameterized queries
|
|
82
|
+
|
|
83
|
+
#### đĄ P2 - XSS vulnerability in render
|
|
84
|
+
|
|
85
|
+
- **Confidence**: 50% (gpt)
|
|
86
|
+
- **Severity**: high
|
|
87
|
+
- **Location**: `src/components/Comment.tsx:15`
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### When to Use Race Mode
|
|
91
|
+
|
|
92
|
+
| Scenario | Recommended |
|
|
93
|
+
|----------|-------------|
|
|
94
|
+
| Critical security review | â
`--race security` |
|
|
95
|
+
| Pre-production audit | â
`--race` |
|
|
96
|
+
| Quick iteration | â Standard review |
|
|
97
|
+
| API cost concerns | â Standard review |
|
|
98
|
+
|
|
99
|
+
### Tool Invocation (Race Mode)
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
node -e "import('@su-record/vibe/lib/ReviewRace').then(r => r.raceReview({reviewType: 'security', code: 'CODE_HERE'}).then(res => console.log(r.formatRaceResult(res))))"
|
|
17
103
|
```
|
|
18
104
|
|
|
19
105
|
## Priority System
|
package/commands/vibe.run.md
CHANGED
|
@@ -122,6 +122,7 @@ When you include `ultrawork` (or `ulw`), ALL of these activate automatically:
|
|
|
122
122
|
| **No Pause** | Doesn't wait for confirmation between phases |
|
|
123
123
|
| **External LLMs** | Auto-consults GPT/Gemini if enabled |
|
|
124
124
|
| **Error Recovery** | Auto-retries on failure (up to 3 times) |
|
|
125
|
+
| **Race Review (v2.6.9)** | Multi-LLM review (GPT+Gemini) with cross-validation |
|
|
125
126
|
|
|
126
127
|
### Boulder Loop (Inspired by Sisyphus)
|
|
127
128
|
|
|
@@ -864,83 +865,76 @@ node hooks/scripts/generate-brand-assets.js \
|
|
|
864
865
|
|
|
865
866
|
---
|
|
866
867
|
|
|
867
|
-
### 5.
|
|
868
|
+
### 5. Race Code Review (GPT + Gemini) + Auto-Fix (v2.6.9)
|
|
868
869
|
|
|
869
|
-
After all scenarios are implemented, **Gemini
|
|
870
|
+
After all scenarios are implemented, **GPT and Gemini review in parallel with cross-validation**:
|
|
871
|
+
|
|
872
|
+
> **ULTRAWORK Default**: In ULTRAWORK mode, race review is automatically enabled.
|
|
870
873
|
|
|
871
874
|
```
|
|
872
875
|
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
|
|
873
|
-
|
|
876
|
+
đ RACE CODE REVIEW (GPT + Gemini)
|
|
874
877
|
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
|
|
875
878
|
|
|
876
|
-
[Step 1]
|
|
877
|
-
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
â
|
|
883
|
-
|
|
884
|
-
â
|
|
885
|
-
â
|
|
886
|
-
â
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
[Step 3] Auto-fixing based on feedback...
|
|
897
|
-
â
auth.service.ts:24 - Applied timingSafeEqual
|
|
898
|
-
â
auth.controller.ts:15 - Added rate limiter
|
|
899
|
-
â
auth.service.ts:42 - Extracted constant
|
|
879
|
+
[Step 1] Parallel review execution...
|
|
880
|
+
ââ GPT-5.2-Codex: Reviewing...
|
|
881
|
+
ââ Gemini-3-Flash: Reviewing...
|
|
882
|
+
|
|
883
|
+
[Step 2] Cross-validation results:
|
|
884
|
+
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
|
|
885
|
+
â Issue â GPT â Gemini â Confidenceâ
|
|
886
|
+
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
|
|
887
|
+
â Timing attack in password â â
â â
â 100% â P1 â
|
|
888
|
+
â Rate limiting missing â â
â â
â 100% â P1 â
|
|
889
|
+
â Magic number usage â â
â â â 50% â P2 â
|
|
890
|
+
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
|
|
891
|
+
|
|
892
|
+
Summary: 3 issues (P1: 2, P2: 1)
|
|
893
|
+
|
|
894
|
+
[Step 3] Auto-fixing P1/P2 issues...
|
|
895
|
+
â
auth.service.ts:24 - Applied timingSafeEqual (P1)
|
|
896
|
+
â
auth.controller.ts:15 - Added rate limiter (P1)
|
|
897
|
+
â
auth.service.ts:42 - Extracted constant (P2)
|
|
900
898
|
|
|
901
899
|
[Step 4] Re-verifying...
|
|
902
900
|
â
Build succeeded
|
|
903
901
|
â
Tests passed
|
|
904
902
|
|
|
905
903
|
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
|
|
906
|
-
â
|
|
904
|
+
â
Race review complete! 3 improvements (2 P1, 1 P2)
|
|
907
905
|
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
|
|
908
906
|
```
|
|
909
907
|
|
|
910
|
-
**
|
|
911
|
-
|
|
912
|
-
When Gemini is enabled, **must** use global hook script for code review:
|
|
908
|
+
**Race Review Invocation:**
|
|
913
909
|
|
|
914
910
|
```bash
|
|
915
|
-
#
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
node "$VIBE_SCRIPTS/llm-orchestrate.js" gemini orchestrate-json "Review this code for security, performance, best-practices: [code summary]. SPEC: [summary]. Scenarios: [list]"
|
|
911
|
+
# Via vibe tools
|
|
912
|
+
node -e "import('@su-record/vibe/tools').then(t => t.raceReview({reviewType: 'security', code: '[code]'}).then(r => console.log(t.formatRaceResult(r))))"
|
|
919
913
|
```
|
|
920
914
|
|
|
921
|
-
**
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
915
|
+
**Confidence-based Priority:**
|
|
916
|
+
|
|
917
|
+
| Confidence | Priority | Action |
|
|
918
|
+
|------------|----------|--------|
|
|
919
|
+
| 100% (2/2) | P1 | Auto-fix immediately |
|
|
920
|
+
| 50% (1/2) | P2 | Auto-fix with review |
|
|
927
921
|
|
|
928
922
|
**Fallback handling:**
|
|
929
|
-
-
|
|
930
|
-
-
|
|
923
|
+
- If one LLM fails â Use single LLM result (reduced confidence)
|
|
924
|
+
- If both fail â Skip and proceed (log warning)
|
|
931
925
|
|
|
932
926
|
**Review application rules:**
|
|
933
927
|
|
|
934
928
|
| Feedback Type | Action |
|
|
935
929
|
|---------------|--------|
|
|
936
|
-
| Security vulnerability | Auto-fix immediately |
|
|
937
|
-
| Performance improvement | Auto-fix immediately |
|
|
938
|
-
| Best practices | Auto-fix |
|
|
939
|
-
| Style/preference | Apply selectively
|
|
930
|
+
| Security vulnerability (P1) | Auto-fix immediately |
|
|
931
|
+
| Performance improvement (P1/P2) | Auto-fix immediately |
|
|
932
|
+
| Best practices (P2) | Auto-fix |
|
|
933
|
+
| Style/preference (P3) | Apply selectively |
|
|
940
934
|
|
|
941
935
|
**Conditions:**
|
|
942
|
-
-
|
|
943
|
-
-
|
|
936
|
+
- **ULTRAWORK**: Race review enabled by default
|
|
937
|
+
- **Normal mode**: Use `--race` flag to enable
|
|
944
938
|
- Must re-verify build/tests after fixes
|
|
945
939
|
|
|
946
940
|
### 6. Quality Report (Auto-generated)
|
|
@@ -150,82 +150,101 @@ Score: 96/100 â
PASSED
|
|
|
150
150
|
|
|
151
151
|
---
|
|
152
152
|
|
|
153
|
-
## Step 3:
|
|
153
|
+
## Step 3: Race Review (GPT + Gemini Cross-Validation) - 3 Rounds (v2.6.9)
|
|
154
154
|
|
|
155
|
-
**đ¨ CRITICAL: Execute ALL 3 rounds. DO NOT skip.**
|
|
155
|
+
**đ¨ CRITICAL: Execute ALL 3 rounds with cross-validation. DO NOT skip.**
|
|
156
156
|
|
|
157
|
-
|
|
157
|
+
> Race Mode reviews SPEC with both GPT and Gemini in parallel, then cross-validates findings for higher confidence.
|
|
158
158
|
|
|
159
|
-
|
|
159
|
+
### 3.1 Race Review Invocation
|
|
160
160
|
|
|
161
161
|
```bash
|
|
162
|
-
#
|
|
163
|
-
|
|
164
|
-
VIBE_SCRIPTS="$(node -p "process.env.APPDATA || require('os').homedir() + '/.config'")/vibe/hooks/scripts"
|
|
162
|
+
# Via vibe tools (recommended)
|
|
163
|
+
node -e "import('@su-record/vibe/tools').then(t => t.raceReview({reviewType: 'general', code: '[SPEC content]', context: 'SPEC review round N/3'}).then(r => console.log(t.formatRaceResult(r))))"
|
|
165
164
|
```
|
|
166
165
|
|
|
167
|
-
### 3.2 Review Loop (3 Rounds)
|
|
166
|
+
### 3.2 Review Loop (3 Rounds with Cross-Validation)
|
|
168
167
|
|
|
169
168
|
For each round (1 to 3):
|
|
170
169
|
|
|
171
|
-
**Run GPT and Gemini in PARALLEL
|
|
170
|
+
**Run GPT and Gemini in PARALLEL with cross-validation:**
|
|
171
|
+
|
|
172
|
+
```javascript
|
|
173
|
+
// Race review - both models run simultaneously
|
|
174
|
+
import('@su-record/vibe/tools').then(async t => {
|
|
175
|
+
const result = await t.raceReview({
|
|
176
|
+
reviewType: 'general',
|
|
177
|
+
code: specContent,
|
|
178
|
+
context: `SPEC review for ${featureName}. Stack: ${stack}. Round ${N}/3.`
|
|
179
|
+
});
|
|
180
|
+
console.log(t.formatRaceResult(result));
|
|
181
|
+
});
|
|
182
|
+
```
|
|
172
183
|
|
|
173
|
-
|
|
174
|
-
# GPT review
|
|
175
|
-
node "$VIBE_SCRIPTS/llm-orchestrate.js" gpt orchestrate-json "Review SPEC for {feature-name}. Stack: {stack}. Summary: {spec-summary}. Round {N}/3. Check: completeness, error handling, security, edge cases, performance."
|
|
184
|
+
**Cross-validation rules:**
|
|
176
185
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
186
|
+
| Agreement | Priority | Action |
|
|
187
|
+
|-----------|----------|--------|
|
|
188
|
+
| Both agree (100%) | P1 | Auto-apply immediately |
|
|
189
|
+
| One model (50%) | P2 | Auto-apply with note |
|
|
180
190
|
|
|
181
191
|
**After each round:**
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
192
|
+
|
|
193
|
+
1. Cross-validate findings (issues found by both â P1, single model â P2)
|
|
194
|
+
2. Merge feedback with confidence scores
|
|
195
|
+
3. Auto-apply P1/P2 improvements to SPEC and Feature files
|
|
185
196
|
4. Continue to next round
|
|
186
197
|
|
|
187
198
|
**Output format:**
|
|
188
199
|
```
|
|
189
200
|
ââââââââââââââââââââââââââââââââââââââââââââ
|
|
190
|
-
|
|
201
|
+
đ SPEC RACE REVIEW - Round 1/3
|
|
191
202
|
ââââââââââââââââââââââââââââââââââââââââââââ
|
|
192
|
-
[GPT] 2 issues found:
|
|
193
|
-
1. Missing retry logic for API calls
|
|
194
|
-
2. Token refresh flow not specified
|
|
195
203
|
|
|
196
|
-
|
|
197
|
-
|
|
204
|
+
Model Results:
|
|
205
|
+
| Model | Issues | Duration |
|
|
206
|
+
|--------|--------|----------|
|
|
207
|
+
| GPT | 2 | 1823ms |
|
|
208
|
+
| Gemini | 2 | 2156ms |
|
|
209
|
+
|
|
210
|
+
Cross-Validated Issues:
|
|
211
|
+
| Issue | GPT | Gemini | Confidence |
|
|
212
|
+
|--------------------------|-----|--------|------------|
|
|
213
|
+
| Missing retry logic | â
| â
| 100% â P1 |
|
|
214
|
+
| Missing rate limiting | â
| â
| 100% â P1 |
|
|
215
|
+
| Token refresh unclear | â
| â | 50% â P2 |
|
|
198
216
|
|
|
199
|
-
Merged: 3 unique issues
|
|
200
217
|
Auto-applying...
|
|
201
|
-
â
Added retry logic (3 attempts, exponential backoff)
|
|
202
|
-
â
Added
|
|
203
|
-
â
Added
|
|
218
|
+
â
[P1] Added retry logic (3 attempts, exponential backoff)
|
|
219
|
+
â
[P1] Added rate limiting (100 req/min)
|
|
220
|
+
â
[P2] Added token refresh flow
|
|
204
221
|
|
|
205
|
-
â
Round 1 complete - 3 improvements
|
|
222
|
+
â
Round 1 complete - 3 improvements (2 P1, 1 P2)
|
|
206
223
|
ââââââââââââââââââââââââââââââââââââââââââââ
|
|
207
224
|
|
|
208
225
|
ââââââââââââââââââââââââââââââââââââââââââââ
|
|
209
|
-
|
|
226
|
+
đ SPEC RACE REVIEW - Round 2/3
|
|
210
227
|
ââââââââââââââââââââââââââââââââââââââââââââ
|
|
211
|
-
[GPT] 1 issue found:
|
|
212
|
-
1. Concurrent session handling unclear
|
|
213
228
|
|
|
214
|
-
|
|
229
|
+
Cross-Validated Issues:
|
|
230
|
+
| Issue | GPT | Gemini | Confidence |
|
|
231
|
+
|-----------------------------|-----|--------|------------|
|
|
232
|
+
| Concurrent session unclear | â
| â | 50% â P2 |
|
|
215
233
|
|
|
216
234
|
Auto-applying...
|
|
217
|
-
â
Added concurrent session policy
|
|
235
|
+
â
[P2] Added concurrent session policy
|
|
218
236
|
|
|
219
|
-
â
Round 2 complete - 1 improvement
|
|
237
|
+
â
Round 2 complete - 1 improvement
|
|
220
238
|
ââââââââââââââââââââââââââââââââââââââââââââ
|
|
221
239
|
|
|
222
240
|
ââââââââââââââââââââââââââââââââââââââââââââ
|
|
223
|
-
|
|
241
|
+
đ SPEC RACE REVIEW - Round 3/3
|
|
224
242
|
ââââââââââââââââââââââââââââââââââââââââââââ
|
|
225
|
-
|
|
226
|
-
|
|
243
|
+
|
|
244
|
+
Cross-Validated Issues: None
|
|
227
245
|
|
|
228
246
|
â
No changes needed - SPEC is complete
|
|
247
|
+
â
Consensus Rate: 100%
|
|
229
248
|
ââââââââââââââââââââââââââââââââââââââââââââ
|
|
230
249
|
```
|
|
231
250
|
|
package/dist/cli/postinstall.js
CHANGED
|
@@ -638,7 +638,7 @@ model: claude-4.5-sonnet-thinking
|
|
|
638
638
|
description: "SPEC document creation with parallel research. Use when starting new feature implementation."
|
|
639
639
|
---
|
|
640
640
|
|
|
641
|
-
#
|
|
641
|
+
# vibe spec - SPEC Creation Skill
|
|
642
642
|
|
|
643
643
|
SPEC-driven feature development workflow. Creates AI-executable specification documents.
|
|
644
644
|
|
|
@@ -722,7 +722,7 @@ model: claude-4.5-opus-high
|
|
|
722
722
|
description: "Execute SPEC implementation with Scenario-Driven Development. Use after SPEC is approved."
|
|
723
723
|
---
|
|
724
724
|
|
|
725
|
-
#
|
|
725
|
+
# vibe run - Implementation Execution Skill
|
|
726
726
|
|
|
727
727
|
Executes SPEC-based implementation using Scenario-Driven Development methodology.
|
|
728
728
|
|
|
@@ -808,7 +808,7 @@ model: auto
|
|
|
808
808
|
description: "Parallel code review with 12+ specialized agents. Use after code changes."
|
|
809
809
|
---
|
|
810
810
|
|
|
811
|
-
#
|
|
811
|
+
# vibe review - Parallel Code Review Skill
|
|
812
812
|
|
|
813
813
|
Orchestrates 12+ specialized review agents for comprehensive code review.
|
|
814
814
|
|
|
@@ -909,7 +909,7 @@ model: claude-4.5-sonnet-thinking
|
|
|
909
909
|
description: "Project and feature analysis. Use when exploring codebase or planning changes."
|
|
910
910
|
---
|
|
911
911
|
|
|
912
|
-
#
|
|
912
|
+
# vibe analyze - Analysis Skill
|
|
913
913
|
|
|
914
914
|
Comprehensive project and feature analysis for understanding codebases.
|
|
915
915
|
|
|
@@ -1023,7 +1023,7 @@ model: claude-4.5-sonnet-thinking
|
|
|
1023
1023
|
description: "Verify implementation against SPEC requirements. Use after implementation."
|
|
1024
1024
|
---
|
|
1025
1025
|
|
|
1026
|
-
#
|
|
1026
|
+
# vibe verify - Verification Skill
|
|
1027
1027
|
|
|
1028
1028
|
Verifies implementation completeness against SPEC requirements.
|
|
1029
1029
|
|
|
@@ -1124,7 +1124,7 @@ model: claude-4.5-opus-high-thinking
|
|
|
1124
1124
|
description: "Systematic 9-step reasoning framework. Use for complex problem solving."
|
|
1125
1125
|
---
|
|
1126
1126
|
|
|
1127
|
-
#
|
|
1127
|
+
# vibe reason - Reasoning Framework Skill
|
|
1128
1128
|
|
|
1129
1129
|
Applies systematic reasoning to complex problems and decisions.
|
|
1130
1130
|
|
|
@@ -1260,7 +1260,7 @@ model: gpt-5.2-codex
|
|
|
1260
1260
|
description: "UI preview and generation utilities. Use for UI component work."
|
|
1261
1261
|
---
|
|
1262
1262
|
|
|
1263
|
-
#
|
|
1263
|
+
# vibe ui - UI Utilities Skill
|
|
1264
1264
|
|
|
1265
1265
|
UI preview, generation, and refactoring utilities.
|
|
1266
1266
|
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-LLM Race Review
|
|
3
|
+
*
|
|
4
|
+
* ę°ė ëĻŦ롰 ėė
ė Claude + GPT + Geminię° ëŗë ŦëĄ ėííęŗ
|
|
5
|
+
* ęĩė°¨ ę˛ėĻíėŦ ė ëĸ°ë ę¸°ë° ė°ė ėėëĨŧ ëļėŦíŠëë¤.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { raceReview, formatRaceResult } from '@su-record/vibe/lib/ReviewRace';
|
|
10
|
+
*
|
|
11
|
+
* const result = await raceReview({
|
|
12
|
+
* reviewType: 'security',
|
|
13
|
+
* code: diffContent,
|
|
14
|
+
* context: 'Authentication module changes',
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* console.log(formatRaceResult(result));
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export type LLMProvider = 'claude' | 'gpt' | 'gemini';
|
|
21
|
+
export type Priority = 'P1' | 'P2' | 'P3';
|
|
22
|
+
export type ReviewType = 'security' | 'performance' | 'architecture' | 'complexity' | 'data-integrity' | 'test-coverage' | 'general';
|
|
23
|
+
export interface ReviewIssue {
|
|
24
|
+
id: string;
|
|
25
|
+
title: string;
|
|
26
|
+
description: string;
|
|
27
|
+
location?: string;
|
|
28
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
29
|
+
suggestion?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface LLMReviewResult {
|
|
32
|
+
provider: LLMProvider;
|
|
33
|
+
issues: ReviewIssue[];
|
|
34
|
+
duration: number;
|
|
35
|
+
error?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface CrossValidatedIssue {
|
|
38
|
+
issue: ReviewIssue;
|
|
39
|
+
foundBy: LLMProvider[];
|
|
40
|
+
confidence: number;
|
|
41
|
+
priority: Priority;
|
|
42
|
+
consensusTitle: string;
|
|
43
|
+
}
|
|
44
|
+
export interface RaceReviewResult {
|
|
45
|
+
reviewType: ReviewType;
|
|
46
|
+
llmResults: LLMReviewResult[];
|
|
47
|
+
crossValidated: CrossValidatedIssue[];
|
|
48
|
+
summary: {
|
|
49
|
+
totalIssues: number;
|
|
50
|
+
p1Count: number;
|
|
51
|
+
p2Count: number;
|
|
52
|
+
p3Count: number;
|
|
53
|
+
consensusRate: number;
|
|
54
|
+
};
|
|
55
|
+
duration: number;
|
|
56
|
+
}
|
|
57
|
+
export interface RaceReviewOptions {
|
|
58
|
+
reviewType: ReviewType;
|
|
59
|
+
code: string;
|
|
60
|
+
context?: string;
|
|
61
|
+
includeClaudeSubagent?: boolean;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Multi-LLM Race Review ėí
|
|
65
|
+
*
|
|
66
|
+
* GPT + GeminiëĨŧ ëŗë ŦëĄ ė¤ííęŗ ę˛°ęŗŧëĨŧ ęĩė°¨ ę˛ėĻíŠëë¤.
|
|
67
|
+
* Claudeë íėŦ ė¸ė
ėė ė¤í ė¤ė´ë¯ëĄ ëŗëė ėë¸ėė´ė í¸ëĄ í¸ėļëŠëë¤.
|
|
68
|
+
*/
|
|
69
|
+
export declare function raceReview(options: RaceReviewOptions): Promise<RaceReviewResult>;
|
|
70
|
+
/**
|
|
71
|
+
* Race Review 결ęŗŧëĨŧ ë§íŦë¤ė´ėŧëĄ íŦ맡
|
|
72
|
+
*/
|
|
73
|
+
export declare function formatRaceResult(result: RaceReviewResult): string;
|
|
74
|
+
/**
|
|
75
|
+
* LLM ę°ėŠėą íė¸
|
|
76
|
+
*/
|
|
77
|
+
export declare function checkLLMAvailability(): Promise<{
|
|
78
|
+
gpt: boolean;
|
|
79
|
+
gemini: boolean;
|
|
80
|
+
}>;
|
|
81
|
+
export type { ReviewIssue as RaceReviewIssue, LLMReviewResult as RaceLLMResult, CrossValidatedIssue as RaceCrossValidatedIssue, };
|
|
82
|
+
//# sourceMappingURL=ReviewRace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReviewRace.d.ts","sourceRoot":"","sources":["../../src/lib/ReviewRace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;AACtD,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1C,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,aAAa,GACb,cAAc,GACd,YAAY,GACZ,gBAAgB,GAChB,eAAe,GACf,SAAS,CAAC;AAEd,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AA6XD;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmCtF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAkDjE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC;IACpD,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAUD;AAGD,YAAY,EACV,WAAW,IAAI,eAAe,EAC9B,eAAe,IAAI,aAAa,EAChC,mBAAmB,IAAI,uBAAuB,GAC/C,CAAC"}
|
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-LLM Race Review
|
|
3
|
+
*
|
|
4
|
+
* ę°ė ëĻŦ롰 ėė
ė Claude + GPT + Geminię° ëŗë ŦëĄ ėííęŗ
|
|
5
|
+
* ęĩė°¨ ę˛ėĻíėŦ ė ëĸ°ë ę¸°ë° ė°ė ėėëĨŧ ëļėŦíŠëë¤.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { raceReview, formatRaceResult } from '@su-record/vibe/lib/ReviewRace';
|
|
10
|
+
*
|
|
11
|
+
* const result = await raceReview({
|
|
12
|
+
* reviewType: 'security',
|
|
13
|
+
* code: diffContent,
|
|
14
|
+
* context: 'Authentication module changes',
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* console.log(formatRaceResult(result));
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
import * as gptApi from './gpt-api.js';
|
|
21
|
+
import * as geminiApi from './gemini-api.js';
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// Constants
|
|
24
|
+
// ============================================================================
|
|
25
|
+
const REVIEW_PROMPTS = {
|
|
26
|
+
security: `You are a security expert reviewing code changes.
|
|
27
|
+
Identify security vulnerabilities including:
|
|
28
|
+
- SQL injection, XSS, CSRF
|
|
29
|
+
- Authentication/authorization flaws
|
|
30
|
+
- Sensitive data exposure
|
|
31
|
+
- Insecure dependencies
|
|
32
|
+
- OWASP Top 10 issues
|
|
33
|
+
|
|
34
|
+
For each issue found, respond in this exact JSON format:
|
|
35
|
+
{
|
|
36
|
+
"issues": [
|
|
37
|
+
{
|
|
38
|
+
"id": "SEC-001",
|
|
39
|
+
"title": "Brief title",
|
|
40
|
+
"description": "Detailed description",
|
|
41
|
+
"location": "file.ts:42",
|
|
42
|
+
"severity": "critical|high|medium|low",
|
|
43
|
+
"suggestion": "How to fix"
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
If no issues found, respond: {"issues": []}`,
|
|
49
|
+
performance: `You are a performance expert reviewing code changes.
|
|
50
|
+
Identify performance issues including:
|
|
51
|
+
- N+1 queries
|
|
52
|
+
- Memory leaks
|
|
53
|
+
- Unnecessary re-renders
|
|
54
|
+
- Blocking operations
|
|
55
|
+
- Large bundle size impacts
|
|
56
|
+
- Missing caching opportunities
|
|
57
|
+
|
|
58
|
+
Respond in JSON format:
|
|
59
|
+
{
|
|
60
|
+
"issues": [
|
|
61
|
+
{
|
|
62
|
+
"id": "PERF-001",
|
|
63
|
+
"title": "Brief title",
|
|
64
|
+
"description": "Detailed description",
|
|
65
|
+
"location": "file.ts:42",
|
|
66
|
+
"severity": "critical|high|medium|low",
|
|
67
|
+
"suggestion": "How to fix"
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
}`,
|
|
71
|
+
architecture: `You are an architecture expert reviewing code changes.
|
|
72
|
+
Identify architecture issues including:
|
|
73
|
+
- Circular dependencies
|
|
74
|
+
- Layer violations (e.g., UI calling DB directly)
|
|
75
|
+
- Missing abstractions
|
|
76
|
+
- Tight coupling
|
|
77
|
+
- Single Responsibility violations
|
|
78
|
+
- DRY violations
|
|
79
|
+
|
|
80
|
+
Respond in JSON format with issues array.`,
|
|
81
|
+
complexity: `You are a code quality expert reviewing complexity.
|
|
82
|
+
Identify complexity issues including:
|
|
83
|
+
- Functions > 30 lines
|
|
84
|
+
- Nesting depth > 3 levels
|
|
85
|
+
- Cyclomatic complexity > 10
|
|
86
|
+
- Too many parameters (> 5)
|
|
87
|
+
- Long files (> 300 lines)
|
|
88
|
+
|
|
89
|
+
Respond in JSON format with issues array.`,
|
|
90
|
+
'data-integrity': `You are a data integrity expert reviewing code changes.
|
|
91
|
+
Identify data integrity issues including:
|
|
92
|
+
- Missing validations
|
|
93
|
+
- Race conditions
|
|
94
|
+
- Inconsistent state handling
|
|
95
|
+
- Missing error handling
|
|
96
|
+
- Data loss scenarios
|
|
97
|
+
|
|
98
|
+
Respond in JSON format with issues array.`,
|
|
99
|
+
'test-coverage': `You are a testing expert reviewing code changes.
|
|
100
|
+
Identify missing test coverage including:
|
|
101
|
+
- Untested edge cases
|
|
102
|
+
- Missing error case tests
|
|
103
|
+
- Missing integration tests
|
|
104
|
+
- Untested business logic
|
|
105
|
+
|
|
106
|
+
Respond in JSON format with issues array.`,
|
|
107
|
+
general: `You are a senior code reviewer.
|
|
108
|
+
Review this code for any issues including security, performance, maintainability, and best practices.
|
|
109
|
+
|
|
110
|
+
Respond in JSON format with issues array.`,
|
|
111
|
+
};
|
|
112
|
+
// ============================================================================
|
|
113
|
+
// Helper Functions
|
|
114
|
+
// ============================================================================
|
|
115
|
+
/**
|
|
116
|
+
* ė´ė IDėė ėĢė ėļėļ
|
|
117
|
+
*/
|
|
118
|
+
function extractIssueNumber(id) {
|
|
119
|
+
const match = id.match(/\d+/);
|
|
120
|
+
return match ? parseInt(match[0], 10) : 0;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* ë ė´ėę° ė ėŦíė§ íë¨ (ė ëĒŠ/ė¤ëĒ
기ë°)
|
|
124
|
+
*/
|
|
125
|
+
function areIssuesSimilar(a, b) {
|
|
126
|
+
// 1. ėėšę° ę°ėŧ늴 ė ėŦ
|
|
127
|
+
if (a.location && b.location && a.location === b.location) {
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
// 2. ė ëĒŠ ė ėŦë (Jaccard similarity)
|
|
131
|
+
const aWords = new Set(a.title.toLowerCase().split(/\s+/));
|
|
132
|
+
const bWords = new Set(b.title.toLowerCase().split(/\s+/));
|
|
133
|
+
const intersection = new Set([...aWords].filter(x => bWords.has(x)));
|
|
134
|
+
const union = new Set([...aWords, ...bWords]);
|
|
135
|
+
const similarity = intersection.size / union.size;
|
|
136
|
+
if (similarity > 0.5)
|
|
137
|
+
return true;
|
|
138
|
+
// 3. ė¤ëĒ
ėė í¤ėë 매ėš
|
|
139
|
+
const aDesc = a.description.toLowerCase();
|
|
140
|
+
const bDesc = b.description.toLowerCase();
|
|
141
|
+
// ęŗĩíĩ ëŗ´ė í¤ėë
|
|
142
|
+
const keywords = ['injection', 'xss', 'csrf', 'auth', 'leak', 'overflow', 'validation', 'null', 'undefined'];
|
|
143
|
+
const aKeywords = keywords.filter(k => aDesc.includes(k));
|
|
144
|
+
const bKeywords = keywords.filter(k => bDesc.includes(k));
|
|
145
|
+
if (aKeywords.length > 0 && bKeywords.length > 0) {
|
|
146
|
+
const commonKeywords = aKeywords.filter(k => bKeywords.includes(k));
|
|
147
|
+
if (commonKeywords.length > 0)
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* JSON íėą (LLM ėëĩėė)
|
|
154
|
+
*/
|
|
155
|
+
function parseIssuesFromResponse(response) {
|
|
156
|
+
try {
|
|
157
|
+
// JSON ë¸ëĄ ėļėļ
|
|
158
|
+
const jsonMatch = response.match(/\{[\s\S]*\}/);
|
|
159
|
+
if (!jsonMatch)
|
|
160
|
+
return [];
|
|
161
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
162
|
+
return parsed.issues || [];
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// JSON íėą ė¤í¨ ė ëš ë°°ė´
|
|
166
|
+
return [];
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* ė ëĸ°ëėė ė°ė ėė ęŗė°
|
|
171
|
+
*/
|
|
172
|
+
function calculatePriority(confidence, severity) {
|
|
173
|
+
// 3/3 ëė (100%) + critical/high â P1
|
|
174
|
+
// 2/3 ëė (67%) ëë medium â P2
|
|
175
|
+
// 1/3 ëė (33%) ëë low â P3
|
|
176
|
+
if (confidence >= 0.9 && (severity === 'critical' || severity === 'high')) {
|
|
177
|
+
return 'P1';
|
|
178
|
+
}
|
|
179
|
+
if (confidence >= 0.6 || severity === 'medium') {
|
|
180
|
+
return 'P2';
|
|
181
|
+
}
|
|
182
|
+
return 'P3';
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* ę°ėĨ ėė¸í ė ëĒŠ ė í
|
|
186
|
+
*/
|
|
187
|
+
function selectBestTitle(issues) {
|
|
188
|
+
return issues.reduce((best, issue) => issue.title.length > best.length ? issue.title : best, issues[0]?.title || 'Unknown Issue');
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* ę°ėĨ ėė¸í ė¤ëĒ
ė í
|
|
192
|
+
*/
|
|
193
|
+
function selectBestDescription(issues) {
|
|
194
|
+
return issues.reduce((best, issue) => issue.description.length > best.length ? issue.description : best, issues[0]?.description || '');
|
|
195
|
+
}
|
|
196
|
+
// ============================================================================
|
|
197
|
+
// Core Functions
|
|
198
|
+
// ============================================================================
|
|
199
|
+
/**
|
|
200
|
+
* GPTëĄ ëĻŦ롰 ėí
|
|
201
|
+
*/
|
|
202
|
+
async function reviewWithGPT(reviewType, code, context) {
|
|
203
|
+
const startTime = Date.now();
|
|
204
|
+
try {
|
|
205
|
+
const prompt = `${REVIEW_PROMPTS[reviewType]}
|
|
206
|
+
|
|
207
|
+
Context: ${context || 'Code review'}
|
|
208
|
+
|
|
209
|
+
Code to review:
|
|
210
|
+
\`\`\`
|
|
211
|
+
${code}
|
|
212
|
+
\`\`\`
|
|
213
|
+
|
|
214
|
+
Respond with JSON only.`;
|
|
215
|
+
const response = await gptApi.ask(prompt, {
|
|
216
|
+
model: 'gpt-5.2-codex',
|
|
217
|
+
temperature: 0.3,
|
|
218
|
+
});
|
|
219
|
+
const issues = parseIssuesFromResponse(response);
|
|
220
|
+
return {
|
|
221
|
+
provider: 'gpt',
|
|
222
|
+
issues,
|
|
223
|
+
duration: Date.now() - startTime,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
return {
|
|
228
|
+
provider: 'gpt',
|
|
229
|
+
issues: [],
|
|
230
|
+
duration: Date.now() - startTime,
|
|
231
|
+
error: error.message,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* GeminiëĄ ëĻŦ롰 ėí
|
|
237
|
+
*/
|
|
238
|
+
async function reviewWithGemini(reviewType, code, context) {
|
|
239
|
+
const startTime = Date.now();
|
|
240
|
+
try {
|
|
241
|
+
const prompt = `${REVIEW_PROMPTS[reviewType]}
|
|
242
|
+
|
|
243
|
+
Context: ${context || 'Code review'}
|
|
244
|
+
|
|
245
|
+
Code to review:
|
|
246
|
+
\`\`\`
|
|
247
|
+
${code}
|
|
248
|
+
\`\`\`
|
|
249
|
+
|
|
250
|
+
Respond with JSON only.`;
|
|
251
|
+
const response = await geminiApi.ask(prompt, {
|
|
252
|
+
model: 'gemini-3-flash',
|
|
253
|
+
temperature: 0.3,
|
|
254
|
+
});
|
|
255
|
+
const issues = parseIssuesFromResponse(response);
|
|
256
|
+
return {
|
|
257
|
+
provider: 'gemini',
|
|
258
|
+
issues,
|
|
259
|
+
duration: Date.now() - startTime,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
return {
|
|
264
|
+
provider: 'gemini',
|
|
265
|
+
issues: [],
|
|
266
|
+
duration: Date.now() - startTime,
|
|
267
|
+
error: error.message,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* ė´ė ęĩė°¨ ę˛ėĻ (í´ëŦė¤í°ë§)
|
|
273
|
+
*/
|
|
274
|
+
function crossValidateIssues(llmResults) {
|
|
275
|
+
const validResults = llmResults.filter(r => !r.error);
|
|
276
|
+
const totalProviders = validResults.length;
|
|
277
|
+
if (totalProviders === 0)
|
|
278
|
+
return [];
|
|
279
|
+
// ëǍë ė´ėëĨŧ íëĢíę˛ íŧėš¨
|
|
280
|
+
const allIssues = [];
|
|
281
|
+
for (const result of validResults) {
|
|
282
|
+
for (const issue of result.issues) {
|
|
283
|
+
allIssues.push({ issue, provider: result.provider });
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// í´ëŦė¤í°ë§ (ė ėŦí ė´ė ęˇ¸ëŖší)
|
|
287
|
+
const clusters = [];
|
|
288
|
+
const used = new Set();
|
|
289
|
+
for (let i = 0; i < allIssues.length; i++) {
|
|
290
|
+
if (used.has(i))
|
|
291
|
+
continue;
|
|
292
|
+
const cluster = [allIssues[i]];
|
|
293
|
+
used.add(i);
|
|
294
|
+
for (let j = i + 1; j < allIssues.length; j++) {
|
|
295
|
+
if (used.has(j))
|
|
296
|
+
continue;
|
|
297
|
+
// ę°ė providerė ė´ėë í´ëŦė¤í°ė ėļę°íė§ ėė
|
|
298
|
+
if (allIssues[j].provider === allIssues[i].provider)
|
|
299
|
+
continue;
|
|
300
|
+
if (areIssuesSimilar(allIssues[i].issue, allIssues[j].issue)) {
|
|
301
|
+
cluster.push(allIssues[j]);
|
|
302
|
+
used.add(j);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
clusters.push(cluster);
|
|
306
|
+
}
|
|
307
|
+
// í´ëŦė¤í°ëĨŧ CrossValidatedIssueëĄ ëŗí
|
|
308
|
+
const crossValidated = clusters.map(cluster => {
|
|
309
|
+
const issues = cluster.map(c => c.issue);
|
|
310
|
+
const foundBy = [...new Set(cluster.map(c => c.provider))];
|
|
311
|
+
const confidence = foundBy.length / totalProviders;
|
|
312
|
+
// ę°ėĨ ëė severity ė í
|
|
313
|
+
const severityOrder = ['critical', 'high', 'medium', 'low'];
|
|
314
|
+
const highestSeverity = issues.reduce((highest, issue) => {
|
|
315
|
+
const currentIndex = severityOrder.indexOf(issue.severity);
|
|
316
|
+
const highestIndex = severityOrder.indexOf(highest);
|
|
317
|
+
return currentIndex < highestIndex ? issue.severity : highest;
|
|
318
|
+
}, 'low');
|
|
319
|
+
const priority = calculatePriority(confidence, highestSeverity);
|
|
320
|
+
return {
|
|
321
|
+
issue: {
|
|
322
|
+
id: issues[0].id,
|
|
323
|
+
title: selectBestTitle(issues),
|
|
324
|
+
description: selectBestDescription(issues),
|
|
325
|
+
location: issues.find(i => i.location)?.location,
|
|
326
|
+
severity: highestSeverity,
|
|
327
|
+
suggestion: issues.find(i => i.suggestion)?.suggestion,
|
|
328
|
+
},
|
|
329
|
+
foundBy,
|
|
330
|
+
confidence,
|
|
331
|
+
priority,
|
|
332
|
+
consensusTitle: selectBestTitle(issues),
|
|
333
|
+
};
|
|
334
|
+
});
|
|
335
|
+
// ė°ė ėė ėėŧëĄ ė ë Ŧ (P1 > P2 > P3, ę°ė ė°ė ėė ë´ėėë confidence ëė ė)
|
|
336
|
+
return crossValidated.sort((a, b) => {
|
|
337
|
+
const priorityOrder = { P1: 0, P2: 1, P3: 2 };
|
|
338
|
+
if (priorityOrder[a.priority] !== priorityOrder[b.priority]) {
|
|
339
|
+
return priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
340
|
+
}
|
|
341
|
+
return b.confidence - a.confidence;
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
// ============================================================================
|
|
345
|
+
// Main Export
|
|
346
|
+
// ============================================================================
|
|
347
|
+
/**
|
|
348
|
+
* Multi-LLM Race Review ėí
|
|
349
|
+
*
|
|
350
|
+
* GPT + GeminiëĨŧ ëŗë ŦëĄ ė¤ííęŗ ę˛°ęŗŧëĨŧ ęĩė°¨ ę˛ėĻíŠëë¤.
|
|
351
|
+
* Claudeë íėŦ ė¸ė
ėė ė¤í ė¤ė´ë¯ëĄ ëŗëė ėë¸ėė´ė í¸ëĄ í¸ėļëŠëë¤.
|
|
352
|
+
*/
|
|
353
|
+
export async function raceReview(options) {
|
|
354
|
+
const { reviewType, code, context } = options;
|
|
355
|
+
const startTime = Date.now();
|
|
356
|
+
// GPT + Gemini ëŗë Ŧ ė¤í
|
|
357
|
+
const [gptResult, geminiResult] = await Promise.all([
|
|
358
|
+
reviewWithGPT(reviewType, code, context),
|
|
359
|
+
reviewWithGemini(reviewType, code, context),
|
|
360
|
+
]);
|
|
361
|
+
const llmResults = [gptResult, geminiResult];
|
|
362
|
+
// ęĩė°¨ ę˛ėĻ
|
|
363
|
+
const crossValidated = crossValidateIssues(llmResults);
|
|
364
|
+
// ėėŊ ėėą
|
|
365
|
+
const p1Count = crossValidated.filter(i => i.priority === 'P1').length;
|
|
366
|
+
const p2Count = crossValidated.filter(i => i.priority === 'P2').length;
|
|
367
|
+
const p3Count = crossValidated.filter(i => i.priority === 'P3').length;
|
|
368
|
+
return {
|
|
369
|
+
reviewType,
|
|
370
|
+
llmResults,
|
|
371
|
+
crossValidated,
|
|
372
|
+
summary: {
|
|
373
|
+
totalIssues: crossValidated.length,
|
|
374
|
+
p1Count,
|
|
375
|
+
p2Count,
|
|
376
|
+
p3Count,
|
|
377
|
+
consensusRate: crossValidated.length > 0
|
|
378
|
+
? (p1Count + p2Count) / crossValidated.length
|
|
379
|
+
: 1,
|
|
380
|
+
},
|
|
381
|
+
duration: Date.now() - startTime,
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Race Review 결ęŗŧëĨŧ ë§íŦë¤ė´ėŧëĄ íŦ맡
|
|
386
|
+
*/
|
|
387
|
+
export function formatRaceResult(result) {
|
|
388
|
+
const lines = [];
|
|
389
|
+
lines.push(`## ${result.reviewType.toUpperCase()} Review (Race Mode)`);
|
|
390
|
+
lines.push('');
|
|
391
|
+
lines.push(`**Duration**: ${result.duration}ms`);
|
|
392
|
+
lines.push(`**Models**: GPT-5.2-Codex, Gemini-3-Flash`);
|
|
393
|
+
lines.push('');
|
|
394
|
+
// LLMëŗ ę˛°ęŗŧ ėėŊ
|
|
395
|
+
lines.push('### Model Results');
|
|
396
|
+
lines.push('');
|
|
397
|
+
lines.push('| Model | Issues Found | Duration | Status |');
|
|
398
|
+
lines.push('|-------|--------------|----------|--------|');
|
|
399
|
+
for (const llm of result.llmResults) {
|
|
400
|
+
const status = llm.error ? `Error: ${llm.error}` : 'OK';
|
|
401
|
+
lines.push(`| ${llm.provider} | ${llm.issues.length} | ${llm.duration}ms | ${status} |`);
|
|
402
|
+
}
|
|
403
|
+
lines.push('');
|
|
404
|
+
// ęĩė°¨ ę˛ėĻ ę˛°ęŗŧ
|
|
405
|
+
lines.push('### Cross-Validated Issues');
|
|
406
|
+
lines.push('');
|
|
407
|
+
lines.push(`**Summary**: ${result.summary.totalIssues} issues (P1: ${result.summary.p1Count}, P2: ${result.summary.p2Count}, P3: ${result.summary.p3Count})`);
|
|
408
|
+
lines.push(`**Consensus Rate**: ${(result.summary.consensusRate * 100).toFixed(0)}%`);
|
|
409
|
+
lines.push('');
|
|
410
|
+
if (result.crossValidated.length === 0) {
|
|
411
|
+
lines.push('No issues found.');
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
for (const item of result.crossValidated) {
|
|
415
|
+
const priorityEmoji = item.priority === 'P1' ? 'đ´' : item.priority === 'P2' ? 'đĄ' : 'đĩ';
|
|
416
|
+
const confidencePct = (item.confidence * 100).toFixed(0);
|
|
417
|
+
lines.push(`#### ${priorityEmoji} ${item.priority} - ${item.consensusTitle}`);
|
|
418
|
+
lines.push('');
|
|
419
|
+
lines.push(`- **Confidence**: ${confidencePct}% (${item.foundBy.join(', ')})`);
|
|
420
|
+
lines.push(`- **Severity**: ${item.issue.severity}`);
|
|
421
|
+
if (item.issue.location) {
|
|
422
|
+
lines.push(`- **Location**: \`${item.issue.location}\``);
|
|
423
|
+
}
|
|
424
|
+
lines.push(`- **Description**: ${item.issue.description}`);
|
|
425
|
+
if (item.issue.suggestion) {
|
|
426
|
+
lines.push(`- **Suggestion**: ${item.issue.suggestion}`);
|
|
427
|
+
}
|
|
428
|
+
lines.push('');
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
return lines.join('\n');
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* LLM ę°ėŠėą íė¸
|
|
435
|
+
*/
|
|
436
|
+
export async function checkLLMAvailability() {
|
|
437
|
+
const results = await Promise.allSettled([
|
|
438
|
+
gptApi.ask('ping', { maxTokens: 10 }),
|
|
439
|
+
geminiApi.ask('ping', { maxTokens: 10 }),
|
|
440
|
+
]);
|
|
441
|
+
return {
|
|
442
|
+
gpt: results[0].status === 'fulfilled',
|
|
443
|
+
gemini: results[1].status === 'fulfilled',
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
//# sourceMappingURL=ReviewRace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReviewRace.js","sourceRoot":"","sources":["../../src/lib/ReviewRace.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -49,4 +49,6 @@ export { detectFramework, detectFrameworkFromContent, getFrameworkRecommendation
|
|
|
49
49
|
export type { FrameworkInfo, PackageJson, DetectionResult, } from '../lib/FrameworkDetector.js';
|
|
50
50
|
export { generateRequirementId, generateRequirementIds, validateRequirementId, checkDuplicateId, registerExistingId, registerExistingIds, extractFeatureFromId, extractNumberFromId, getIdsByFeature, getAllUsedIds, resetCounters, getCounterStatus, parsePRD, parsePRDFile, generateSpec, generateTraceabilityMatrix, formatMatrixAsMarkdown, formatMatrixAsHtml, bumpSpecVersion, extractVersion, incrementVersion, generateChangelog, createGitTag, detectSpecChanges, getLatestSpecCommit, loadVersionHistory, saveVersionHistory, createBaseline, } from './spec/index.js';
|
|
51
51
|
export type { Requirement, ParsedPRD, PRDMetadata, SpecGeneratorOptions, GeneratedSpec, TraceItem, TraceabilityMatrix, TraceSummary, TraceMatrixOptions, SpecVersion, ChangeEntry, VersionHistory, BumpType, } from './spec/index.js';
|
|
52
|
+
export { raceReview, formatRaceResult, checkLLMAvailability, } from '../lib/ReviewRace.js';
|
|
53
|
+
export type { RaceReviewResult, RaceReviewOptions, LLMProvider, Priority, ReviewType, RaceReviewIssue, RaceLLMResult, RaceCrossValidatedIssue, } from '../lib/ReviewRace.js';
|
|
52
54
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -70,4 +70,6 @@ generateSpec,
|
|
|
70
70
|
generateTraceabilityMatrix, formatMatrixAsMarkdown, formatMatrixAsHtml,
|
|
71
71
|
// SPEC Versioning
|
|
72
72
|
bumpSpecVersion, extractVersion, incrementVersion, generateChangelog, createGitTag, detectSpecChanges, getLatestSpecCommit, loadVersionHistory, saveVersionHistory, createBaseline, } from './spec/index.js';
|
|
73
|
+
// Review Race (v2.6.9) - Multi-LLM competitive review
|
|
74
|
+
export { raceReview, formatRaceResult, checkLLMAvailability, } from '../lib/ReviewRace.js';
|
|
73
75
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|