@su-record/vibe 2.4.2 → 2.4.3
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/dist/tools/analytics/index.d.ts +5 -0
- package/dist/tools/analytics/index.d.ts.map +1 -0
- package/dist/tools/analytics/index.js +5 -0
- package/dist/tools/analytics/index.js.map +1 -0
- package/dist/tools/convention/index.d.ts +10 -0
- package/dist/tools/convention/index.d.ts.map +1 -0
- package/dist/tools/convention/index.js +10 -0
- package/dist/tools/convention/index.js.map +1 -0
- package/dist/tools/memory/index.d.ts +19 -0
- package/dist/tools/memory/index.d.ts.map +1 -0
- package/dist/tools/memory/index.js +19 -0
- package/dist/tools/memory/index.js.map +1 -0
- package/dist/tools/planning/index.d.ts +8 -0
- package/dist/tools/planning/index.d.ts.map +1 -0
- package/dist/tools/planning/index.js +8 -0
- package/dist/tools/planning/index.js.map +1 -0
- package/dist/tools/prompt/index.d.ts +7 -0
- package/dist/tools/prompt/index.d.ts.map +1 -0
- package/dist/tools/prompt/index.js +7 -0
- package/dist/tools/prompt/index.js.map +1 -0
- package/dist/tools/reasoning/index.d.ts +5 -0
- package/dist/tools/reasoning/index.d.ts.map +1 -0
- package/dist/tools/reasoning/index.js +5 -0
- package/dist/tools/reasoning/index.js.map +1 -0
- package/dist/tools/semantic/index.d.ts +7 -0
- package/dist/tools/semantic/index.d.ts.map +1 -0
- package/dist/tools/semantic/index.js +7 -0
- package/dist/tools/semantic/index.js.map +1 -0
- package/dist/tools/thinking/index.d.ts +10 -0
- package/dist/tools/thinking/index.d.ts.map +1 -0
- package/dist/tools/thinking/index.js +10 -0
- package/dist/tools/thinking/index.js.map +1 -0
- package/dist/tools/time/index.d.ts +5 -0
- package/dist/tools/time/index.d.ts.map +1 -0
- package/dist/tools/time/index.js +5 -0
- package/dist/tools/time/index.js.map +1 -0
- package/dist/tools/ui/index.d.ts +5 -0
- package/dist/tools/ui/index.d.ts.map +1 -0
- package/dist/tools/ui/index.js +5 -0
- package/dist/tools/ui/index.js.map +1 -0
- package/hooks/hooks.json +9 -9
- package/package.json +11 -1
- package/skills/tool-fallback.md +70 -17
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/analytics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/analytics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convention Tools - 코드 품질 및 규칙 검증
|
|
3
|
+
*/
|
|
4
|
+
export { analyzeComplexity } from './analyzeComplexity.js';
|
|
5
|
+
export { validateCodeQuality } from './validateCodeQuality.js';
|
|
6
|
+
export { checkCouplingCohesion } from './checkCouplingCohesion.js';
|
|
7
|
+
export { suggestImprovements } from './suggestImprovements.js';
|
|
8
|
+
export { applyQualityRules } from './applyQualityRules.js';
|
|
9
|
+
export { getCodingGuide } from './getCodingGuide.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/convention/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convention Tools - 코드 품질 및 규칙 검증
|
|
3
|
+
*/
|
|
4
|
+
export { analyzeComplexity } from './analyzeComplexity.js';
|
|
5
|
+
export { validateCodeQuality } from './validateCodeQuality.js';
|
|
6
|
+
export { checkCouplingCohesion } from './checkCouplingCohesion.js';
|
|
7
|
+
export { suggestImprovements } from './suggestImprovements.js';
|
|
8
|
+
export { applyQualityRules } from './applyQualityRules.js';
|
|
9
|
+
export { getCodingGuide } from './getCodingGuide.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/convention/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Tools - 세션 및 메모리 관리
|
|
3
|
+
*/
|
|
4
|
+
export { startSession } from './startSession.js';
|
|
5
|
+
export { autoSaveContext } from './autoSaveContext.js';
|
|
6
|
+
export { saveMemory } from './saveMemory.js';
|
|
7
|
+
export { recallMemory } from './recallMemory.js';
|
|
8
|
+
export { listMemories } from './listMemories.js';
|
|
9
|
+
export { deleteMemory } from './deleteMemory.js';
|
|
10
|
+
export { updateMemory } from './updateMemory.js';
|
|
11
|
+
export { searchMemoriesHandler as searchMemories } from './searchMemories.js';
|
|
12
|
+
export { searchMemoriesAdvanced } from './searchMemoriesAdvanced.js';
|
|
13
|
+
export { linkMemories } from './linkMemories.js';
|
|
14
|
+
export { getMemoryGraph } from './getMemoryGraph.js';
|
|
15
|
+
export { createMemoryTimeline } from './createMemoryTimeline.js';
|
|
16
|
+
export { restoreSessionContext } from './restoreSessionContext.js';
|
|
17
|
+
export { prioritizeMemory } from './prioritizeMemory.js';
|
|
18
|
+
export { getSessionContext } from './getSessionContext.js';
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/memory/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,qBAAqB,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Tools - 세션 및 메모리 관리
|
|
3
|
+
*/
|
|
4
|
+
export { startSession } from './startSession.js';
|
|
5
|
+
export { autoSaveContext } from './autoSaveContext.js';
|
|
6
|
+
export { saveMemory } from './saveMemory.js';
|
|
7
|
+
export { recallMemory } from './recallMemory.js';
|
|
8
|
+
export { listMemories } from './listMemories.js';
|
|
9
|
+
export { deleteMemory } from './deleteMemory.js';
|
|
10
|
+
export { updateMemory } from './updateMemory.js';
|
|
11
|
+
export { searchMemoriesHandler as searchMemories } from './searchMemories.js';
|
|
12
|
+
export { searchMemoriesAdvanced } from './searchMemoriesAdvanced.js';
|
|
13
|
+
export { linkMemories } from './linkMemories.js';
|
|
14
|
+
export { getMemoryGraph } from './getMemoryGraph.js';
|
|
15
|
+
export { createMemoryTimeline } from './createMemoryTimeline.js';
|
|
16
|
+
export { restoreSessionContext } from './restoreSessionContext.js';
|
|
17
|
+
export { prioritizeMemory } from './prioritizeMemory.js';
|
|
18
|
+
export { getSessionContext } from './getSessionContext.js';
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/memory/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,qBAAqB,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Planning Tools - 요구사항 분석 및 로드맵
|
|
3
|
+
*/
|
|
4
|
+
export { generatePrd } from './generatePrd.js';
|
|
5
|
+
export { createUserStories } from './createUserStories.js';
|
|
6
|
+
export { analyzeRequirements } from './analyzeRequirements.js';
|
|
7
|
+
export { featureRoadmap } from './featureRoadmap.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/planning/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Planning Tools - 요구사항 분석 및 로드맵
|
|
3
|
+
*/
|
|
4
|
+
export { generatePrd } from './generatePrd.js';
|
|
5
|
+
export { createUserStories } from './createUserStories.js';
|
|
6
|
+
export { analyzeRequirements } from './analyzeRequirements.js';
|
|
7
|
+
export { featureRoadmap } from './featureRoadmap.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/planning/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/prompt/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/prompt/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/reasoning/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/reasoning/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/semantic/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/semantic/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thinking Tools - 사고 체인 및 문제 분석
|
|
3
|
+
*/
|
|
4
|
+
export { createThinkingChain } from './createThinkingChain.js';
|
|
5
|
+
export { analyzeProblem } from './analyzeProblem.js';
|
|
6
|
+
export { stepByStepAnalysis } from './stepByStepAnalysis.js';
|
|
7
|
+
export { formatAsPlan } from './formatAsPlan.js';
|
|
8
|
+
export { breakDownProblem } from './breakDownProblem.js';
|
|
9
|
+
export { thinkAloudProcess } from './thinkAloudProcess.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/thinking/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thinking Tools - 사고 체인 및 문제 분석
|
|
3
|
+
*/
|
|
4
|
+
export { createThinkingChain } from './createThinkingChain.js';
|
|
5
|
+
export { analyzeProblem } from './analyzeProblem.js';
|
|
6
|
+
export { stepByStepAnalysis } from './stepByStepAnalysis.js';
|
|
7
|
+
export { formatAsPlan } from './formatAsPlan.js';
|
|
8
|
+
export { breakDownProblem } from './breakDownProblem.js';
|
|
9
|
+
export { thinkAloudProcess } from './thinkAloudProcess.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/thinking/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/time/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/time/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
package/hooks/hooks.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"hooks": [
|
|
6
6
|
{
|
|
7
7
|
"type": "command",
|
|
8
|
-
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';Promise.all([import('@su-record/vibe/tools').then(t => t.startSession({projectPath: p})), import('@su-record/vibe/tools').then(t => t.getCurrentTime({format: 'human', timezone: 'Asia/Seoul'})), import('@su-record/vibe/tools').then(t => t.listMemories({limit: 5, projectPath: p}))]).then(([session, time, memories]) => console.log(session.content[0].text + '\\n\\n' + time.content[0].text + '\\n\\n[Recent Memories]\\n' + memories.content[0].text))\""
|
|
8
|
+
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';Promise.all([import('@su-record/vibe/tools/memory').then(t => t.startSession({projectPath: p})), import('@su-record/vibe/tools/time').then(t => t.getCurrentTime({format: 'human', timezone: 'Asia/Seoul'})), import('@su-record/vibe/tools/memory').then(t => t.listMemories({limit: 5, projectPath: p}))]).then(([session, time, memories]) => console.log(session.content[0].text + '\\n\\n' + time.content[0].text + '\\n\\n[Recent Memories]\\n' + memories.content[0].text))\""
|
|
9
9
|
}
|
|
10
10
|
]
|
|
11
11
|
}
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"hooks": [
|
|
28
28
|
{
|
|
29
29
|
"type": "command",
|
|
30
|
-
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').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.'))\""
|
|
30
|
+
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/convention').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.'))\""
|
|
31
31
|
}
|
|
32
32
|
]
|
|
33
33
|
}
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"hooks": [
|
|
57
57
|
{
|
|
58
58
|
"type": "command",
|
|
59
|
-
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').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(() => console.log('[COMPOUND TRIGGER] Consider /vibe.utils --compound'))\""
|
|
59
|
+
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/memory').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(() => console.log('[COMPOUND TRIGGER] Consider /vibe.utils --compound'))\""
|
|
60
60
|
}
|
|
61
61
|
]
|
|
62
62
|
},
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"hooks": [
|
|
66
66
|
{
|
|
67
67
|
"type": "command",
|
|
68
|
-
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').then(t => t.validateCodeQuality({targetPath: '.', projectPath: p}).then(r => console.log('[REVIEW PREP]', r.content[0].text.split('\\n').slice(0,5).join(' | ')))).catch(() => console.log('[REVIEW MODE] Use /vibe.review'))\""
|
|
68
|
+
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/convention').then(t => t.validateCodeQuality({targetPath: '.', projectPath: p}).then(r => console.log('[REVIEW PREP]', r.content[0].text.split('\\n').slice(0,5).join(' | ')))).catch(() => console.log('[REVIEW MODE] Use /vibe.review'))\""
|
|
69
69
|
}
|
|
70
70
|
]
|
|
71
71
|
},
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"hooks": [
|
|
84
84
|
{
|
|
85
85
|
"type": "command",
|
|
86
|
-
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').then(t => t.analyzeComplexity({targetPath: '.', projectPath: p}).then(r => console.log('[COMPLEXITY]', r.content[0].text.split('\\n').slice(0,5).join(' | ')))).catch(() => console.log('[ANALYZE] Use analyzeComplexity tool'))\""
|
|
86
|
+
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/convention').then(t => t.analyzeComplexity({targetPath: '.', projectPath: p}).then(r => console.log('[COMPLEXITY]', r.content[0].text.split('\\n').slice(0,5).join(' | ')))).catch(() => console.log('[ANALYZE] Use analyzeComplexity tool'))\""
|
|
87
87
|
}
|
|
88
88
|
]
|
|
89
89
|
},
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"hooks": [
|
|
93
93
|
{
|
|
94
94
|
"type": "command",
|
|
95
|
-
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').then(t => t.listMemories({limit: 10, projectPath: p}).then(r => console.log('[RECALL]', r.content[0].text.split('\\n').slice(0,7).join(' | ')))).catch(() => console.log('[RECALL] Use recallMemory tool'))\""
|
|
95
|
+
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/memory').then(t => t.listMemories({limit: 10, projectPath: p}).then(r => console.log('[RECALL]', r.content[0].text.split('\\n').slice(0,7).join(' | ')))).catch(() => console.log('[RECALL] Use recallMemory tool'))\""
|
|
96
96
|
}
|
|
97
97
|
]
|
|
98
98
|
},
|
|
@@ -157,7 +157,7 @@
|
|
|
157
157
|
"hooks": [
|
|
158
158
|
{
|
|
159
159
|
"type": "command",
|
|
160
|
-
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').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)))\""
|
|
160
|
+
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/memory').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)))\""
|
|
161
161
|
}
|
|
162
162
|
]
|
|
163
163
|
},
|
|
@@ -166,7 +166,7 @@
|
|
|
166
166
|
"hooks": [
|
|
167
167
|
{
|
|
168
168
|
"type": "command",
|
|
169
|
-
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').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)))\""
|
|
169
|
+
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/memory').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)))\""
|
|
170
170
|
}
|
|
171
171
|
]
|
|
172
172
|
},
|
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
"hooks": [
|
|
176
176
|
{
|
|
177
177
|
"type": "command",
|
|
178
|
-
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').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)))\""
|
|
178
|
+
"command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/memory').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)))\""
|
|
179
179
|
}
|
|
180
180
|
]
|
|
181
181
|
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@su-record/vibe",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.3",
|
|
4
4
|
"description": "Vibe - Claude Code exclusive SPEC-driven AI coding framework with 35+ integrated tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cli/index.js",
|
|
7
7
|
"exports": {
|
|
8
8
|
".": "./dist/cli/index.js",
|
|
9
9
|
"./tools": "./dist/tools/index.js",
|
|
10
|
+
"./tools/memory": "./dist/tools/memory/index.js",
|
|
11
|
+
"./tools/convention": "./dist/tools/convention/index.js",
|
|
12
|
+
"./tools/semantic": "./dist/tools/semantic/index.js",
|
|
13
|
+
"./tools/thinking": "./dist/tools/thinking/index.js",
|
|
14
|
+
"./tools/planning": "./dist/tools/planning/index.js",
|
|
15
|
+
"./tools/prompt": "./dist/tools/prompt/index.js",
|
|
16
|
+
"./tools/ui": "./dist/tools/ui/index.js",
|
|
17
|
+
"./tools/time": "./dist/tools/time/index.js",
|
|
18
|
+
"./tools/reasoning": "./dist/tools/reasoning/index.js",
|
|
19
|
+
"./tools/analytics": "./dist/tools/analytics/index.js",
|
|
10
20
|
"./orchestrator": "./dist/orchestrator/index.js"
|
|
11
21
|
},
|
|
12
22
|
"bin": {
|
package/skills/tool-fallback.md
CHANGED
|
@@ -1,22 +1,55 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Tool failure fallback strategies. Auto-activates on API errors, search failures, timeouts, 429, 5xx, overloaded errors.
|
|
2
|
+
description: Tool failure fallback strategies with circuit breaker. Auto-activates on API errors, search failures, timeouts, 429, 5xx, overloaded errors.
|
|
3
3
|
---
|
|
4
4
|
# Tool Fallback Strategies
|
|
5
5
|
|
|
6
6
|
Guide for finding alternatives when tools fail to continue work.
|
|
7
7
|
|
|
8
|
+
## Circuit Breaker Pattern
|
|
9
|
+
|
|
10
|
+
Track tool failures and temporarily disable unreliable tools:
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
Tool State Machine:
|
|
14
|
+
┌─────────┐ 3 failures ┌─────────┐ 30s cooldown ┌─────────────┐
|
|
15
|
+
│ CLOSED │ ─────────────→ │ OPEN │ ───────────────→ │ HALF-OPEN │
|
|
16
|
+
│ (normal)│ │ (block) │ │ (test 1 req)│
|
|
17
|
+
└─────────┘ └─────────┘ └─────────────┘
|
|
18
|
+
↑ │
|
|
19
|
+
│ success │
|
|
20
|
+
└────────────────────────────────────────────────────────┘
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
| State | Behavior |
|
|
24
|
+
|-------|----------|
|
|
25
|
+
| **CLOSED** | Normal operation, count failures |
|
|
26
|
+
| **OPEN** | Block all requests, use alternative immediately |
|
|
27
|
+
| **HALF-OPEN** | Allow 1 test request after cooldown |
|
|
28
|
+
|
|
29
|
+
**Per-tool tracking:**
|
|
30
|
+
```
|
|
31
|
+
vibe-gpt: failures=2, state=CLOSED
|
|
32
|
+
vibe-gemini: failures=0, state=CLOSED
|
|
33
|
+
WebSearch: failures=3, state=OPEN (blocked until 14:32:00)
|
|
34
|
+
context7: failures=1, state=CLOSED
|
|
35
|
+
```
|
|
36
|
+
|
|
8
37
|
## When Web Search Fails
|
|
9
38
|
|
|
10
39
|
| Alternative | Method |
|
|
11
40
|
|-------------|--------|
|
|
12
|
-
| context7 MCP | `
|
|
41
|
+
| context7 MCP | `mcp__context7__query-docs` |
|
|
13
42
|
| vibe-gpt | `mcp__vibe-gpt__gpt_chat` |
|
|
14
43
|
| Cached knowledge | Use Claude's built-in knowledge |
|
|
15
44
|
|
|
16
45
|
```
|
|
17
46
|
Web Search fails (429, 529, timeout)
|
|
18
47
|
↓
|
|
19
|
-
|
|
48
|
+
Check circuit breaker state
|
|
49
|
+
↓
|
|
50
|
+
If OPEN → Skip to alternative immediately
|
|
51
|
+
↓
|
|
52
|
+
If CLOSED → Try context7 for library docs
|
|
20
53
|
↓
|
|
21
54
|
If still fails, ask GPT
|
|
22
55
|
↓
|
|
@@ -25,12 +58,13 @@ Last resort: Claude's built-in knowledge
|
|
|
25
58
|
|
|
26
59
|
## API Error Responses
|
|
27
60
|
|
|
28
|
-
| Error | Cause | Response |
|
|
29
|
-
|
|
30
|
-
| 429 | Rate Limit | Exponential backoff
|
|
31
|
-
| 5xx | Server Error | Switch to alternative
|
|
32
|
-
| 529 | Overloaded | Wait and retry
|
|
33
|
-
| Timeout | Network | Split request or retry |
|
|
61
|
+
| Error | Cause | Response | Circuit Breaker |
|
|
62
|
+
|-------|-------|----------|-----------------|
|
|
63
|
+
| 429 | Rate Limit | Exponential backoff | +1 failure count |
|
|
64
|
+
| 5xx | Server Error | Switch to alternative | +1 failure count |
|
|
65
|
+
| 529 | Overloaded | Wait and retry | +1 failure count |
|
|
66
|
+
| Timeout | Network | Split request or retry | +1 failure count |
|
|
67
|
+
| 401/403 | Auth Error | Re-auth or alternative | Don't count (auth issue) |
|
|
34
68
|
|
|
35
69
|
## When File/Code Not Found
|
|
36
70
|
|
|
@@ -49,6 +83,8 @@ Check git log for history
|
|
|
49
83
|
```
|
|
50
84
|
vibe-gpt fails
|
|
51
85
|
↓
|
|
86
|
+
Check circuit: If OPEN, skip to next
|
|
87
|
+
↓
|
|
52
88
|
Try vibe-gemini (similar capability)
|
|
53
89
|
↓
|
|
54
90
|
Try context7 (for docs)
|
|
@@ -56,18 +92,35 @@ Try context7 (for docs)
|
|
|
56
92
|
Claude solves alone
|
|
57
93
|
```
|
|
58
94
|
|
|
59
|
-
## Retry Strategy
|
|
95
|
+
## Retry Strategy with Circuit Breaker
|
|
60
96
|
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
97
|
+
```
|
|
98
|
+
Request to tool
|
|
99
|
+
↓
|
|
100
|
+
Check circuit state
|
|
101
|
+
↓
|
|
102
|
+
┌─ OPEN? ──→ Use alternative immediately (no retry)
|
|
103
|
+
│
|
|
104
|
+
└─ CLOSED/HALF-OPEN? ──→ Try request
|
|
105
|
+
↓
|
|
106
|
+
Success? ──→ Reset failure count
|
|
107
|
+
↓ No
|
|
108
|
+
Retry with backoff:
|
|
109
|
+
retry(1): wait 2s
|
|
110
|
+
retry(2): wait 4s
|
|
111
|
+
retry(3): wait 8s
|
|
112
|
+
↓
|
|
113
|
+
All failed? ──→ +1 failure, check threshold
|
|
114
|
+
↓
|
|
115
|
+
failures >= 3? ──→ OPEN circuit for 30s
|
|
116
|
+
↓
|
|
117
|
+
Use alternative
|
|
67
118
|
```
|
|
68
119
|
|
|
69
120
|
## Principles
|
|
70
121
|
|
|
71
122
|
1. **Never stop** - Always find an alternative
|
|
72
123
|
2. **Before asking user** - Try alternatives first
|
|
73
|
-
3. **
|
|
124
|
+
3. **Track failures** - Open circuit after 3 consecutive failures
|
|
125
|
+
4. **Auto-recover** - Test after 30s cooldown
|
|
126
|
+
5. **Fail fast** - Skip blocked tools immediately
|