@su-record/vibe 2.4.34 → 2.4.35
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.md +345 -351
- package/LICENSE +21 -21
- package/README.md +210 -210
- 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 +178 -178
- package/agents/research/security-advisory-agent.md +164 -164
- 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 +150 -150
- 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 +129 -129
- package/commands/vibe.analyze.md +260 -260
- package/commands/vibe.reason.md +223 -223
- package/commands/vibe.review.md +213 -213
- package/commands/vibe.run.md +931 -931
- package/commands/vibe.spec.md +442 -442
- package/commands/vibe.utils.md +101 -101
- package/commands/vibe.verify.md +282 -282
- package/dist/cli/collaborator.js +52 -52
- package/dist/cli/detect.js +32 -32
- package/dist/cli/index.js +137 -137
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/llm.js +147 -147
- package/dist/cli/llm.js.map +1 -1
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +48 -54
- package/dist/cli/setup.js.map +1 -1
- package/dist/lib/MemoryManager.d.ts +4 -0
- package/dist/lib/MemoryManager.d.ts.map +1 -1
- package/dist/lib/MemoryManager.js +21 -2
- package/dist/lib/MemoryManager.js.map +1 -1
- package/dist/lib/PythonParser.js +108 -108
- package/dist/lib/gemini-api.d.ts +13 -3
- package/dist/lib/gemini-api.d.ts.map +1 -1
- package/dist/lib/gemini-api.js +198 -7
- package/dist/lib/gemini-api.js.map +1 -1
- package/dist/lib/gpt-api.d.ts +5 -4
- package/dist/lib/gpt-api.d.ts.map +1 -1
- package/dist/lib/gpt-api.js +168 -12
- package/dist/lib/gpt-api.js.map +1 -1
- package/dist/tools/memory/saveMemory.js +1 -1
- package/dist/tools/memory/saveMemory.js.map +1 -1
- package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
- package/hooks/hooks.json +195 -195
- package/languages/dart-flutter.md +509 -0
- package/languages/go.md +396 -0
- package/languages/java-spring.md +586 -0
- package/languages/kotlin-android.md +491 -0
- package/languages/python-django.md +371 -0
- package/languages/python-fastapi.md +386 -0
- package/languages/rust.md +425 -0
- package/languages/swift-ios.md +516 -0
- package/languages/typescript-nextjs.md +441 -0
- package/languages/typescript-node.md +375 -0
- package/languages/typescript-nuxt.md +521 -0
- package/languages/typescript-react-native.md +446 -0
- package/languages/typescript-react.md +525 -0
- package/languages/typescript-vue.md +353 -0
- package/package.json +88 -87
- package/skills/context7-usage.md +82 -82
- package/skills/git-worktree.md +181 -181
- package/skills/multi-llm-orchestration.md +92 -92
- package/skills/parallel-research.md +77 -77
- package/skills/priority-todos.md +239 -239
- package/skills/tool-fallback.md +126 -126
- package/skills/vibe-capabilities.md +129 -129
- package/{.claude/vibe → vibe}/config.json +3 -3
- package/{.claude/vibe → vibe}/constitution.md +184 -184
- package/{.claude/vibe → vibe}/rules/core/communication-guide.md +104 -104
- package/{.claude/vibe → vibe}/rules/core/development-philosophy.md +52 -52
- package/{.claude/vibe → vibe}/rules/core/quick-start.md +120 -120
- package/{.claude/vibe → vibe}/rules/quality/bdd-contract-testing.md +388 -388
- package/{.claude/vibe → vibe}/rules/quality/checklist.md +276 -276
- package/{.claude/vibe → vibe}/rules/quality/testing-strategy.md +437 -437
- package/{.claude/vibe → vibe}/rules/standards/anti-patterns.md +369 -369
- package/{.claude/vibe → vibe}/rules/standards/code-structure.md +291 -291
- package/{.claude/vibe → vibe}/rules/standards/complexity-metrics.md +312 -312
- package/{.claude/vibe → vibe}/rules/standards/naming-conventions.md +198 -198
- package/{.claude/vibe → vibe}/setup.sh +31 -31
- package/{.claude/vibe → vibe}/templates/constitution-template.md +184 -184
- package/{.claude/vibe → vibe}/templates/contract-backend-template.md +517 -517
- package/{.claude/vibe → vibe}/templates/contract-frontend-template.md +594 -594
- package/{.claude/vibe → vibe}/templates/feature-template.md +96 -96
- package/{.claude/vibe → vibe}/templates/spec-template.md +199 -199
package/hooks/hooks.json
CHANGED
|
@@ -1,195 +1,195 @@
|
|
|
1
|
-
{
|
|
2
|
-
"permissions": {
|
|
3
|
-
"allow": [],
|
|
4
|
-
"deny": [],
|
|
5
|
-
"ask": []
|
|
6
|
-
},
|
|
7
|
-
"hooks": {
|
|
8
|
-
"SessionStart": [
|
|
9
|
-
{
|
|
10
|
-
"hooks": [
|
|
11
|
-
{
|
|
12
|
-
"type": "command",
|
|
13
|
-
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/';const p=
|
|
14
|
-
}
|
|
15
|
-
]
|
|
16
|
-
}
|
|
17
|
-
],
|
|
18
|
-
"PreToolUse": [
|
|
19
|
-
{
|
|
20
|
-
"matcher": "Bash",
|
|
21
|
-
"hooks": [
|
|
22
|
-
{
|
|
23
|
-
"type": "command",
|
|
24
|
-
"command": "echo '[BASH CHECK] Be cautious with destructive commands (rm -rf, git push --force, drop table). Verify paths before deletion.'"
|
|
25
|
-
}
|
|
26
|
-
]
|
|
27
|
-
}
|
|
28
|
-
],
|
|
29
|
-
"PostToolUse": [
|
|
30
|
-
{
|
|
31
|
-
"matcher": "Write|Edit",
|
|
32
|
-
"hooks": [
|
|
33
|
-
{
|
|
34
|
-
"type": "command",
|
|
35
|
-
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/convention/index.js';const p=
|
|
36
|
-
}
|
|
37
|
-
]
|
|
38
|
-
}
|
|
39
|
-
],
|
|
40
|
-
"UserPromptSubmit": [
|
|
41
|
-
{
|
|
42
|
-
"hooks": [
|
|
43
|
-
{
|
|
44
|
-
"type": "command",
|
|
45
|
-
"command": "echo '[MANDATORY SKILL PROTOCOL] Available skills: vibe-capabilities (vibe features), multi-llm-orchestration (GPT/Gemini usage), tool-fallback (error recovery), context7-usage (library docs), parallel-research (complex problems), git-worktree (branch work), priority-todos (task management). Step 1: For EACH skill state YES/NO with reason. Step 2: Use Skill(name) for YES skills NOW. Step 3: IMPLEMENT only after activation. CRITICAL: Skipping activation makes response WORTHLESS.'",
|
|
46
|
-
"statusMessage": "Evaluating skills..."
|
|
47
|
-
}
|
|
48
|
-
]
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"matcher": "ultrawork|ulw|울트라워크",
|
|
52
|
-
"hooks": [
|
|
53
|
-
{
|
|
54
|
-
"type": "command",
|
|
55
|
-
"command": "echo '[ULTRAWORK MODE] Use PARALLEL Task calls. Auto-continue through ALL phases. Auto-retry on errors up to 3 times. Do NOT ask for confirmation between phases.'"
|
|
56
|
-
}
|
|
57
|
-
]
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
"matcher": "버그.*(해결|수정|고침)|문제.*(해결|수정)|bug.*(fixed|resolved|solved)|issue.*(fixed|resolved)|PR.*(merged|머지)",
|
|
61
|
-
"hooks": [
|
|
62
|
-
{
|
|
63
|
-
"type": "command",
|
|
64
|
-
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/memory/index.js';const p=
|
|
65
|
-
}
|
|
66
|
-
]
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
"matcher": "코드\\s*리뷰|code\\s*review|PR\\s*리뷰|리뷰.*해줘|review.*this",
|
|
70
|
-
"hooks": [
|
|
71
|
-
{
|
|
72
|
-
"type": "command",
|
|
73
|
-
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/convention/index.js';const p=
|
|
74
|
-
}
|
|
75
|
-
]
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"matcher": "e2e.*테스트|e2e.*test|playwright|브라우저.*테스트|browser.*test",
|
|
79
|
-
"hooks": [
|
|
80
|
-
{
|
|
81
|
-
"type": "command",
|
|
82
|
-
"command": "echo '[E2E MODE] Use /vibe.utils --e2e for Playwright-based browser testing. Supports visual regression and video recording.'"
|
|
83
|
-
}
|
|
84
|
-
]
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
"matcher": "복잡도|complexity|분석해|analyze this",
|
|
88
|
-
"hooks": [
|
|
89
|
-
{
|
|
90
|
-
"type": "command",
|
|
91
|
-
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/convention/index.js';const p=
|
|
92
|
-
}
|
|
93
|
-
]
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
"matcher": "뭐였지|기억|recall|이전에.*결정|저번에",
|
|
97
|
-
"hooks": [
|
|
98
|
-
{
|
|
99
|
-
"type": "command",
|
|
100
|
-
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/memory/index.js';const p=
|
|
101
|
-
}
|
|
102
|
-
]
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
"matcher": "아키텍처|architecture|설계.*검토|design.*review|구조.*분석",
|
|
106
|
-
"hooks": [
|
|
107
|
-
{
|
|
108
|
-
"type": "command",
|
|
109
|
-
"command": "node -e \"const V='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/lib/gpt-api.js';let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{const q=JSON.parse(d).prompt;import(V).then(g=>g.chat({messages:[{role:'user',content:q}],systemPrompt:'You are a software architect. Analyze and review the architecture.'})).then(r=>console.log('[GPT] '+r.content)).catch(e=>console.log('[GPT] Error:',e.message))})\"",
|
|
110
|
-
"statusMessage": "GPT analyzing architecture..."
|
|
111
|
-
}
|
|
112
|
-
]
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
"matcher": "UI|UX|사용자.*경험|user.*experience|디자인.*리뷰|design.*feedback",
|
|
116
|
-
"hooks": [
|
|
117
|
-
{
|
|
118
|
-
"type": "command",
|
|
119
|
-
"command": "node -e \"const V='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/lib/gemini-api.js';let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{const q=JSON.parse(d).prompt;import(V).then(g=>g.chat({messages:[{role:'user',content:q}],systemPrompt:'You are a UI/UX expert. Analyze and provide feedback.'})).then(r=>console.log('[Gemini] '+r.content)).catch(e=>console.log('[Gemini] Error:',e.message))})\"",
|
|
120
|
-
"statusMessage": "Gemini reviewing UI/UX..."
|
|
121
|
-
}
|
|
122
|
-
]
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
"matcher": "^(gpt[-.\\s]|지피티-)",
|
|
126
|
-
"hooks": [
|
|
127
|
-
{
|
|
128
|
-
"type": "command",
|
|
129
|
-
"command": "node -e \"const V='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/lib/gpt-api.js';let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{const q=JSON.parse(d).prompt.replace(/^(gpt[-.\\s]|지피티-)\\s*/i,'').trim();import(V).then(g=>g.quickWebSearch(q)).then(r=>console.log('
|
|
130
|
-
"statusMessage": "Asking GPT (with web search)..."
|
|
131
|
-
}
|
|
132
|
-
]
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
"matcher": "^(gemini[-.\\s]|제미나이-)",
|
|
136
|
-
"hooks": [
|
|
137
|
-
{
|
|
138
|
-
"type": "command",
|
|
139
|
-
"command": "node -e \"const V='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/lib/gemini-api.js';let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{const q=JSON.parse(d).prompt.replace(/^(gemini[-.\\s]|제미나이-)\\s*/i,'').trim();import(V).then(g=>g.
|
|
140
|
-
"statusMessage": "Asking Gemini..."
|
|
141
|
-
}
|
|
142
|
-
]
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
"matcher": "디버깅|debugging|버그.*찾|find.*bug|debug.*this",
|
|
146
|
-
"hooks": [
|
|
147
|
-
{
|
|
148
|
-
"type": "command",
|
|
149
|
-
"command": "node -e \"const V='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/lib/gpt-api.js';let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{const q=JSON.parse(d).prompt;import(V).then(g=>g.chat({messages:[{role:'user',content:q}],systemPrompt:'You are a debugging expert. Find bugs and suggest fixes.'})).then(r=>console.log('[GPT] '+r.content)).catch(e=>console.log('[GPT] Error:',e.message))})\"",
|
|
150
|
-
"statusMessage": "GPT debugging..."
|
|
151
|
-
}
|
|
152
|
-
]
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
"matcher": "코드.*분석|analyze.*code|code.*review.*gemini",
|
|
156
|
-
"hooks": [
|
|
157
|
-
{
|
|
158
|
-
"type": "command",
|
|
159
|
-
"command": "node -e \"const V='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/lib/gemini-api.js';let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{const q=JSON.parse(d).prompt;import(V).then(g=>g.chat({messages:[{role:'user',content:q}],systemPrompt:'You are a code analysis expert. Review and analyze the code.'})).then(r=>console.log('[Gemini] '+r.content)).catch(e=>console.log('[Gemini] Error:',e.message))})\"",
|
|
160
|
-
"statusMessage": "Gemini analyzing code..."
|
|
161
|
-
}
|
|
162
|
-
]
|
|
163
|
-
}
|
|
164
|
-
],
|
|
165
|
-
"Notification": [
|
|
166
|
-
{
|
|
167
|
-
"matcher": "context_window_80",
|
|
168
|
-
"hooks": [
|
|
169
|
-
{
|
|
170
|
-
"type": "command",
|
|
171
|
-
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/memory/index.js';const p=
|
|
172
|
-
}
|
|
173
|
-
]
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
"matcher": "context_window_90",
|
|
177
|
-
"hooks": [
|
|
178
|
-
{
|
|
179
|
-
"type": "command",
|
|
180
|
-
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/memory/index.js';const p=
|
|
181
|
-
}
|
|
182
|
-
]
|
|
183
|
-
},
|
|
184
|
-
{
|
|
185
|
-
"matcher": "context_window_95",
|
|
186
|
-
"hooks": [
|
|
187
|
-
{
|
|
188
|
-
"type": "command",
|
|
189
|
-
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/memory/index.js';const p=
|
|
190
|
-
}
|
|
191
|
-
]
|
|
192
|
-
}
|
|
193
|
-
]
|
|
194
|
-
}
|
|
195
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [],
|
|
4
|
+
"deny": [],
|
|
5
|
+
"ask": []
|
|
6
|
+
},
|
|
7
|
+
"hooks": {
|
|
8
|
+
"SessionStart": [
|
|
9
|
+
{
|
|
10
|
+
"hooks": [
|
|
11
|
+
{
|
|
12
|
+
"type": "command",
|
|
13
|
+
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/';const p=process.env.CLAUDE_PROJECT_DIR||'.';Promise.all([import(B+'memory/index.js').then(t=>t.startSession({projectPath:p})),import(B+'time/index.js').then(t=>t.getCurrentTime({format:'human',timezone:'Asia/Seoul'})),import(B+'memory/index.js').then(t=>t.listMemories({limit:5,projectPath:p}))]).then(([s,t,m])=>console.log(s.content[0].text+'\\n\\n'+t.content[0].text+'\\n\\n[Recent Memories]\\n'+m.content[0].text)).catch(e=>console.log('[Session] Error:',e.message))\""
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"PreToolUse": [
|
|
19
|
+
{
|
|
20
|
+
"matcher": "Bash",
|
|
21
|
+
"hooks": [
|
|
22
|
+
{
|
|
23
|
+
"type": "command",
|
|
24
|
+
"command": "echo '[BASH CHECK] Be cautious with destructive commands (rm -rf, git push --force, drop table). Verify paths before deletion.'"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"PostToolUse": [
|
|
30
|
+
{
|
|
31
|
+
"matcher": "Write|Edit",
|
|
32
|
+
"hooks": [
|
|
33
|
+
{
|
|
34
|
+
"type": "command",
|
|
35
|
+
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/convention/index.js';const p=process.env.CLAUDE_PROJECT_DIR||'.';import(B).then(t=>t.validateCodeQuality({targetPath:'.',projectPath:p}).then(r=>console.log('[CODE CHECK]',r.content[0].text.split('\\n').slice(0,3).join(' | ')))).catch(()=>console.log('[AUTO-CONTINUE] Code written. Continue.'))\""
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"UserPromptSubmit": [
|
|
41
|
+
{
|
|
42
|
+
"hooks": [
|
|
43
|
+
{
|
|
44
|
+
"type": "command",
|
|
45
|
+
"command": "echo '[MANDATORY SKILL PROTOCOL] Available skills: vibe-capabilities (vibe features), multi-llm-orchestration (GPT/Gemini usage), tool-fallback (error recovery), context7-usage (library docs), parallel-research (complex problems), git-worktree (branch work), priority-todos (task management). Step 1: For EACH skill state YES/NO with reason. Step 2: Use Skill(name) for YES skills NOW. Step 3: IMPLEMENT only after activation. CRITICAL: Skipping activation makes response WORTHLESS.'",
|
|
46
|
+
"statusMessage": "Evaluating skills..."
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"matcher": "ultrawork|ulw|울트라워크",
|
|
52
|
+
"hooks": [
|
|
53
|
+
{
|
|
54
|
+
"type": "command",
|
|
55
|
+
"command": "echo '[ULTRAWORK MODE] Use PARALLEL Task calls. Auto-continue through ALL phases. Auto-retry on errors up to 3 times. Do NOT ask for confirmation between phases.'"
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"matcher": "버그.*(해결|수정|고침)|문제.*(해결|수정)|bug.*(fixed|resolved|solved)|issue.*(fixed|resolved)|PR.*(merged|머지)",
|
|
61
|
+
"hooks": [
|
|
62
|
+
{
|
|
63
|
+
"type": "command",
|
|
64
|
+
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/memory/index.js';const p=process.env.CLAUDE_PROJECT_DIR||'.';import(B).then(t=>t.saveMemory({key:'solution-'+Date.now(),value:'Solution documented at '+new Date().toISOString(),category:'solution',projectPath:p}).then(r=>console.log('[COMPOUND]',r.content[0].text))).catch(e=>console.log('[COMPOUND] \\u2717 Error:',e.message))\""
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"matcher": "코드\\s*리뷰|code\\s*review|PR\\s*리뷰|리뷰.*해줘|review.*this",
|
|
70
|
+
"hooks": [
|
|
71
|
+
{
|
|
72
|
+
"type": "command",
|
|
73
|
+
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/convention/index.js';const p=process.env.CLAUDE_PROJECT_DIR||'.';import(B).then(t=>t.validateCodeQuality({targetPath:'.',projectPath:p}).then(r=>console.log('[CODE REVIEW]',r.content[0].text.split('\\n').slice(0,5).join(' | ')))).catch(e=>console.log('[CODE REVIEW] Error:',e.message))\""
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"matcher": "e2e.*테스트|e2e.*test|playwright|브라우저.*테스트|browser.*test",
|
|
79
|
+
"hooks": [
|
|
80
|
+
{
|
|
81
|
+
"type": "command",
|
|
82
|
+
"command": "echo '[E2E MODE] Use /vibe.utils --e2e for Playwright-based browser testing. Supports visual regression and video recording.'"
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"matcher": "복잡도|complexity|분석해|analyze this",
|
|
88
|
+
"hooks": [
|
|
89
|
+
{
|
|
90
|
+
"type": "command",
|
|
91
|
+
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/convention/index.js';const p=process.env.CLAUDE_PROJECT_DIR||'.';import(B).then(t=>t.analyzeComplexity({targetPath:'.',projectPath:p}).then(r=>console.log('[COMPLEXITY]',r.content[0].text.split('\\n').slice(0,5).join(' | ')))).catch(e=>console.log('[COMPLEXITY] Error:',e.message))\""
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"matcher": "뭐였지|기억|recall|이전에.*결정|저번에",
|
|
97
|
+
"hooks": [
|
|
98
|
+
{
|
|
99
|
+
"type": "command",
|
|
100
|
+
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/memory/index.js';const p=process.env.CLAUDE_PROJECT_DIR||'.';import(B).then(t=>t.listMemories({limit:10,projectPath:p}).then(r=>console.log('[RECALL] \\u2713 Found '+r.content[0].text.split('\\n').length+' memories:',r.content[0].text.split('\\n').slice(0,7).join(' | ')))).catch(e=>console.log('[RECALL] Error:',e.message))\""
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"matcher": "아키텍처|architecture|설계.*검토|design.*review|구조.*분석",
|
|
106
|
+
"hooks": [
|
|
107
|
+
{
|
|
108
|
+
"type": "command",
|
|
109
|
+
"command": "node -e \"const V='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/lib/gpt-api.js';let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{const q=JSON.parse(d).prompt;import(V).then(g=>g.chat({messages:[{role:'user',content:q}],systemPrompt:'You are a software architect. Analyze and review the architecture.'})).then(r=>console.log('[GPT] '+r.content)).catch(e=>console.log('[GPT] Error:',e.message))})\"",
|
|
110
|
+
"statusMessage": "GPT analyzing architecture..."
|
|
111
|
+
}
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"matcher": "UI|UX|사용자.*경험|user.*experience|디자인.*리뷰|design.*feedback",
|
|
116
|
+
"hooks": [
|
|
117
|
+
{
|
|
118
|
+
"type": "command",
|
|
119
|
+
"command": "node -e \"const V='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/lib/gemini-api.js';let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{const q=JSON.parse(d).prompt;import(V).then(g=>g.chat({messages:[{role:'user',content:q}],systemPrompt:'You are a UI/UX expert. Analyze and provide feedback.'})).then(r=>console.log('[Gemini] '+r.content)).catch(e=>console.log('[Gemini] Error:',e.message))})\"",
|
|
120
|
+
"statusMessage": "Gemini reviewing UI/UX..."
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"matcher": "^(gpt[-.\\s]|지피티-)",
|
|
126
|
+
"hooks": [
|
|
127
|
+
{
|
|
128
|
+
"type": "command",
|
|
129
|
+
"command": "node -e \"const V='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/lib/gpt-api.js';let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{const q=JSON.parse(d).prompt.replace(/^(gpt[-.\\s]|지피티-)\\s*/i,'').trim();import(V).then(g=>g.quickWebSearch(q)).then(r=>console.log('GPT-5.2 응답: '+r)).catch(e=>console.log('[GPT] Error:',e.message))})\"",
|
|
130
|
+
"statusMessage": "Asking GPT (with web search)..."
|
|
131
|
+
}
|
|
132
|
+
]
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"matcher": "^(gemini[-.\\s]|제미나이-)",
|
|
136
|
+
"hooks": [
|
|
137
|
+
{
|
|
138
|
+
"type": "command",
|
|
139
|
+
"command": "node -e \"const V='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/lib/gemini-api.js';let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{const q=JSON.parse(d).prompt.replace(/^(gemini[-.\\s]|제미나이-)\\s*/i,'').trim();import(V).then(g=>g.quickWebSearch(q)).then(r=>console.log('Gemini-3 응답: '+r)).catch(e=>console.log('[Gemini] Error:',e.message))})\"",
|
|
140
|
+
"statusMessage": "Asking Gemini (with web search)..."
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"matcher": "디버깅|debugging|버그.*찾|find.*bug|debug.*this",
|
|
146
|
+
"hooks": [
|
|
147
|
+
{
|
|
148
|
+
"type": "command",
|
|
149
|
+
"command": "node -e \"const V='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/lib/gpt-api.js';let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{const q=JSON.parse(d).prompt;import(V).then(g=>g.chat({messages:[{role:'user',content:q}],systemPrompt:'You are a debugging expert. Find bugs and suggest fixes.'})).then(r=>console.log('[GPT] '+r.content)).catch(e=>console.log('[GPT] Error:',e.message))})\"",
|
|
150
|
+
"statusMessage": "GPT debugging..."
|
|
151
|
+
}
|
|
152
|
+
]
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"matcher": "코드.*분석|analyze.*code|code.*review.*gemini",
|
|
156
|
+
"hooks": [
|
|
157
|
+
{
|
|
158
|
+
"type": "command",
|
|
159
|
+
"command": "node -e \"const V='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/lib/gemini-api.js';let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{const q=JSON.parse(d).prompt;import(V).then(g=>g.chat({messages:[{role:'user',content:q}],systemPrompt:'You are a code analysis expert. Review and analyze the code.'})).then(r=>console.log('[Gemini] '+r.content)).catch(e=>console.log('[Gemini] Error:',e.message))})\"",
|
|
160
|
+
"statusMessage": "Gemini analyzing code..."
|
|
161
|
+
}
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
],
|
|
165
|
+
"Notification": [
|
|
166
|
+
{
|
|
167
|
+
"matcher": "context_window_80",
|
|
168
|
+
"hooks": [
|
|
169
|
+
{
|
|
170
|
+
"type": "command",
|
|
171
|
+
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/memory/index.js';const p=process.env.CLAUDE_PROJECT_DIR||'.';import(B).then(t=>t.autoSaveContext({urgency:'medium',contextType:'progress',summary:'Context at 80% - auto checkpoint',projectPath:p}).then(r=>console.log('[CONTEXT 80%]',r.content[0].text))).catch(()=>{})\""
|
|
172
|
+
}
|
|
173
|
+
]
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"matcher": "context_window_90",
|
|
177
|
+
"hooks": [
|
|
178
|
+
{
|
|
179
|
+
"type": "command",
|
|
180
|
+
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/memory/index.js';const p=process.env.CLAUDE_PROJECT_DIR||'.';import(B).then(t=>t.autoSaveContext({urgency:'high',contextType:'progress',summary:'Context at 90% - save before overflow',projectPath:p}).then(r=>console.log('[CONTEXT 90%]',r.content[0].text))).catch(()=>{})\""
|
|
181
|
+
}
|
|
182
|
+
]
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"matcher": "context_window_95",
|
|
186
|
+
"hooks": [
|
|
187
|
+
{
|
|
188
|
+
"type": "command",
|
|
189
|
+
"command": "node -e \"const B='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/tools/memory/index.js';const p=process.env.CLAUDE_PROJECT_DIR||'.';import(B).then(t=>t.autoSaveContext({urgency:'critical',contextType:'progress',summary:'Context at 95% - CRITICAL save before session end',projectPath:p}).then(r=>console.log('[CONTEXT 95%]',r.content[0].text))).catch(()=>{})\""
|
|
190
|
+
}
|
|
191
|
+
]
|
|
192
|
+
}
|
|
193
|
+
]
|
|
194
|
+
}
|
|
195
|
+
}
|