triflux 8.2.3 → 8.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +209 -97
- package/bin/tfx-doctor-tui.mjs +7 -0
- package/bin/tfx-profile.mjs +7 -0
- package/bin/tfx-setup-tui.mjs +7 -0
- package/bin/triflux.mjs +14 -4
- package/hub/intent.mjs +7 -7
- package/hub/team/tui.mjs +4 -0
- package/hub/workers/delegator-mcp.mjs +18 -18
- package/package.json +6 -2
- package/scripts/setup.mjs +4 -33
- package/scripts/tfx-route.sh +57 -57
- package/skills/.omc/state/agent-replay-8f0e10a9-9693-4410-96f5-a6b07e8ed995.jsonl +1 -0
- package/skills/.omc/state/idle-notif-cooldown.json +3 -0
- package/skills/.omc/state/last-tool-error.json +7 -0
- package/skills/.omc/state/subagent-tracking.json +7 -0
- package/skills/tfx-analysis/SKILL.md +101 -0
- package/skills/tfx-auto-codex/SKILL.md +1 -1
- package/skills/tfx-autopilot/SKILL.md +112 -0
- package/skills/tfx-autoresearch/SKILL.md +1 -2
- package/skills/tfx-autoroute/SKILL.md +184 -0
- package/skills/tfx-codex/SKILL.md +2 -2
- package/skills/tfx-consensus/SKILL.md +112 -0
- package/skills/tfx-debate/SKILL.md +148 -0
- package/skills/tfx-deep-analysis/SKILL.md +186 -0
- package/skills/tfx-deep-plan/SKILL.md +113 -0
- package/skills/tfx-deep-qa/SKILL.md +158 -0
- package/skills/tfx-deep-research/SKILL.md +212 -0
- package/skills/tfx-deep-review/SKILL.md +91 -0
- package/skills/tfx-doctor/SKILL.md +161 -94
- package/skills/tfx-find/SKILL.md +123 -0
- package/skills/tfx-forge/SKILL.md +183 -0
- package/skills/tfx-fullcycle/SKILL.md +195 -0
- package/skills/tfx-hub/SKILL.md +1 -1
- package/skills/tfx-index/SKILL.md +174 -0
- package/skills/tfx-interview/SKILL.md +210 -0
- package/skills/tfx-panel/SKILL.md +187 -0
- package/skills/tfx-persist/SKILL.md +141 -0
- package/skills/tfx-plan/SKILL.md +53 -0
- package/skills/tfx-profile/SKILL.md +149 -0
- package/skills/tfx-prune/SKILL.md +198 -0
- package/skills/tfx-qa/SKILL.md +117 -0
- package/skills/tfx-research/SKILL.md +126 -0
- package/skills/tfx-review/SKILL.md +51 -0
- package/skills/tfx-setup/SKILL.md +160 -101
- package/tui/codex-profile.mjs +402 -0
- package/tui/core.mjs +236 -0
- package/tui/doctor.mjs +327 -0
- package/tui/setup.mjs +362 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tfx-prune
|
|
3
|
+
description: "AI가 생성한 불필요한 코드(슬롭)를 제거할 때 사용한다. 'deslop', '슬롭 제거', 'anti-slop', '코드 정리', '불필요한 코드 제거', '과잉 추상화 정리' 같은 요청에 반드시 사용. AI 생성 코드의 중복, 불필요 추상화, 과잉 에러 핸들링을 정리할 때 적극 활용."
|
|
4
|
+
triggers:
|
|
5
|
+
- deslop
|
|
6
|
+
- 슬롭 제거
|
|
7
|
+
- anti-slop
|
|
8
|
+
- 정리
|
|
9
|
+
- slop
|
|
10
|
+
argument-hint: "[파일 경로 또는 git diff 범위]"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# tfx-prune — Tri-Verified AI Slop Remover
|
|
14
|
+
|
|
15
|
+
> OMC ai-slop-cleaner 오마주. 핵심 차별점: 단일 판단이 아닌 **3자 독립 감지 + 합의** 기반 제거.
|
|
16
|
+
> "AI가 만든 슬롭은 AI 3명이 합의해야 슬롭이다."
|
|
17
|
+
|
|
18
|
+
## 용도
|
|
19
|
+
|
|
20
|
+
- AI 생성 코드에서 불필요한 추상화, 중복, 과잉 패턴 제거
|
|
21
|
+
- 코드 리뷰 후 슬롭 정리
|
|
22
|
+
- 리팩터링 후 AI가 추가한 불필요한 코드 청소
|
|
23
|
+
- PR 머지 전 코드 품질 최종 점검
|
|
24
|
+
|
|
25
|
+
## 슬롭 카테고리
|
|
26
|
+
|
|
27
|
+
| 카테고리 | 설명 | 예시 |
|
|
28
|
+
|----------|------|------|
|
|
29
|
+
| 불필요 추상화 | 단일 용도인데 인터페이스/팩토리/전략 패턴 적용 | `UserFactory` for 1 user type |
|
|
30
|
+
| 중복 코드 | 같은 로직의 반복 | 동일 validation을 3곳에 복붙 |
|
|
31
|
+
| 과잉 에러 핸들링 | 발생 불가능한 에러를 처리 | `catch (e) { /* impossible */ }` |
|
|
32
|
+
| 과잉 주석 | 코드가 이미 명확한데 주석 | `// increment i by 1` `i++` |
|
|
33
|
+
| 과잉 타입 | 불필요하게 복잡한 타입 정의 | 5단계 중첩 제네릭 |
|
|
34
|
+
| 사용되지 않는 코드 | import 했지만 사용 안 함 | dead imports, unused variables |
|
|
35
|
+
| 과잉 로깅 | 불필요한 console.log/debug | `console.log("here")` |
|
|
36
|
+
|
|
37
|
+
## 워크플로우
|
|
38
|
+
|
|
39
|
+
### Step 0: 슬롭 제거 범위 선택
|
|
40
|
+
|
|
41
|
+
인자 없이 호출된 경우, AskUserQuestion으로 대상 범위를 선택받는다:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
AskUserQuestion:
|
|
45
|
+
"슬롭 제거 범위를 선택하세요:"
|
|
46
|
+
1. 최근 변경 파일만 (git diff)
|
|
47
|
+
2. 전체 프로젝트
|
|
48
|
+
3. 특정 디렉토리 지정
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- 1번 선택 → `git diff HEAD`로 최근 변경 파일 대상
|
|
52
|
+
- 2번 선택 → 프로젝트 전체 소스 파일 대상 (대규모 주의 경고 표시)
|
|
53
|
+
- 3번 선택 → 추가 AskUserQuestion으로 대상 디렉토리 경로 입력받음
|
|
54
|
+
|
|
55
|
+
파일 경로나 git diff 범위가 인자로 이미 제공된 경우 이 단계를 건너뛴다.
|
|
56
|
+
|
|
57
|
+
### Step 1: 대상 파일 수집
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
입력에 따라 대상 결정:
|
|
61
|
+
|
|
62
|
+
1. 파일 경로 지정 → 해당 파일만
|
|
63
|
+
2. git diff 범위 지정 → diff에 포함된 파일
|
|
64
|
+
3. 입력 없음 → git diff HEAD로 최근 변경 파일
|
|
65
|
+
4. "all" → 프로젝트 전체 소스 파일 (주의: 대규모)
|
|
66
|
+
|
|
67
|
+
대상 파일 목록:
|
|
68
|
+
Bash("git diff --name-only HEAD~1") 또는 지정된 범위
|
|
69
|
+
→ 소스 파일만 필터 (.ts, .js, .mjs, .tsx, .py 등)
|
|
70
|
+
→ node_modules, dist, build 제외
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Step 2: 3자 독립 슬롭 감지 (Anti-Herding)
|
|
74
|
+
|
|
75
|
+
3개 CLI가 **동시에, 상호 결과 비공개로** 각 파일의 슬롭을 감지한다:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
공통 프롬프트 (각 CLI에 동일하게):
|
|
79
|
+
"다음 파일에서 AI 슬롭을 감지하세요.
|
|
80
|
+
슬롭 정의: 불필요 추상화, 중복, 과잉 에러핸들링, 과잉 주석, 과잉 타입,
|
|
81
|
+
미사용 코드, 과잉 로깅.
|
|
82
|
+
|
|
83
|
+
파일: {file_content}
|
|
84
|
+
|
|
85
|
+
각 발견에 대해:
|
|
86
|
+
{ id, category, line_start, line_end, description, severity, suggested_fix }
|
|
87
|
+
severity: critical(기능에 영향) | high(가독성 심각) | medium(개선) | low(취향)
|
|
88
|
+
|
|
89
|
+
슬롭이 아닌 것은 보고하지 마세요. 과탐(false positive)보다 미탐이 낫습니다."
|
|
90
|
+
|
|
91
|
+
실행:
|
|
92
|
+
Claude (Agent, background): 코드 품질 관점
|
|
93
|
+
Codex (Bash, background): 구현 효율 관점
|
|
94
|
+
Gemini (Bash, background): 가독성/DX 관점
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Step 3: 합의 필터링
|
|
98
|
+
|
|
99
|
+
tfx-consensus 프로토콜로 교차검증한다:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
for each finding in ALL results:
|
|
103
|
+
agreement = count(CLIs that found same or similar slop at same location)
|
|
104
|
+
|
|
105
|
+
if agreement >= 2:
|
|
106
|
+
→ "CONFIRMED SLOP" (확정 — 제거 대상)
|
|
107
|
+
elif agreement == 1:
|
|
108
|
+
→ "UNCONFIRMED" (미확정 — 제거하지 않음)
|
|
109
|
+
|
|
110
|
+
원칙: 2+ 합의된 항목만 제거한다.
|
|
111
|
+
1개 CLI만 지적한 항목은 무시한다 (과탐 방지).
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Step 4: 슬롭 제거
|
|
115
|
+
|
|
116
|
+
확정된 슬롭만 제거한다:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
제거 순서 (안전 → 위험):
|
|
120
|
+
1. 과잉 주석 제거 (가장 안전)
|
|
121
|
+
2. 미사용 코드/import 제거
|
|
122
|
+
3. 과잉 로깅 제거
|
|
123
|
+
4. 과잉 에러핸들링 간소화
|
|
124
|
+
5. 중복 코드 통합
|
|
125
|
+
6. 불필요 추상화 제거 (가장 위험 — 인터페이스 변경 가능)
|
|
126
|
+
|
|
127
|
+
각 제거 후:
|
|
128
|
+
- 변경 내용을 기록
|
|
129
|
+
- 제거 이유를 주석으로 남기지 않음 (그것 자체가 슬롭)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Step 5: 회귀 테스트
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
제거 후 안전성 검증:
|
|
136
|
+
|
|
137
|
+
1. 기존 테스트 실행
|
|
138
|
+
Bash("npm test" 또는 프로젝트 테스트 명령)
|
|
139
|
+
|
|
140
|
+
2. 테스트 실패 시:
|
|
141
|
+
→ 해당 제거를 롤백
|
|
142
|
+
→ 롤백된 항목을 "위험 — 수동 검토 필요"로 표시
|
|
143
|
+
|
|
144
|
+
3. 테스트 통과 시:
|
|
145
|
+
→ 제거 확정
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Step 6: 보고서
|
|
149
|
+
|
|
150
|
+
```markdown
|
|
151
|
+
## Deslop 보고서
|
|
152
|
+
|
|
153
|
+
### 요약
|
|
154
|
+
| 항목 | 수 |
|
|
155
|
+
|------|-----|
|
|
156
|
+
| 대상 파일 | {count} |
|
|
157
|
+
| 감지 (전체) | {total_findings} |
|
|
158
|
+
| 합의 확정 | {confirmed} |
|
|
159
|
+
| 미확정 (무시) | {unconfirmed} |
|
|
160
|
+
| 제거 완료 | {removed} |
|
|
161
|
+
| 롤백 (테스트 실패) | {rolled_back} |
|
|
162
|
+
|
|
163
|
+
### 제거된 슬롭
|
|
164
|
+
| # | 파일 | 라인 | 카테고리 | 합의 | 설명 |
|
|
165
|
+
|---|------|------|----------|------|------|
|
|
166
|
+
| 1 | auth.ts | 42-48 | 과잉 주석 | 3/3 | 자명한 코드에 장문 주석 |
|
|
167
|
+
| 2 | utils.ts | 15-20 | 미사용 import | 2/3 | lodash 미사용 |
|
|
168
|
+
|
|
169
|
+
### 미확정 (수동 검토 권장)
|
|
170
|
+
| # | 파일 | 라인 | 카테고리 | 지적 CLI | 설명 |
|
|
171
|
+
|---|------|------|----------|---------|------|
|
|
172
|
+
| 1 | api.ts | 80-95 | 불필요 추상화 | Codex만 | Factory 패턴 필요성 논쟁 |
|
|
173
|
+
|
|
174
|
+
### 테스트 결과
|
|
175
|
+
통과: {pass}/{total} | 실패: {fail} | 롤백: {rollback}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## 토큰 예산
|
|
179
|
+
|
|
180
|
+
| 단계 | 토큰 |
|
|
181
|
+
|------|------|
|
|
182
|
+
| Step 1 (파일 수집) | ~0.5K |
|
|
183
|
+
| Step 2 (3x 독립 감지) | ~6K |
|
|
184
|
+
| Step 3 (합의 필터링) | ~1K |
|
|
185
|
+
| Step 4 (제거) | ~1.5K |
|
|
186
|
+
| Step 5 (회귀 테스트) | ~0.5K |
|
|
187
|
+
| Step 6 (보고서) | ~0.5K |
|
|
188
|
+
| **총합** | **~10K** |
|
|
189
|
+
|
|
190
|
+
## 사용 예
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
/tfx-prune
|
|
194
|
+
/tfx-prune src/auth/middleware.ts
|
|
195
|
+
/tfx-prune HEAD~5..HEAD
|
|
196
|
+
/정리 src/
|
|
197
|
+
/anti-slop "과잉 에러 핸들링 제거"
|
|
198
|
+
```
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tfx-qa
|
|
3
|
+
description: "테스트 실행하고 실패하면 수정해서 통과시켜야 할 때 사용한다. 'qa', '검증해', '테스트 돌려', 'test-fix', '테스트 통과시켜' 같은 요청에 반드시 사용. 테스트 실패를 반복 수정하여 전부 통과시켜야 할 때 적극 활용."
|
|
4
|
+
triggers:
|
|
5
|
+
- qa
|
|
6
|
+
- 검증
|
|
7
|
+
- 테스트 검증
|
|
8
|
+
- test-fix
|
|
9
|
+
argument-hint: "[테스트 명령 또는 파일 경로]"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# tfx-qa — Light Test-Fix Cycle
|
|
13
|
+
|
|
14
|
+
> 테스트 실행 → 실패 분석 → 자동 수정 → 재실행. 최대 3회. OMC ultraqa 영감.
|
|
15
|
+
|
|
16
|
+
## 용도
|
|
17
|
+
|
|
18
|
+
- 테스트 실행 후 실패 자동 수정
|
|
19
|
+
- CI 실패 빠른 해결
|
|
20
|
+
- 리팩터링 후 회귀 검증 + 수정
|
|
21
|
+
- "테스트 돌려서 깨진 거 고쳐" 류의 요청
|
|
22
|
+
|
|
23
|
+
## 워크플로우
|
|
24
|
+
|
|
25
|
+
### Step 1: 테스트 대상 식별
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
우선순위:
|
|
29
|
+
1. 사용자가 테스트 명령 지정 → 그대로 실행
|
|
30
|
+
2. 사용자가 파일 지정 → 해당 파일의 테스트 탐색
|
|
31
|
+
3. 지정 없음 → 프로젝트 테스트 전체 (npm test / pytest 등 자동 감지)
|
|
32
|
+
|
|
33
|
+
자동 감지:
|
|
34
|
+
package.json의 "test" 스크립트 → npm test
|
|
35
|
+
pytest.ini / pyproject.toml → pytest
|
|
36
|
+
Makefile의 test 타깃 → make test
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Step 2: 테스트 실행 (Round 1)
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
|
|
43
|
+
"다음 테스트를 실행하고 결과를 보고하라:
|
|
44
|
+
명령: {test_command}
|
|
45
|
+
|
|
46
|
+
출력 형식:
|
|
47
|
+
- 총 테스트 수
|
|
48
|
+
- 통과/실패/스킵 수
|
|
49
|
+
- 실패한 테스트 목록 (파일:테스트명:에러 메시지)
|
|
50
|
+
- 실패 원인 분석 (각 실패별)"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Step 3: 실패 수정 + 재실행 루프
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
MAX_RETRIES = 3
|
|
57
|
+
retry = 0
|
|
58
|
+
|
|
59
|
+
WHILE (failures > 0 AND retry < MAX_RETRIES):
|
|
60
|
+
retry++
|
|
61
|
+
|
|
62
|
+
Codex로 실패 수정:
|
|
63
|
+
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
|
|
64
|
+
"다음 테스트 실패를 수정하라:
|
|
65
|
+
실패 목록: {failures}
|
|
66
|
+
|
|
67
|
+
규칙:
|
|
68
|
+
- 테스트 코드가 아닌 구현 코드를 수정하라 (테스트가 정확한 경우)
|
|
69
|
+
- 테스트 자체가 잘못된 경우만 테스트를 수정하라
|
|
70
|
+
- 수정 후 해당 테스트를 다시 실행하여 확인하라"
|
|
71
|
+
|
|
72
|
+
재실행하여 결과 확인
|
|
73
|
+
|
|
74
|
+
END WHILE
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Step 4: 결과 보고
|
|
78
|
+
|
|
79
|
+
```markdown
|
|
80
|
+
## QA 결과: {test_target}
|
|
81
|
+
|
|
82
|
+
### 실행 요약
|
|
83
|
+
| 라운드 | 통과 | 실패 | 수정 |
|
|
84
|
+
|--------|------|------|------|
|
|
85
|
+
| Round 1 | {n} | {n} | — |
|
|
86
|
+
| Round 2 | {n} | {n} | {수정 내용} |
|
|
87
|
+
| Round 3 | {n} | {n} | {수정 내용} |
|
|
88
|
+
|
|
89
|
+
### 최종 결과
|
|
90
|
+
- 테스트: {pass}/{total} 통과
|
|
91
|
+
- 수정된 파일: {list}
|
|
92
|
+
- 미해결 실패: {list, 있으면}
|
|
93
|
+
|
|
94
|
+
### 수정 상세
|
|
95
|
+
- `{file}:{line}` — {무엇을 왜 수정했는지}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
3회 후에도 실패가 남으면 미해결 목록 + 원인 분석을 사용자에게 보고.
|
|
99
|
+
|
|
100
|
+
## 토큰 예산
|
|
101
|
+
|
|
102
|
+
| 단계 | 토큰 |
|
|
103
|
+
|------|------|
|
|
104
|
+
| Step 1 (식별) | ~300 |
|
|
105
|
+
| Step 2 (실행) | ~1.5K |
|
|
106
|
+
| Step 3 (수정, 회당) | ~1.5K |
|
|
107
|
+
| Step 4 (보고) | ~500 |
|
|
108
|
+
| **총합 (최대 3회)** | **~5K** |
|
|
109
|
+
|
|
110
|
+
## 사용 예
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
/tfx-qa
|
|
114
|
+
/tfx-qa "npm test -- --grep auth"
|
|
115
|
+
/tfx-qa "pytest tests/test_api.py -v"
|
|
116
|
+
/tfx-qa "깨진 테스트 고쳐줘"
|
|
117
|
+
```
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tfx-research
|
|
3
|
+
description: "빠른 웹 검색과 요약이 필요할 때 사용한다. '검색해줘', '찾아봐', '최신 정보', '이거 뭐야', 'search', '공식 문서 확인' 같은 요청에 반드시 사용. 라이브러리 문서, API 레퍼런스, 에러 해결, 최신 뉴스, 팩트 체크 등 외부 정보가 필요한 모든 상황에 적극 활용한다."
|
|
4
|
+
triggers:
|
|
5
|
+
- tfx-research
|
|
6
|
+
- 빠른 리서치
|
|
7
|
+
- 검색
|
|
8
|
+
- 찾아줘
|
|
9
|
+
- search
|
|
10
|
+
- web search
|
|
11
|
+
argument-hint: "<검색 주제>"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# tfx-research — Light Web Research
|
|
15
|
+
|
|
16
|
+
> 빠른 단일 소스 검색 + 요약. 토큰 최소화, 즉시 결과.
|
|
17
|
+
|
|
18
|
+
## 용도
|
|
19
|
+
|
|
20
|
+
- 빠른 팩트 체크
|
|
21
|
+
- 라이브러리/프레임워크 최신 정보 확인
|
|
22
|
+
- API 문서 검색
|
|
23
|
+
- 에러 메시지 해결책 검색
|
|
24
|
+
- 간단한 기술 질문 답변
|
|
25
|
+
|
|
26
|
+
## 워크플로우
|
|
27
|
+
|
|
28
|
+
### Step 1: 쿼리 최적화
|
|
29
|
+
|
|
30
|
+
사용자 입력을 검색에 최적화된 쿼리로 변환한다:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
입력: "React 19에서 use() 훅 사용법"
|
|
34
|
+
최적화: "React 19 use() hook usage API reference 2026"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Step 1.5: 검색 유형 선택 (인자 없이 호출 시)
|
|
38
|
+
|
|
39
|
+
인자 없이 `/tfx-research`만 호출된 경우, AskUserQuestion으로 검색 유형을 선택받는다:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
AskUserQuestion:
|
|
43
|
+
"검색 유형을 선택하세요:"
|
|
44
|
+
1. 코드/라이브러리 문서 (context7)
|
|
45
|
+
2. 학술/논문 (Exa semantic)
|
|
46
|
+
3. 최신 뉴스/트렌드 (Brave)
|
|
47
|
+
4. 일반 웹 검색 (Tavily)
|
|
48
|
+
5. URL 콘텐츠 추출
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
선택 결과에 따라 Step 2의 자동 선택 로직을 건너뛰고 해당 MCP를 직접 사용한다.
|
|
52
|
+
인자가 제공된 경우 이 단계를 건너뛰고 Step 2의 자동 선택 로직을 따른다.
|
|
53
|
+
|
|
54
|
+
### Step 2: MCP 소스 자동 선택
|
|
55
|
+
|
|
56
|
+
검색 유형에 따라 최적 MCP를 자동 선택한다:
|
|
57
|
+
|
|
58
|
+
| 유형 | 선택 MCP | 이유 |
|
|
59
|
+
|------|----------|------|
|
|
60
|
+
| 코드/라이브러리 문서 | context7 (resolve → query) | 공식 문서 최적화 |
|
|
61
|
+
| 학술/심층 검색 | Exa (web_search_exa) | Neural semantic search |
|
|
62
|
+
| 최신 뉴스/트렌드 | Brave (brave_web_search) | 독립 인덱스, freshness |
|
|
63
|
+
| 일반 웹 검색 | Tavily (tavily_search) | 범용, 빠른 응답 |
|
|
64
|
+
| URL 콘텐츠 추출 | Exa (crawling_exa) | Clean text extraction |
|
|
65
|
+
|
|
66
|
+
**선택 로직:**
|
|
67
|
+
```
|
|
68
|
+
if query matches library/framework name → context7
|
|
69
|
+
elif query contains "논문", "research", "paper" → Exa (category: "research paper")
|
|
70
|
+
elif query contains "뉴스", "news", "최신" → Brave (brave_news_search)
|
|
71
|
+
elif query contains URL → Exa crawling
|
|
72
|
+
else → Tavily (가장 범용적)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Step 3: 검색 실행
|
|
76
|
+
|
|
77
|
+
선택된 MCP로 검색 실행. 결과를 토큰 효율적으로 포맷:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
검색 파라미터:
|
|
81
|
+
- numResults: 5 (토큰 절약)
|
|
82
|
+
- highlights: true (Exa — 전문 대신 하이라이트)
|
|
83
|
+
- maxCharacters: 500 (Tavily/Exa — 콘텐츠 제한)
|
|
84
|
+
- freshness: 상황에 따라 자동 설정
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Step 4: 결과 요약
|
|
88
|
+
|
|
89
|
+
검색 결과를 구조화된 요약으로 변환:
|
|
90
|
+
|
|
91
|
+
```markdown
|
|
92
|
+
## 검색 결과: {query}
|
|
93
|
+
|
|
94
|
+
### 핵심 답변
|
|
95
|
+
{1-3문장 직접 답변}
|
|
96
|
+
|
|
97
|
+
### 상세 내용
|
|
98
|
+
- **[출처 1 제목](URL)**: {하이라이트 요약}
|
|
99
|
+
- **[출처 2 제목](URL)**: {하이라이트 요약}
|
|
100
|
+
- **[출처 3 제목](URL)**: {하이라이트 요약}
|
|
101
|
+
|
|
102
|
+
### 관련 키워드
|
|
103
|
+
{추가 검색에 유용한 키워드}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## 토큰 예산
|
|
107
|
+
|
|
108
|
+
| 단계 | 토큰 |
|
|
109
|
+
|------|------|
|
|
110
|
+
| 쿼리 최적화 | ~200 |
|
|
111
|
+
| 검색 실행 | ~2K (MCP 결과) |
|
|
112
|
+
| 결과 요약 | ~2K |
|
|
113
|
+
| **총합** | **~5K** |
|
|
114
|
+
|
|
115
|
+
## Fallback 전략
|
|
116
|
+
|
|
117
|
+
MCP 사용 불가 시 순서:
|
|
118
|
+
1. context7 → 2. WebSearch (내장) → 3. Brave → 4. Exa → 5. Tavily
|
|
119
|
+
|
|
120
|
+
## 사용 예
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
/tfx-research "Next.js 15 Server Actions best practices"
|
|
124
|
+
/tfx-research "pnpm workspace monorepo setup 2026"
|
|
125
|
+
/tfx-research "ECONNREFUSED 에러 Node.js 해결"
|
|
126
|
+
```
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tfx-review
|
|
3
|
+
description: "코드 리뷰가 필요할 때 사용한다. 'review', '리뷰해줘', '코드 봐줘', '이거 괜찮아?', 'PR 리뷰', '변경사항 확인' 같은 요청에 반드시 사용. git diff, 특정 파일, 또는 최근 변경에 대한 빠른 피드백이 필요할 때 적극 활용."
|
|
4
|
+
triggers:
|
|
5
|
+
- review
|
|
6
|
+
- 리뷰
|
|
7
|
+
- 코드 리뷰
|
|
8
|
+
- code review
|
|
9
|
+
argument-hint: "[파일 경로 또는 변경 설명]"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# tfx-review — Light Code Review
|
|
13
|
+
|
|
14
|
+
> Codex 단일 리뷰로 빠른 피드백. 토큰 최소화.
|
|
15
|
+
|
|
16
|
+
## 워크플로우
|
|
17
|
+
|
|
18
|
+
### Step 1: 리뷰 대상 식별
|
|
19
|
+
```
|
|
20
|
+
우선순위:
|
|
21
|
+
1. 사용자가 파일 경로 지정 → 해당 파일
|
|
22
|
+
2. git diff (staged + unstaged) → 변경된 파일
|
|
23
|
+
3. 최근 커밋 → git diff HEAD~1
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Step 2: Codex 리뷰 실행
|
|
27
|
+
```bash
|
|
28
|
+
codex exec review --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
|
|
29
|
+
"다음 코드 변경을 리뷰하라. 심각도별 분류(critical/high/medium/low).
|
|
30
|
+
체크: 로직 결함, 보안 취약점, 성능 문제, SOLID 위반, 에러 핸들링.
|
|
31
|
+
변경사항: {diff_or_file_content}"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Step 3: 결과 포맷
|
|
35
|
+
```markdown
|
|
36
|
+
## Code Review: {target}
|
|
37
|
+
|
|
38
|
+
### Critical (즉시 수정)
|
|
39
|
+
- [C1] {파일:라인} — {설명}
|
|
40
|
+
|
|
41
|
+
### High (수정 권장)
|
|
42
|
+
- [H1] {파일:라인} — {설명}
|
|
43
|
+
|
|
44
|
+
### Medium (개선 제안)
|
|
45
|
+
- [M1] {파일:라인} — {설명}
|
|
46
|
+
|
|
47
|
+
### Summary
|
|
48
|
+
{전체 코드 품질 평가 1-2줄}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## 토큰: ~8K
|