@su-record/vibe 2.4.34 → 2.4.36
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 +47 -3
- package/dist/lib/gemini-api.d.ts.map +1 -1
- package/dist/lib/gemini-api.js +253 -7
- package/dist/lib/gemini-api.js.map +1 -1
- package/dist/lib/gpt-api.d.ts +37 -5
- package/dist/lib/gpt-api.d.ts.map +1 -1
- package/dist/lib/gpt-api.js +396 -37
- 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 +215 -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
|
@@ -31,7 +31,7 @@ export async function saveMemory(args) {
|
|
|
31
31
|
try {
|
|
32
32
|
const memoryManager = MemoryManager.getInstance(projectPath);
|
|
33
33
|
memoryManager.save(memoryKey, memoryValue, category);
|
|
34
|
-
const location = projectPath ? `${projectPath}/memories/` : 'default';
|
|
34
|
+
const location = projectPath ? `${projectPath}/.claude/vibe/memories/` : 'default';
|
|
35
35
|
return {
|
|
36
36
|
content: [{ type: 'text', text: `✓ Saved: ${memoryKey}\nCategory: ${category}\nLocation: ${location}` }]
|
|
37
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saveMemory.js","sourceRoot":"","sources":["../../../src/tools/memory/saveMemory.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,MAAM,CAAC,MAAM,oBAAoB,GAAmB;IAClD,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE;;;;mDAIoC;IACjD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;YAC7D,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;YAC7D,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;YAC5G,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4DAA4D,EAAE;SAC3G;QACD,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;KAC3B;IACD,WAAW,EAAE;QACX,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;QAC/B,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,KAAK;KACrB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAA6E;IAC5G,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,GAAG,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAEvF,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC7D,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QAErD,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"saveMemory.js","sourceRoot":"","sources":["../../../src/tools/memory/saveMemory.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,MAAM,CAAC,MAAM,oBAAoB,GAAmB;IAClD,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE;;;;mDAIoC;IACjD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;YAC7D,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;YAC7D,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;YAC5G,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4DAA4D,EAAE;SAC3G;QACD,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;KAC3B;IACD,WAAW,EAAE;QACX,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;QAC/B,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,KAAK;KACrB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAA6E;IAC5G,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,GAAG,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAEvF,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC7D,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QAErD,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,yBAAyB,CAAC,CAAC,CAAC,SAAS,CAAC;QACnF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,SAAS,eAAe,QAAQ,eAAe,QAAQ,EAAE,EAAE,CAAC;SACzG,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC;SAC1G,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -154,10 +154,10 @@ export async function applyReasoningFramework(args) {
|
|
|
154
154
|
}
|
|
155
155
|
// Helper methods
|
|
156
156
|
function analyzeConstraints(problem, context) {
|
|
157
|
-
return `**제약 조건 분석**:
|
|
158
|
-
- 정책/규칙: ${context ? '프로젝트 컨텍스트 확인 필요' : 'CLAUDE.md, constitution.md 확인 필요'}
|
|
159
|
-
- 작업 순서: 선행 작업 식별 필요 (DB → Backend → Frontend 패턴 고려)
|
|
160
|
-
- 전제 조건: ${problem}을(를) 위한 필수 정보/도구 확인
|
|
157
|
+
return `**제약 조건 분석**:
|
|
158
|
+
- 정책/규칙: ${context ? '프로젝트 컨텍스트 확인 필요' : 'CLAUDE.md, constitution.md 확인 필요'}
|
|
159
|
+
- 작업 순서: 선행 작업 식별 필요 (DB → Backend → Frontend 패턴 고려)
|
|
160
|
+
- 전제 조건: ${problem}을(를) 위한 필수 정보/도구 확인
|
|
161
161
|
- 사용자 제약: 명시적 요청사항 우선 적용`;
|
|
162
162
|
}
|
|
163
163
|
function assessRisks(problem, context) {
|
|
@@ -166,82 +166,82 @@ function assessRisks(problem, context) {
|
|
|
166
166
|
problem.toLowerCase().includes('확인') ||
|
|
167
167
|
problem.toLowerCase().includes('find') ||
|
|
168
168
|
problem.toLowerCase().includes('analyze');
|
|
169
|
-
return `**위험 평가**:
|
|
170
|
-
- 작업 유형: ${isExploration ? '탐색 작업 (낮은 위험)' : '구현 작업 (높은 위험)'}
|
|
171
|
-
- 롤백 가능성: ${isExploration ? '높음' : '확인 필요'}
|
|
172
|
-
- 호환성 위험: 기존 코드와의 충돌 가능성 검토
|
|
173
|
-
- 보안 위험: SQL Injection, XSS, 민감 정보 노출 검토
|
|
169
|
+
return `**위험 평가**:
|
|
170
|
+
- 작업 유형: ${isExploration ? '탐색 작업 (낮은 위험)' : '구현 작업 (높은 위험)'}
|
|
171
|
+
- 롤백 가능성: ${isExploration ? '높음' : '확인 필요'}
|
|
172
|
+
- 호환성 위험: 기존 코드와의 충돌 가능성 검토
|
|
173
|
+
- 보안 위험: SQL Injection, XSS, 민감 정보 노출 검토
|
|
174
174
|
- 성능 위험: N+1 쿼리, 메모리 누수, 불필요한 리렌더 검토`;
|
|
175
175
|
}
|
|
176
176
|
function generateHypotheses(problem, context) {
|
|
177
|
-
return `**가설 생성**:
|
|
178
|
-
1. **가설 1** (가능성: 높음)
|
|
179
|
-
- 근거: ${problem}의 가장 직접적인 원인
|
|
180
|
-
- 검증: [도구/파일]을 통해 확인
|
|
181
|
-
2. **가설 2** (가능성: 중간)
|
|
182
|
-
- 근거: 간접적 요인 또는 환경 차이
|
|
183
|
-
- 검증: 추가 정보 수집 필요
|
|
184
|
-
3. **가설 3** (가능성: 낮음)
|
|
185
|
-
- 근거: 엣지 케이스 또는 드문 상황
|
|
186
|
-
- 검증: 다른 가설 반증 시 검토
|
|
187
|
-
|
|
177
|
+
return `**가설 생성**:
|
|
178
|
+
1. **가설 1** (가능성: 높음)
|
|
179
|
+
- 근거: ${problem}의 가장 직접적인 원인
|
|
180
|
+
- 검증: [도구/파일]을 통해 확인
|
|
181
|
+
2. **가설 2** (가능성: 중간)
|
|
182
|
+
- 근거: 간접적 요인 또는 환경 차이
|
|
183
|
+
- 검증: 추가 정보 수집 필요
|
|
184
|
+
3. **가설 3** (가능성: 낮음)
|
|
185
|
+
- 근거: 엣지 케이스 또는 드문 상황
|
|
186
|
+
- 검증: 다른 가설 반증 시 검토
|
|
187
|
+
|
|
188
188
|
**우선순위**: 가능성 높은 순으로 검증하되, 낮은 가능성도 완전히 배제하지 않음`;
|
|
189
189
|
}
|
|
190
190
|
function evaluateAdaptability(problem, context) {
|
|
191
|
-
return `**적응성 평가**:
|
|
192
|
-
- 관찰 결과 반영: 새로운 정보에 따라 계획 수정 필요 여부 확인
|
|
193
|
-
- 가설 업데이트: 반증된 가설 폐기, 새 가설 생성
|
|
194
|
-
- 백트래킹: 막다른 길 도달 시 이전 단계로 돌아가 다른 경로 탐색
|
|
191
|
+
return `**적응성 평가**:
|
|
192
|
+
- 관찰 결과 반영: 새로운 정보에 따라 계획 수정 필요 여부 확인
|
|
193
|
+
- 가설 업데이트: 반증된 가설 폐기, 새 가설 생성
|
|
194
|
+
- 백트래킹: 막다른 길 도달 시 이전 단계로 돌아가 다른 경로 탐색
|
|
195
195
|
- 계획 재평가: 전체 접근법이 유효한지 주기적으로 검토`;
|
|
196
196
|
}
|
|
197
197
|
function identifyInformationSources(problem, context) {
|
|
198
|
-
return `**정보 소스**:
|
|
199
|
-
1. **도구**:
|
|
200
|
-
- vibe 내장 도구 (36개)
|
|
201
|
-
- 파일 시스템 (Read, Write, Edit, Glob, Grep)
|
|
202
|
-
- Git, 패키지 관리자
|
|
203
|
-
2. **정책/규칙**:
|
|
204
|
-
- CLAUDE.md (기술 스택, 아키텍처)
|
|
205
|
-
- .claude/vibe/constitution.md (프로젝트 규칙)
|
|
206
|
-
- skills/ 폴더 (품질 기준, 코딩 표준)
|
|
207
|
-
3. **메모리**:
|
|
208
|
-
- recall_memory (이전 세션 정보)
|
|
209
|
-
- restore_session_context (컨텍스트 복원)
|
|
210
|
-
4. **사용자 확인**:
|
|
211
|
-
- 비즈니스 로직 세부사항
|
|
212
|
-
- 디자인 선호도
|
|
198
|
+
return `**정보 소스**:
|
|
199
|
+
1. **도구**:
|
|
200
|
+
- vibe 내장 도구 (36개)
|
|
201
|
+
- 파일 시스템 (Read, Write, Edit, Glob, Grep)
|
|
202
|
+
- Git, 패키지 관리자
|
|
203
|
+
2. **정책/규칙**:
|
|
204
|
+
- CLAUDE.md (기술 스택, 아키텍처)
|
|
205
|
+
- .claude/vibe/constitution.md (프로젝트 규칙)
|
|
206
|
+
- skills/ 폴더 (품질 기준, 코딩 표준)
|
|
207
|
+
3. **메모리**:
|
|
208
|
+
- recall_memory (이전 세션 정보)
|
|
209
|
+
- restore_session_context (컨텍스트 복원)
|
|
210
|
+
4. **사용자 확인**:
|
|
211
|
+
- 비즈니스 로직 세부사항
|
|
212
|
+
- 디자인 선호도
|
|
213
213
|
- 우선순위 결정`;
|
|
214
214
|
}
|
|
215
215
|
function ensurePrecision(problem, context) {
|
|
216
|
-
return `**정밀성 확보**:
|
|
217
|
-
- 정책 인용: "CLAUDE.md:12에 따르면..." 형식으로 명시
|
|
218
|
-
- 코드 참조: "users.py:45의 User 모델" 형식으로 파일명:라인 포함
|
|
219
|
-
- 숫자 정확성: 복잡도, 커버리지, 성능 지표를 정확한 수치로 표현
|
|
216
|
+
return `**정밀성 확보**:
|
|
217
|
+
- 정책 인용: "CLAUDE.md:12에 따르면..." 형식으로 명시
|
|
218
|
+
- 코드 참조: "users.py:45의 User 모델" 형식으로 파일명:라인 포함
|
|
219
|
+
- 숫자 정확성: 복잡도, 커버리지, 성능 지표를 정확한 수치로 표현
|
|
220
220
|
- 근거 제시: 모든 주장에 대해 출처와 근거 명확히`;
|
|
221
221
|
}
|
|
222
222
|
function ensureCompleteness(problem, context) {
|
|
223
|
-
return `**완전성 확보**:
|
|
224
|
-
- 충돌 해결: 정책 → 작업 순서 → 전제 조건 → 사용자 선호도 순
|
|
225
|
-
- 옵션 탐색: 단일 해결책에 조기 고정하지 않고 여러 대안 검토
|
|
226
|
-
- 정보 검토: 모든 관련 정보 소스(#5) 철저히 검토
|
|
223
|
+
return `**완전성 확보**:
|
|
224
|
+
- 충돌 해결: 정책 → 작업 순서 → 전제 조건 → 사용자 선호도 순
|
|
225
|
+
- 옵션 탐색: 단일 해결책에 조기 고정하지 않고 여러 대안 검토
|
|
226
|
+
- 정보 검토: 모든 관련 정보 소스(#5) 철저히 검토
|
|
227
227
|
- 사용자 확인: 불확실한 부분은 가정하지 말고 확인`;
|
|
228
228
|
}
|
|
229
229
|
function demonstratePersistence(problem, context) {
|
|
230
|
-
return `**끈기 전략**:
|
|
231
|
-
- 일시적 오류: 지수 백오프로 재시도 (예: 1초, 2초, 4초...)
|
|
232
|
-
- 한계 인식: 명확한 재시도 제한, 타임아웃 도달 시 중단
|
|
233
|
-
- 전략 변경: 같은 실패 반복 X → 다른 접근법 시도
|
|
230
|
+
return `**끈기 전략**:
|
|
231
|
+
- 일시적 오류: 지수 백오프로 재시도 (예: 1초, 2초, 4초...)
|
|
232
|
+
- 한계 인식: 명확한 재시도 제한, 타임아웃 도달 시 중단
|
|
233
|
+
- 전략 변경: 같은 실패 반복 X → 다른 접근법 시도
|
|
234
234
|
- 철저한 분석: 시간이 걸리더라도 모든 추론 단계 완료`;
|
|
235
235
|
}
|
|
236
236
|
function planExecution(problem, context) {
|
|
237
|
-
return `**실행 계획**:
|
|
238
|
-
1. **추론 문서화**: 복잡한 결정의 경우 추론 과정 간략히 설명
|
|
239
|
-
2. **단계별 실행**: 한 번에 하나의 주요 행동만 수행
|
|
240
|
-
3. **결과 확인**: 각 행동의 결과를 확인한 후 다음 단계로 진행
|
|
237
|
+
return `**실행 계획**:
|
|
238
|
+
1. **추론 문서화**: 복잡한 결정의 경우 추론 과정 간략히 설명
|
|
239
|
+
2. **단계별 실행**: 한 번에 하나의 주요 행동만 수행
|
|
240
|
+
3. **결과 확인**: 각 행동의 결과를 확인한 후 다음 단계로 진행
|
|
241
241
|
4. **롤백 대비**: 문제 발생 시 이전 상태로 복구 가능하도록 준비`;
|
|
242
242
|
}
|
|
243
243
|
function generateSummary(problem, steps) {
|
|
244
|
-
return `9단계 추론 프레임워크를 "${problem}"에 적용했습니다.
|
|
244
|
+
return `9단계 추론 프레임워크를 "${problem}"에 적용했습니다.
|
|
245
245
|
총 ${steps.length}개 단계를 체계적으로 분석하여 논리적 종속성, 위험, 가설, 정보 소스를 포괄적으로 검토했습니다.`;
|
|
246
246
|
}
|
|
247
247
|
function formatOutput(result) {
|
package/hooks/hooks.json
CHANGED
|
@@ -1,195 +1,215 @@
|
|
|
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.
|
|
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.
|
|
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": "^
|
|
136
|
-
"hooks": [
|
|
137
|
-
{
|
|
138
|
-
"type": "command",
|
|
139
|
-
"command": "node -e \"const V='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/lib/
|
|
140
|
-
"statusMessage": "
|
|
141
|
-
}
|
|
142
|
-
]
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
"matcher": "
|
|
146
|
-
"hooks": [
|
|
147
|
-
{
|
|
148
|
-
"type": "command",
|
|
149
|
-
"command": "node -e \"const V='file:///{{VIBE_PATH}}/node_modules/@su-record/vibe/dist/lib/
|
|
150
|
-
"statusMessage": "
|
|
151
|
-
}
|
|
152
|
-
]
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
"matcher": "
|
|
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.
|
|
160
|
-
"statusMessage": "Gemini
|
|
161
|
-
}
|
|
162
|
-
]
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
"
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
"
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
"
|
|
180
|
-
"
|
|
181
|
-
}
|
|
182
|
-
]
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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.vibeGptOrchestrate(q,'You are a software architect. Analyze and review the architecture.',{jsonMode:false})).then(r=>console.log('[GPT Architecture] '+r)).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.vibeGeminiOrchestrate(q,'You are a UI/UX expert. Analyze and provide feedback.',{jsonMode:false})).then(r=>console.log('[Gemini UI/UX] '+r)).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": "^vibe-gpt-",
|
|
136
|
+
"hooks": [
|
|
137
|
+
{
|
|
138
|
+
"type": "command",
|
|
139
|
+
"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(/^vibe-gpt-\\s*/i,'').trim();import(V).then(g=>g.vibeGptOrchestrate(q,'You are a Vibe orchestrator. Process the request and output structured JSON.',{jsonMode:true})).then(r=>console.log('[vibe-gpt] '+r)).catch(e=>console.log('[vibe-gpt] Error:',e.message))})\"",
|
|
140
|
+
"statusMessage": "Vibe GPT orchestrating (no search)..."
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"matcher": "^(gemini[-.\\s]|제미나이-)",
|
|
146
|
+
"hooks": [
|
|
147
|
+
{
|
|
148
|
+
"type": "command",
|
|
149
|
+
"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))})\"",
|
|
150
|
+
"statusMessage": "Asking Gemini (with web search)..."
|
|
151
|
+
}
|
|
152
|
+
]
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"matcher": "^vibe-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.replace(/^vibe-gemini-\\s*/i,'').trim();import(V).then(g=>g.vibeGeminiOrchestrate(q,'You are a Vibe orchestrator. Process the request and output structured JSON.',{jsonMode:true})).then(r=>console.log('[vibe-gemini] '+r)).catch(e=>console.log('[vibe-gemini] Error:',e.message))})\"",
|
|
160
|
+
"statusMessage": "Vibe Gemini orchestrating (no search)..."
|
|
161
|
+
}
|
|
162
|
+
]
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"matcher": "디버깅|debugging|버그.*찾|find.*bug|debug.*this",
|
|
166
|
+
"hooks": [
|
|
167
|
+
{
|
|
168
|
+
"type": "command",
|
|
169
|
+
"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.vibeGptOrchestrate(q,'You are a debugging expert. Find bugs and suggest fixes.',{jsonMode:false})).then(r=>console.log('[GPT Debug] '+r)).catch(e=>console.log('[GPT] Error:',e.message))})\"",
|
|
170
|
+
"statusMessage": "GPT debugging..."
|
|
171
|
+
}
|
|
172
|
+
]
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"matcher": "코드.*분석|analyze.*code|code.*review",
|
|
176
|
+
"hooks": [
|
|
177
|
+
{
|
|
178
|
+
"type": "command",
|
|
179
|
+
"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.vibeGeminiOrchestrate(q,'You are a code analysis expert. Review and analyze the code.',{jsonMode:false})).then(r=>console.log('[Gemini Code] '+r)).catch(e=>console.log('[Gemini] Error:',e.message))})\"",
|
|
180
|
+
"statusMessage": "Gemini analyzing code..."
|
|
181
|
+
}
|
|
182
|
+
]
|
|
183
|
+
}
|
|
184
|
+
],
|
|
185
|
+
"Notification": [
|
|
186
|
+
{
|
|
187
|
+
"matcher": "context_window_80",
|
|
188
|
+
"hooks": [
|
|
189
|
+
{
|
|
190
|
+
"type": "command",
|
|
191
|
+
"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(()=>{})\""
|
|
192
|
+
}
|
|
193
|
+
]
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"matcher": "context_window_90",
|
|
197
|
+
"hooks": [
|
|
198
|
+
{
|
|
199
|
+
"type": "command",
|
|
200
|
+
"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(()=>{})\""
|
|
201
|
+
}
|
|
202
|
+
]
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"matcher": "context_window_95",
|
|
206
|
+
"hooks": [
|
|
207
|
+
{
|
|
208
|
+
"type": "command",
|
|
209
|
+
"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(()=>{})\""
|
|
210
|
+
}
|
|
211
|
+
]
|
|
212
|
+
}
|
|
213
|
+
]
|
|
214
|
+
}
|
|
215
|
+
}
|