@su-record/vibe 2.3.0 โ 2.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.json +35 -35
- package/.claude/settings.local.json +24 -25
- package/.claude/vibe/constitution.md +184 -184
- package/.claude/vibe/rules/core/communication-guide.md +104 -104
- package/.claude/vibe/rules/core/development-philosophy.md +52 -52
- package/.claude/vibe/rules/core/quick-start.md +120 -120
- package/.claude/vibe/rules/languages/dart-flutter.md +509 -509
- package/.claude/vibe/rules/languages/go.md +396 -396
- package/.claude/vibe/rules/languages/java-spring.md +586 -586
- package/.claude/vibe/rules/languages/kotlin-android.md +491 -491
- package/.claude/vibe/rules/languages/python-django.md +371 -371
- package/.claude/vibe/rules/languages/python-fastapi.md +386 -386
- package/.claude/vibe/rules/languages/rust.md +425 -425
- package/.claude/vibe/rules/languages/swift-ios.md +516 -516
- package/.claude/vibe/rules/languages/typescript-nextjs.md +441 -441
- package/.claude/vibe/rules/languages/typescript-node.md +375 -375
- package/.claude/vibe/rules/languages/typescript-nuxt.md +521 -521
- package/.claude/vibe/rules/languages/typescript-react-native.md +446 -446
- package/.claude/vibe/rules/languages/typescript-react.md +525 -525
- package/.claude/vibe/rules/languages/typescript-vue.md +353 -353
- package/.claude/vibe/rules/quality/bdd-contract-testing.md +388 -388
- package/.claude/vibe/rules/quality/checklist.md +276 -276
- package/.claude/vibe/rules/quality/testing-strategy.md +437 -437
- package/.claude/vibe/rules/standards/anti-patterns.md +369 -369
- package/.claude/vibe/rules/standards/code-structure.md +291 -291
- package/.claude/vibe/rules/standards/complexity-metrics.md +312 -312
- package/.claude/vibe/rules/standards/naming-conventions.md +198 -198
- package/.claude/vibe/setup.sh +31 -31
- package/.claude/vibe/templates/constitution-template.md +184 -184
- package/.claude/vibe/templates/contract-backend-template.md +517 -517
- package/.claude/vibe/templates/contract-frontend-template.md +594 -594
- package/.claude/vibe/templates/feature-template.md +96 -96
- package/.claude/vibe/templates/spec-template.md +199 -199
- package/CLAUDE.md +345 -323
- package/LICENSE +21 -21
- package/README.md +744 -724
- package/agents/compounder.md +261 -261
- package/agents/diagrammer.md +178 -178
- package/agents/e2e-tester.md +266 -266
- package/agents/explorer.md +48 -48
- package/agents/implementer.md +53 -53
- package/agents/research/best-practices-agent.md +139 -139
- package/agents/research/codebase-patterns-agent.md +147 -147
- package/agents/research/framework-docs-agent.md +181 -181
- package/agents/research/security-advisory-agent.md +167 -167
- package/agents/review/architecture-reviewer.md +107 -107
- package/agents/review/complexity-reviewer.md +116 -116
- package/agents/review/data-integrity-reviewer.md +88 -88
- package/agents/review/git-history-reviewer.md +103 -103
- package/agents/review/performance-reviewer.md +86 -86
- package/agents/review/python-reviewer.md +152 -152
- package/agents/review/rails-reviewer.md +139 -139
- package/agents/review/react-reviewer.md +144 -144
- package/agents/review/security-reviewer.md +80 -80
- package/agents/review/simplicity-reviewer.md +140 -140
- package/agents/review/test-coverage-reviewer.md +116 -116
- package/agents/review/typescript-reviewer.md +127 -127
- package/agents/searcher.md +54 -54
- package/agents/simplifier.md +119 -119
- package/agents/tester.md +49 -49
- package/agents/ui-previewer.md +137 -137
- package/commands/vibe.analyze.md +245 -180
- package/commands/vibe.reason.md +223 -183
- package/commands/vibe.review.md +200 -136
- package/commands/vibe.run.md +838 -836
- package/commands/vibe.spec.md +419 -383
- package/commands/vibe.utils.md +101 -101
- package/commands/vibe.verify.md +282 -241
- package/dist/cli/index.js +385 -385
- package/dist/lib/MemoryManager.d.ts.map +1 -1
- package/dist/lib/MemoryManager.js +119 -114
- package/dist/lib/MemoryManager.js.map +1 -1
- package/dist/lib/PythonParser.js +108 -108
- package/dist/lib/gemini-mcp.js +15 -15
- package/dist/lib/gemini-oauth.js +35 -35
- package/dist/lib/gpt-mcp.js +17 -17
- package/dist/lib/gpt-oauth.js +44 -44
- package/dist/tools/analytics/getUsageAnalytics.js +12 -12
- package/dist/tools/index.d.ts +50 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +61 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/memory/createMemoryTimeline.js +10 -10
- package/dist/tools/memory/getMemoryGraph.js +12 -12
- package/dist/tools/memory/getSessionContext.js +9 -9
- package/dist/tools/memory/linkMemories.js +14 -14
- package/dist/tools/memory/listMemories.js +4 -4
- package/dist/tools/memory/recallMemory.js +4 -4
- package/dist/tools/memory/saveMemory.js +4 -4
- package/dist/tools/memory/searchMemoriesAdvanced.js +22 -22
- package/dist/tools/planning/generatePrd.js +46 -46
- package/dist/tools/prompt/enhancePromptGemini.js +160 -160
- package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
- package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
- package/hooks/hooks.json +121 -103
- package/package.json +73 -69
- package/skills/git-worktree.md +178 -178
- package/skills/priority-todos.md +236 -236
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
# Security Reviewer Agent
|
|
2
|
-
|
|
3
|
-
๋ณด์ ์ทจ์ฝ์ ์ ๋ฌธ ๋ฆฌ๋ทฐ ์์ด์ ํธ
|
|
4
|
-
|
|
5
|
-
## Role
|
|
6
|
-
|
|
7
|
-
- OWASP Top 10 ์ทจ์ฝ์ ๊ฒ์ฌ
|
|
8
|
-
- ์ธ์ฆ/์ธ๊ฐ ๋ก์ง ๊ฒ์ฆ
|
|
9
|
-
- ๋ฏผ๊ฐ ๋ฐ์ดํฐ ๋
ธ์ถ ๊ฐ์ง
|
|
10
|
-
- ๋ณด์ ํค๋ ๋ฐ ์ค์ ๊ฒํ
|
|
11
|
-
|
|
12
|
-
## Model
|
|
13
|
-
|
|
14
|
-
**Haiku** (inherit) - ๋น ๋ฅธ ๋ณ๋ ฌ ์คํ
|
|
15
|
-
|
|
16
|
-
## Checklist
|
|
17
|
-
|
|
18
|
-
### Injection (A03:2021)
|
|
19
|
-
- [ ] SQL Injection: ํ๋ผ๋ฏธํฐํ๋ ์ฟผ๋ฆฌ ์ฌ์ฉ?
|
|
20
|
-
- [ ] NoSQL Injection: ์ฌ์ฉ์ ์
๋ ฅ ๊ฒ์ฆ?
|
|
21
|
-
- [ ] Command Injection: shell ๋ช
๋ น์ด ์ด์ค์ผ์ดํ?
|
|
22
|
-
- [ ] LDAP Injection: LDAP ์ฟผ๋ฆฌ ๊ฒ์ฆ?
|
|
23
|
-
|
|
24
|
-
### Broken Authentication (A07:2021)
|
|
25
|
-
- [ ] ๋น๋ฐ๋ฒํธ ํด์ฑ (bcrypt, argon2)?
|
|
26
|
-
- [ ] ์ธ์
๊ด๋ฆฌ ๋ณด์?
|
|
27
|
-
- [ ] ๋ธ๋ฃจํธํฌ์ค ๋ฐฉ์ง?
|
|
28
|
-
- [ ] 2FA ๊ตฌํ ์ฌ๋ถ?
|
|
29
|
-
|
|
30
|
-
### Sensitive Data Exposure (A02:2021)
|
|
31
|
-
- [ ] API ํค, ๋น๋ฐ๋ฒํธ ํ๋์ฝ๋ฉ?
|
|
32
|
-
- [ ] ๋ก๊ทธ์ ๋ฏผ๊ฐ ์ ๋ณด ๋
ธ์ถ?
|
|
33
|
-
- [ ] HTTPS ๊ฐ์ ?
|
|
34
|
-
- [ ] ๋ฏผ๊ฐ ๋ฐ์ดํฐ ์ํธํ?
|
|
35
|
-
|
|
36
|
-
### XSS (A03:2021)
|
|
37
|
-
- [ ] ์ฌ์ฉ์ ์
๋ ฅ ์ด์ค์ผ์ดํ?
|
|
38
|
-
- [ ] Content-Security-Policy ์ค์ ?
|
|
39
|
-
- [ ] innerHTML ๋์ textContent?
|
|
40
|
-
- [ ] React dangerouslySetInnerHTML ๊ฒํ ?
|
|
41
|
-
|
|
42
|
-
### CSRF
|
|
43
|
-
- [ ] CSRF ํ ํฐ ์ฌ์ฉ?
|
|
44
|
-
- [ ] SameSite ์ฟ ํค ์ค์ ?
|
|
45
|
-
- [ ] Origin ๊ฒ์ฆ?
|
|
46
|
-
|
|
47
|
-
### Security Misconfiguration (A05:2021)
|
|
48
|
-
- [ ] ๋๋ฒ๊ทธ ๋ชจ๋ ๋นํ์ฑํ?
|
|
49
|
-
- [ ] ๊ธฐ๋ณธ ๊ณ์ /๋น๋ฐ๋ฒํธ ์ ๊ฑฐ?
|
|
50
|
-
- [ ] ์๋ฌ ๋ฉ์์ง์ ์คํ ํธ๋ ์ด์ค?
|
|
51
|
-
- [ ] ๋ถํ์ํ ๊ธฐ๋ฅ/ํฌํธ ๋นํ์ฑํ?
|
|
52
|
-
|
|
53
|
-
## Output Format
|
|
54
|
-
|
|
55
|
-
```markdown
|
|
56
|
-
## ๐ Security Review
|
|
57
|
-
|
|
58
|
-
### ๐ด P1 Critical
|
|
59
|
-
1. **SQL Injection**
|
|
60
|
-
- ๐ Location: src/api/users.py:42
|
|
61
|
-
- ๐ก Fix: Use parameterized queries
|
|
62
|
-
|
|
63
|
-
### ๐ก P2 Important
|
|
64
|
-
2. **Missing Rate Limiting**
|
|
65
|
-
- ๐ Location: src/api/auth.py:15
|
|
66
|
-
- ๐ก Fix: Add rate limiter middleware
|
|
67
|
-
|
|
68
|
-
### ๐ต P3 Suggestions
|
|
69
|
-
3. **Consider adding CSP header**
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## Usage
|
|
73
|
-
|
|
74
|
-
```
|
|
75
|
-
Task(
|
|
76
|
-
model: "haiku",
|
|
77
|
-
subagent_type: "Explore",
|
|
78
|
-
prompt: "Security review for changes in [files]. Check OWASP Top 10."
|
|
79
|
-
)
|
|
80
|
-
```
|
|
1
|
+
# Security Reviewer Agent
|
|
2
|
+
|
|
3
|
+
๋ณด์ ์ทจ์ฝ์ ์ ๋ฌธ ๋ฆฌ๋ทฐ ์์ด์ ํธ
|
|
4
|
+
|
|
5
|
+
## Role
|
|
6
|
+
|
|
7
|
+
- OWASP Top 10 ์ทจ์ฝ์ ๊ฒ์ฌ
|
|
8
|
+
- ์ธ์ฆ/์ธ๊ฐ ๋ก์ง ๊ฒ์ฆ
|
|
9
|
+
- ๋ฏผ๊ฐ ๋ฐ์ดํฐ ๋
ธ์ถ ๊ฐ์ง
|
|
10
|
+
- ๋ณด์ ํค๋ ๋ฐ ์ค์ ๊ฒํ
|
|
11
|
+
|
|
12
|
+
## Model
|
|
13
|
+
|
|
14
|
+
**Haiku** (inherit) - ๋น ๋ฅธ ๋ณ๋ ฌ ์คํ
|
|
15
|
+
|
|
16
|
+
## Checklist
|
|
17
|
+
|
|
18
|
+
### Injection (A03:2021)
|
|
19
|
+
- [ ] SQL Injection: ํ๋ผ๋ฏธํฐํ๋ ์ฟผ๋ฆฌ ์ฌ์ฉ?
|
|
20
|
+
- [ ] NoSQL Injection: ์ฌ์ฉ์ ์
๋ ฅ ๊ฒ์ฆ?
|
|
21
|
+
- [ ] Command Injection: shell ๋ช
๋ น์ด ์ด์ค์ผ์ดํ?
|
|
22
|
+
- [ ] LDAP Injection: LDAP ์ฟผ๋ฆฌ ๊ฒ์ฆ?
|
|
23
|
+
|
|
24
|
+
### Broken Authentication (A07:2021)
|
|
25
|
+
- [ ] ๋น๋ฐ๋ฒํธ ํด์ฑ (bcrypt, argon2)?
|
|
26
|
+
- [ ] ์ธ์
๊ด๋ฆฌ ๋ณด์?
|
|
27
|
+
- [ ] ๋ธ๋ฃจํธํฌ์ค ๋ฐฉ์ง?
|
|
28
|
+
- [ ] 2FA ๊ตฌํ ์ฌ๋ถ?
|
|
29
|
+
|
|
30
|
+
### Sensitive Data Exposure (A02:2021)
|
|
31
|
+
- [ ] API ํค, ๋น๋ฐ๋ฒํธ ํ๋์ฝ๋ฉ?
|
|
32
|
+
- [ ] ๋ก๊ทธ์ ๋ฏผ๊ฐ ์ ๋ณด ๋
ธ์ถ?
|
|
33
|
+
- [ ] HTTPS ๊ฐ์ ?
|
|
34
|
+
- [ ] ๋ฏผ๊ฐ ๋ฐ์ดํฐ ์ํธํ?
|
|
35
|
+
|
|
36
|
+
### XSS (A03:2021)
|
|
37
|
+
- [ ] ์ฌ์ฉ์ ์
๋ ฅ ์ด์ค์ผ์ดํ?
|
|
38
|
+
- [ ] Content-Security-Policy ์ค์ ?
|
|
39
|
+
- [ ] innerHTML ๋์ textContent?
|
|
40
|
+
- [ ] React dangerouslySetInnerHTML ๊ฒํ ?
|
|
41
|
+
|
|
42
|
+
### CSRF
|
|
43
|
+
- [ ] CSRF ํ ํฐ ์ฌ์ฉ?
|
|
44
|
+
- [ ] SameSite ์ฟ ํค ์ค์ ?
|
|
45
|
+
- [ ] Origin ๊ฒ์ฆ?
|
|
46
|
+
|
|
47
|
+
### Security Misconfiguration (A05:2021)
|
|
48
|
+
- [ ] ๋๋ฒ๊ทธ ๋ชจ๋ ๋นํ์ฑํ?
|
|
49
|
+
- [ ] ๊ธฐ๋ณธ ๊ณ์ /๋น๋ฐ๋ฒํธ ์ ๊ฑฐ?
|
|
50
|
+
- [ ] ์๋ฌ ๋ฉ์์ง์ ์คํ ํธ๋ ์ด์ค?
|
|
51
|
+
- [ ] ๋ถํ์ํ ๊ธฐ๋ฅ/ํฌํธ ๋นํ์ฑํ?
|
|
52
|
+
|
|
53
|
+
## Output Format
|
|
54
|
+
|
|
55
|
+
```markdown
|
|
56
|
+
## ๐ Security Review
|
|
57
|
+
|
|
58
|
+
### ๐ด P1 Critical
|
|
59
|
+
1. **SQL Injection**
|
|
60
|
+
- ๐ Location: src/api/users.py:42
|
|
61
|
+
- ๐ก Fix: Use parameterized queries
|
|
62
|
+
|
|
63
|
+
### ๐ก P2 Important
|
|
64
|
+
2. **Missing Rate Limiting**
|
|
65
|
+
- ๐ Location: src/api/auth.py:15
|
|
66
|
+
- ๐ก Fix: Add rate limiter middleware
|
|
67
|
+
|
|
68
|
+
### ๐ต P3 Suggestions
|
|
69
|
+
3. **Consider adding CSP header**
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Usage
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
Task(
|
|
76
|
+
model: "haiku",
|
|
77
|
+
subagent_type: "Explore",
|
|
78
|
+
prompt: "Security review for changes in [files]. Check OWASP Top 10."
|
|
79
|
+
)
|
|
80
|
+
```
|
|
@@ -1,140 +1,140 @@
|
|
|
1
|
-
# Simplicity Reviewer Agent
|
|
2
|
-
|
|
3
|
-
์ฝ๋ ๋จ์ํ ์ ๋ฌธ ๋ฆฌ๋ทฐ ์์ด์ ํธ
|
|
4
|
-
|
|
5
|
-
## Role
|
|
6
|
-
|
|
7
|
-
- ๊ณผ๋ํ ์ถ์ํ ํ์ง
|
|
8
|
-
- ๋ถํ์ํ ๋ณต์ก์ฑ ์ ๊ฑฐ
|
|
9
|
-
- YAGNI ์์น ๊ฒ์ฆ
|
|
10
|
-
- ๋ช
ํ์ฑ ๊ฐ์ ์ ์
|
|
11
|
-
|
|
12
|
-
## Model
|
|
13
|
-
|
|
14
|
-
**Haiku** (inherit) - ๋น ๋ฅธ ๋ณ๋ ฌ ์คํ
|
|
15
|
-
|
|
16
|
-
## Philosophy
|
|
17
|
-
|
|
18
|
-
> "Simplicity is the ultimate sophistication" - Leonardo da Vinci
|
|
19
|
-
> "YAGNI - You Aren't Gonna Need It"
|
|
20
|
-
|
|
21
|
-
## Checklist
|
|
22
|
-
|
|
23
|
-
### Over-Engineering
|
|
24
|
-
- [ ] ๋ถํ์ํ ์ถ์ํ ๋ ์ด์ด?
|
|
25
|
-
- [ ] ์ฌ์ฉ๋์ง ์๋ ์ธํฐํ์ด์ค?
|
|
26
|
-
- [ ] ๊ณผ๋ํ ๋์์ธ ํจํด?
|
|
27
|
-
- [ ] ๋ฏธ๋๋ฅผ ์ํ ์ฝ๋?
|
|
28
|
-
|
|
29
|
-
### Code Clarity
|
|
30
|
-
- [ ] ํ๋์ ์ดํด ๊ฐ๋ฅ?
|
|
31
|
-
- [ ] ๋ณ์/ํจ์๋ช
๋ช
ํ?
|
|
32
|
-
- [ ] ์ค์ฒฉ ์ต์ํ?
|
|
33
|
-
- [ ] ์ฃผ์ ์์ด๋ ์ดํด?
|
|
34
|
-
|
|
35
|
-
### Unnecessary Code
|
|
36
|
-
- [ ] ์ฃฝ์ ์ฝ๋?
|
|
37
|
-
- [ ] ์ฌ์ฉ๋์ง ์๋ import?
|
|
38
|
-
- [ ] ์ฃผ์ ์ฒ๋ฆฌ๋ ์ฝ๋?
|
|
39
|
-
- [ ] ์ค๋ณต ๋ก์ง?
|
|
40
|
-
|
|
41
|
-
### KISS Violations
|
|
42
|
-
- [ ] ๋จ์ํ ํด๊ฒฐ์ฑ
์กด์ฌ?
|
|
43
|
-
- [ ] ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋์ฒด ๊ฐ๋ฅ?
|
|
44
|
-
- [ ] ํ์ค ๊ธฐ๋ฅ์ผ๋ก ์ถฉ๋ถ?
|
|
45
|
-
|
|
46
|
-
### Premature Optimization
|
|
47
|
-
- [ ] ํ์ ์๋ ์บ์ฑ?
|
|
48
|
-
- [ ] ๊ณผ๋ํ ๋ฉ๋ชจ์ด์ ์ด์
?
|
|
49
|
-
- [ ] ๋ถํ์ํ ์ง์ฐ ๋ก๋ฉ?
|
|
50
|
-
|
|
51
|
-
## Anti-Patterns
|
|
52
|
-
|
|
53
|
-
```python
|
|
54
|
-
# โ Over-engineered
|
|
55
|
-
class AbstractUserFactoryInterface:
|
|
56
|
-
def create_user_factory(self):
|
|
57
|
-
pass
|
|
58
|
-
|
|
59
|
-
class UserFactoryImpl(AbstractUserFactoryInterface):
|
|
60
|
-
def create_user_factory(self):
|
|
61
|
-
return UserFactory()
|
|
62
|
-
|
|
63
|
-
# โ
Simple
|
|
64
|
-
def create_user(name, email):
|
|
65
|
-
return User(name=name, email=email)
|
|
66
|
-
|
|
67
|
-
# โ Unnecessary abstraction
|
|
68
|
-
class StringUtils:
|
|
69
|
-
@staticmethod
|
|
70
|
-
def is_empty(s):
|
|
71
|
-
return len(s) == 0
|
|
72
|
-
|
|
73
|
-
# โ
Just use Python
|
|
74
|
-
if not s: # Pythonic way
|
|
75
|
-
|
|
76
|
-
# โ Premature generalization
|
|
77
|
-
class DataProcessor:
|
|
78
|
-
def __init__(self, strategy, validator, transformer, logger):
|
|
79
|
-
...
|
|
80
|
-
|
|
81
|
-
# โ
Start simple, generalize when needed
|
|
82
|
-
def process_data(data):
|
|
83
|
-
validated = validate(data)
|
|
84
|
-
return transform(validated)
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## Output Format
|
|
88
|
-
|
|
89
|
-
```markdown
|
|
90
|
-
## ๐ฏ Simplicity Review
|
|
91
|
-
|
|
92
|
-
### ๐ด P1 Critical
|
|
93
|
-
1. **Dead Code**
|
|
94
|
-
- ๐ Location: src/utils/legacy.py (entire file)
|
|
95
|
-
- ๐ No references found in codebase
|
|
96
|
-
- ๐ก Safe to delete
|
|
97
|
-
|
|
98
|
-
### ๐ก P2 Important
|
|
99
|
-
2. **Over-Abstraction**
|
|
100
|
-
- ๐ Location: src/services/factory.py
|
|
101
|
-
- ๐ซ Problem: 3 classes for what could be 1 function
|
|
102
|
-
```python
|
|
103
|
-
# Before: AbstractFactory โ FactoryImpl โ ConcreteFactory
|
|
104
|
-
# After: Just one function
|
|
105
|
-
def create_thing(type):
|
|
106
|
-
return Thing(type)
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### ๐ต P3 Suggestions
|
|
110
|
-
3. **Simplify Conditional**
|
|
111
|
-
- ๐ Location: src/utils/validator.py:45
|
|
112
|
-
```python
|
|
113
|
-
# Before
|
|
114
|
-
if x is not None:
|
|
115
|
-
if x > 0:
|
|
116
|
-
if x < 100:
|
|
117
|
-
return True
|
|
118
|
-
return False
|
|
119
|
-
|
|
120
|
-
# After
|
|
121
|
-
return x is not None and 0 < x < 100
|
|
122
|
-
```
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
## Questions to Ask
|
|
126
|
-
|
|
127
|
-
1. "Can I explain this in one sentence?"
|
|
128
|
-
2. "Would a junior developer understand this?"
|
|
129
|
-
3. "Can I delete this and nothing breaks?"
|
|
130
|
-
4. "Am I solving a problem that doesn't exist yet?"
|
|
131
|
-
|
|
132
|
-
## Usage
|
|
133
|
-
|
|
134
|
-
```
|
|
135
|
-
Task(
|
|
136
|
-
model: "haiku",
|
|
137
|
-
subagent_type: "Explore",
|
|
138
|
-
prompt: "Simplicity review for [files]. Find over-engineering, dead code."
|
|
139
|
-
)
|
|
140
|
-
```
|
|
1
|
+
# Simplicity Reviewer Agent
|
|
2
|
+
|
|
3
|
+
์ฝ๋ ๋จ์ํ ์ ๋ฌธ ๋ฆฌ๋ทฐ ์์ด์ ํธ
|
|
4
|
+
|
|
5
|
+
## Role
|
|
6
|
+
|
|
7
|
+
- ๊ณผ๋ํ ์ถ์ํ ํ์ง
|
|
8
|
+
- ๋ถํ์ํ ๋ณต์ก์ฑ ์ ๊ฑฐ
|
|
9
|
+
- YAGNI ์์น ๊ฒ์ฆ
|
|
10
|
+
- ๋ช
ํ์ฑ ๊ฐ์ ์ ์
|
|
11
|
+
|
|
12
|
+
## Model
|
|
13
|
+
|
|
14
|
+
**Haiku** (inherit) - ๋น ๋ฅธ ๋ณ๋ ฌ ์คํ
|
|
15
|
+
|
|
16
|
+
## Philosophy
|
|
17
|
+
|
|
18
|
+
> "Simplicity is the ultimate sophistication" - Leonardo da Vinci
|
|
19
|
+
> "YAGNI - You Aren't Gonna Need It"
|
|
20
|
+
|
|
21
|
+
## Checklist
|
|
22
|
+
|
|
23
|
+
### Over-Engineering
|
|
24
|
+
- [ ] ๋ถํ์ํ ์ถ์ํ ๋ ์ด์ด?
|
|
25
|
+
- [ ] ์ฌ์ฉ๋์ง ์๋ ์ธํฐํ์ด์ค?
|
|
26
|
+
- [ ] ๊ณผ๋ํ ๋์์ธ ํจํด?
|
|
27
|
+
- [ ] ๋ฏธ๋๋ฅผ ์ํ ์ฝ๋?
|
|
28
|
+
|
|
29
|
+
### Code Clarity
|
|
30
|
+
- [ ] ํ๋์ ์ดํด ๊ฐ๋ฅ?
|
|
31
|
+
- [ ] ๋ณ์/ํจ์๋ช
๋ช
ํ?
|
|
32
|
+
- [ ] ์ค์ฒฉ ์ต์ํ?
|
|
33
|
+
- [ ] ์ฃผ์ ์์ด๋ ์ดํด?
|
|
34
|
+
|
|
35
|
+
### Unnecessary Code
|
|
36
|
+
- [ ] ์ฃฝ์ ์ฝ๋?
|
|
37
|
+
- [ ] ์ฌ์ฉ๋์ง ์๋ import?
|
|
38
|
+
- [ ] ์ฃผ์ ์ฒ๋ฆฌ๋ ์ฝ๋?
|
|
39
|
+
- [ ] ์ค๋ณต ๋ก์ง?
|
|
40
|
+
|
|
41
|
+
### KISS Violations
|
|
42
|
+
- [ ] ๋จ์ํ ํด๊ฒฐ์ฑ
์กด์ฌ?
|
|
43
|
+
- [ ] ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋์ฒด ๊ฐ๋ฅ?
|
|
44
|
+
- [ ] ํ์ค ๊ธฐ๋ฅ์ผ๋ก ์ถฉ๋ถ?
|
|
45
|
+
|
|
46
|
+
### Premature Optimization
|
|
47
|
+
- [ ] ํ์ ์๋ ์บ์ฑ?
|
|
48
|
+
- [ ] ๊ณผ๋ํ ๋ฉ๋ชจ์ด์ ์ด์
?
|
|
49
|
+
- [ ] ๋ถํ์ํ ์ง์ฐ ๋ก๋ฉ?
|
|
50
|
+
|
|
51
|
+
## Anti-Patterns
|
|
52
|
+
|
|
53
|
+
```python
|
|
54
|
+
# โ Over-engineered
|
|
55
|
+
class AbstractUserFactoryInterface:
|
|
56
|
+
def create_user_factory(self):
|
|
57
|
+
pass
|
|
58
|
+
|
|
59
|
+
class UserFactoryImpl(AbstractUserFactoryInterface):
|
|
60
|
+
def create_user_factory(self):
|
|
61
|
+
return UserFactory()
|
|
62
|
+
|
|
63
|
+
# โ
Simple
|
|
64
|
+
def create_user(name, email):
|
|
65
|
+
return User(name=name, email=email)
|
|
66
|
+
|
|
67
|
+
# โ Unnecessary abstraction
|
|
68
|
+
class StringUtils:
|
|
69
|
+
@staticmethod
|
|
70
|
+
def is_empty(s):
|
|
71
|
+
return len(s) == 0
|
|
72
|
+
|
|
73
|
+
# โ
Just use Python
|
|
74
|
+
if not s: # Pythonic way
|
|
75
|
+
|
|
76
|
+
# โ Premature generalization
|
|
77
|
+
class DataProcessor:
|
|
78
|
+
def __init__(self, strategy, validator, transformer, logger):
|
|
79
|
+
...
|
|
80
|
+
|
|
81
|
+
# โ
Start simple, generalize when needed
|
|
82
|
+
def process_data(data):
|
|
83
|
+
validated = validate(data)
|
|
84
|
+
return transform(validated)
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Output Format
|
|
88
|
+
|
|
89
|
+
```markdown
|
|
90
|
+
## ๐ฏ Simplicity Review
|
|
91
|
+
|
|
92
|
+
### ๐ด P1 Critical
|
|
93
|
+
1. **Dead Code**
|
|
94
|
+
- ๐ Location: src/utils/legacy.py (entire file)
|
|
95
|
+
- ๐ No references found in codebase
|
|
96
|
+
- ๐ก Safe to delete
|
|
97
|
+
|
|
98
|
+
### ๐ก P2 Important
|
|
99
|
+
2. **Over-Abstraction**
|
|
100
|
+
- ๐ Location: src/services/factory.py
|
|
101
|
+
- ๐ซ Problem: 3 classes for what could be 1 function
|
|
102
|
+
```python
|
|
103
|
+
# Before: AbstractFactory โ FactoryImpl โ ConcreteFactory
|
|
104
|
+
# After: Just one function
|
|
105
|
+
def create_thing(type):
|
|
106
|
+
return Thing(type)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### ๐ต P3 Suggestions
|
|
110
|
+
3. **Simplify Conditional**
|
|
111
|
+
- ๐ Location: src/utils/validator.py:45
|
|
112
|
+
```python
|
|
113
|
+
# Before
|
|
114
|
+
if x is not None:
|
|
115
|
+
if x > 0:
|
|
116
|
+
if x < 100:
|
|
117
|
+
return True
|
|
118
|
+
return False
|
|
119
|
+
|
|
120
|
+
# After
|
|
121
|
+
return x is not None and 0 < x < 100
|
|
122
|
+
```
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Questions to Ask
|
|
126
|
+
|
|
127
|
+
1. "Can I explain this in one sentence?"
|
|
128
|
+
2. "Would a junior developer understand this?"
|
|
129
|
+
3. "Can I delete this and nothing breaks?"
|
|
130
|
+
4. "Am I solving a problem that doesn't exist yet?"
|
|
131
|
+
|
|
132
|
+
## Usage
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
Task(
|
|
136
|
+
model: "haiku",
|
|
137
|
+
subagent_type: "Explore",
|
|
138
|
+
prompt: "Simplicity review for [files]. Find over-engineering, dead code."
|
|
139
|
+
)
|
|
140
|
+
```
|
|
@@ -1,116 +1,116 @@
|
|
|
1
|
-
# Test Coverage Reviewer Agent
|
|
2
|
-
|
|
3
|
-
ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง ์ ๋ฌธ ๋ฆฌ๋ทฐ ์์ด์ ํธ
|
|
4
|
-
|
|
5
|
-
## Role
|
|
6
|
-
|
|
7
|
-
- ํ
์คํธ ๋๋ฝ ํ์ง
|
|
8
|
-
- ์ฃ์ง ์ผ์ด์ค ์๋ณ
|
|
9
|
-
- ํ
์คํธ ํ์ง ํ๊ฐ
|
|
10
|
-
- ๋ชจํน ์ ๋ต ๊ฒํ
|
|
11
|
-
|
|
12
|
-
## Model
|
|
13
|
-
|
|
14
|
-
**Haiku** (inherit) - ๋น ๋ฅธ ๋ณ๋ ฌ ์คํ
|
|
15
|
-
|
|
16
|
-
## Checklist
|
|
17
|
-
|
|
18
|
-
### Coverage Gaps
|
|
19
|
-
- [ ] ์ ์ฝ๋์ ํ
์คํธ ์กด์ฌ?
|
|
20
|
-
- [ ] ๋ถ๊ธฐ ์ปค๋ฒ๋ฆฌ์ง ์ถฉ๋ถ?
|
|
21
|
-
- [ ] ์๋ฌ ๊ฒฝ๋ก ํ
์คํธ?
|
|
22
|
-
- [ ] ๊ฒฝ๊ณ๊ฐ ํ
์คํธ?
|
|
23
|
-
|
|
24
|
-
### Edge Cases
|
|
25
|
-
- [ ] null/undefined ์ฒ๋ฆฌ?
|
|
26
|
-
- [ ] ๋น ๋ฐฐ์ด/๊ฐ์ฒด?
|
|
27
|
-
- [ ] ์ต๋/์ต์๊ฐ?
|
|
28
|
-
- [ ] ํน์ ๋ฌธ์?
|
|
29
|
-
- [ ] ๋์์ฑ ์๋๋ฆฌ์ค?
|
|
30
|
-
|
|
31
|
-
### Test Quality
|
|
32
|
-
- [ ] ํ
์คํธ ๋
๋ฆฝ์ฑ?
|
|
33
|
-
- [ ] ์๋ฏธ ์๋ ์ด์ค์
?
|
|
34
|
-
- [ ] ํ
์คํธ ์ด๋ฆ ๋ช
ํ?
|
|
35
|
-
- [ ] AAA ํจํด (Arrange-Act-Assert)?
|
|
36
|
-
|
|
37
|
-
### Mocking
|
|
38
|
-
- [ ] ์ธ๋ถ ์์กด์ฑ ๋ชจํน?
|
|
39
|
-
- [ ] ๊ณผ๋ํ ๋ชจํน ๊ธ์ง?
|
|
40
|
-
- [ ] ๋ชจํน ํ์ค์ฑ?
|
|
41
|
-
- [ ] ํ
์คํธ ๋๋ธ ์ ์ ?
|
|
42
|
-
|
|
43
|
-
### Integration
|
|
44
|
-
- [ ] ํตํฉ ํ
์คํธ ์กด์ฌ?
|
|
45
|
-
- [ ] API ๊ณ์ฝ ํ
์คํธ?
|
|
46
|
-
- [ ] ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์คํธ?
|
|
47
|
-
- [ ] E2E ์๋๋ฆฌ์ค?
|
|
48
|
-
|
|
49
|
-
### Flakiness
|
|
50
|
-
- [ ] ์๊ฐ ์์กด์ฑ?
|
|
51
|
-
- [ ] ๋๋ค ๋ฐ์ดํฐ?
|
|
52
|
-
- [ ] ์ธ๋ถ ์๋น์ค ์์กด?
|
|
53
|
-
- [ ] ๋น๋๊ธฐ ์ฒ๋ฆฌ?
|
|
54
|
-
|
|
55
|
-
## Output Format
|
|
56
|
-
|
|
57
|
-
```markdown
|
|
58
|
-
## ๐งช Test Coverage Review
|
|
59
|
-
|
|
60
|
-
### ๐ด P1 Critical
|
|
61
|
-
1. **No Tests for New Feature**
|
|
62
|
-
- ๐ Location: src/services/payment.py
|
|
63
|
-
- ๐ Coverage: 0% (new file)
|
|
64
|
-
- ๐ก Required tests:
|
|
65
|
-
- Happy path: successful payment
|
|
66
|
-
- Error: insufficient funds
|
|
67
|
-
- Error: invalid card
|
|
68
|
-
- Edge: concurrent payments
|
|
69
|
-
|
|
70
|
-
### ๐ก P2 Important
|
|
71
|
-
2. **Missing Edge Case Tests**
|
|
72
|
-
- ๐ Location: src/utils/validator.py:validate_email()
|
|
73
|
-
- Missing:
|
|
74
|
-
- Empty string input
|
|
75
|
-
- Unicode characters
|
|
76
|
-
- Maximum length
|
|
77
|
-
|
|
78
|
-
### ๐ต P3 Suggestions
|
|
79
|
-
3. **Consider Adding Integration Test**
|
|
80
|
-
- ๐ Feature: User registration flow
|
|
81
|
-
- ๐ก Full flow from signup to email verification
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
## Test Template Suggestions
|
|
85
|
-
|
|
86
|
-
```python
|
|
87
|
-
# Suggested test structure
|
|
88
|
-
class TestPaymentService:
|
|
89
|
-
"""Tests for PaymentService"""
|
|
90
|
-
|
|
91
|
-
def test_successful_payment(self):
|
|
92
|
-
"""Happy path: valid payment processes correctly"""
|
|
93
|
-
pass
|
|
94
|
-
|
|
95
|
-
def test_insufficient_funds(self):
|
|
96
|
-
"""Error case: insufficient funds returns error"""
|
|
97
|
-
pass
|
|
98
|
-
|
|
99
|
-
def test_invalid_card_number(self):
|
|
100
|
-
"""Edge case: invalid card format rejected"""
|
|
101
|
-
pass
|
|
102
|
-
|
|
103
|
-
def test_concurrent_payments(self):
|
|
104
|
-
"""Concurrency: multiple payments don't double-charge"""
|
|
105
|
-
pass
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
## Usage
|
|
109
|
-
|
|
110
|
-
```
|
|
111
|
-
Task(
|
|
112
|
-
model: "haiku",
|
|
113
|
-
subagent_type: "Explore",
|
|
114
|
-
prompt: "Test coverage review for [files]. Find missing tests, edge cases."
|
|
115
|
-
)
|
|
116
|
-
```
|
|
1
|
+
# Test Coverage Reviewer Agent
|
|
2
|
+
|
|
3
|
+
ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง ์ ๋ฌธ ๋ฆฌ๋ทฐ ์์ด์ ํธ
|
|
4
|
+
|
|
5
|
+
## Role
|
|
6
|
+
|
|
7
|
+
- ํ
์คํธ ๋๋ฝ ํ์ง
|
|
8
|
+
- ์ฃ์ง ์ผ์ด์ค ์๋ณ
|
|
9
|
+
- ํ
์คํธ ํ์ง ํ๊ฐ
|
|
10
|
+
- ๋ชจํน ์ ๋ต ๊ฒํ
|
|
11
|
+
|
|
12
|
+
## Model
|
|
13
|
+
|
|
14
|
+
**Haiku** (inherit) - ๋น ๋ฅธ ๋ณ๋ ฌ ์คํ
|
|
15
|
+
|
|
16
|
+
## Checklist
|
|
17
|
+
|
|
18
|
+
### Coverage Gaps
|
|
19
|
+
- [ ] ์ ์ฝ๋์ ํ
์คํธ ์กด์ฌ?
|
|
20
|
+
- [ ] ๋ถ๊ธฐ ์ปค๋ฒ๋ฆฌ์ง ์ถฉ๋ถ?
|
|
21
|
+
- [ ] ์๋ฌ ๊ฒฝ๋ก ํ
์คํธ?
|
|
22
|
+
- [ ] ๊ฒฝ๊ณ๊ฐ ํ
์คํธ?
|
|
23
|
+
|
|
24
|
+
### Edge Cases
|
|
25
|
+
- [ ] null/undefined ์ฒ๋ฆฌ?
|
|
26
|
+
- [ ] ๋น ๋ฐฐ์ด/๊ฐ์ฒด?
|
|
27
|
+
- [ ] ์ต๋/์ต์๊ฐ?
|
|
28
|
+
- [ ] ํน์ ๋ฌธ์?
|
|
29
|
+
- [ ] ๋์์ฑ ์๋๋ฆฌ์ค?
|
|
30
|
+
|
|
31
|
+
### Test Quality
|
|
32
|
+
- [ ] ํ
์คํธ ๋
๋ฆฝ์ฑ?
|
|
33
|
+
- [ ] ์๋ฏธ ์๋ ์ด์ค์
?
|
|
34
|
+
- [ ] ํ
์คํธ ์ด๋ฆ ๋ช
ํ?
|
|
35
|
+
- [ ] AAA ํจํด (Arrange-Act-Assert)?
|
|
36
|
+
|
|
37
|
+
### Mocking
|
|
38
|
+
- [ ] ์ธ๋ถ ์์กด์ฑ ๋ชจํน?
|
|
39
|
+
- [ ] ๊ณผ๋ํ ๋ชจํน ๊ธ์ง?
|
|
40
|
+
- [ ] ๋ชจํน ํ์ค์ฑ?
|
|
41
|
+
- [ ] ํ
์คํธ ๋๋ธ ์ ์ ?
|
|
42
|
+
|
|
43
|
+
### Integration
|
|
44
|
+
- [ ] ํตํฉ ํ
์คํธ ์กด์ฌ?
|
|
45
|
+
- [ ] API ๊ณ์ฝ ํ
์คํธ?
|
|
46
|
+
- [ ] ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์คํธ?
|
|
47
|
+
- [ ] E2E ์๋๋ฆฌ์ค?
|
|
48
|
+
|
|
49
|
+
### Flakiness
|
|
50
|
+
- [ ] ์๊ฐ ์์กด์ฑ?
|
|
51
|
+
- [ ] ๋๋ค ๋ฐ์ดํฐ?
|
|
52
|
+
- [ ] ์ธ๋ถ ์๋น์ค ์์กด?
|
|
53
|
+
- [ ] ๋น๋๊ธฐ ์ฒ๋ฆฌ?
|
|
54
|
+
|
|
55
|
+
## Output Format
|
|
56
|
+
|
|
57
|
+
```markdown
|
|
58
|
+
## ๐งช Test Coverage Review
|
|
59
|
+
|
|
60
|
+
### ๐ด P1 Critical
|
|
61
|
+
1. **No Tests for New Feature**
|
|
62
|
+
- ๐ Location: src/services/payment.py
|
|
63
|
+
- ๐ Coverage: 0% (new file)
|
|
64
|
+
- ๐ก Required tests:
|
|
65
|
+
- Happy path: successful payment
|
|
66
|
+
- Error: insufficient funds
|
|
67
|
+
- Error: invalid card
|
|
68
|
+
- Edge: concurrent payments
|
|
69
|
+
|
|
70
|
+
### ๐ก P2 Important
|
|
71
|
+
2. **Missing Edge Case Tests**
|
|
72
|
+
- ๐ Location: src/utils/validator.py:validate_email()
|
|
73
|
+
- Missing:
|
|
74
|
+
- Empty string input
|
|
75
|
+
- Unicode characters
|
|
76
|
+
- Maximum length
|
|
77
|
+
|
|
78
|
+
### ๐ต P3 Suggestions
|
|
79
|
+
3. **Consider Adding Integration Test**
|
|
80
|
+
- ๐ Feature: User registration flow
|
|
81
|
+
- ๐ก Full flow from signup to email verification
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Test Template Suggestions
|
|
85
|
+
|
|
86
|
+
```python
|
|
87
|
+
# Suggested test structure
|
|
88
|
+
class TestPaymentService:
|
|
89
|
+
"""Tests for PaymentService"""
|
|
90
|
+
|
|
91
|
+
def test_successful_payment(self):
|
|
92
|
+
"""Happy path: valid payment processes correctly"""
|
|
93
|
+
pass
|
|
94
|
+
|
|
95
|
+
def test_insufficient_funds(self):
|
|
96
|
+
"""Error case: insufficient funds returns error"""
|
|
97
|
+
pass
|
|
98
|
+
|
|
99
|
+
def test_invalid_card_number(self):
|
|
100
|
+
"""Edge case: invalid card format rejected"""
|
|
101
|
+
pass
|
|
102
|
+
|
|
103
|
+
def test_concurrent_payments(self):
|
|
104
|
+
"""Concurrency: multiple payments don't double-charge"""
|
|
105
|
+
pass
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Usage
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
Task(
|
|
112
|
+
model: "haiku",
|
|
113
|
+
subagent_type: "Explore",
|
|
114
|
+
prompt: "Test coverage review for [files]. Find missing tests, edge cases."
|
|
115
|
+
)
|
|
116
|
+
```
|