@su-record/vibe 2.4.2 → 2.4.4

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.
Files changed (46) hide show
  1. package/dist/orchestrator/parallelResearch.d.ts.map +1 -1
  2. package/dist/orchestrator/parallelResearch.js +31 -3
  3. package/dist/orchestrator/parallelResearch.js.map +1 -1
  4. package/dist/tools/analytics/index.d.ts +5 -0
  5. package/dist/tools/analytics/index.d.ts.map +1 -0
  6. package/dist/tools/analytics/index.js +5 -0
  7. package/dist/tools/analytics/index.js.map +1 -0
  8. package/dist/tools/convention/index.d.ts +10 -0
  9. package/dist/tools/convention/index.d.ts.map +1 -0
  10. package/dist/tools/convention/index.js +10 -0
  11. package/dist/tools/convention/index.js.map +1 -0
  12. package/dist/tools/memory/index.d.ts +19 -0
  13. package/dist/tools/memory/index.d.ts.map +1 -0
  14. package/dist/tools/memory/index.js +19 -0
  15. package/dist/tools/memory/index.js.map +1 -0
  16. package/dist/tools/planning/index.d.ts +8 -0
  17. package/dist/tools/planning/index.d.ts.map +1 -0
  18. package/dist/tools/planning/index.js +8 -0
  19. package/dist/tools/planning/index.js.map +1 -0
  20. package/dist/tools/prompt/index.d.ts +7 -0
  21. package/dist/tools/prompt/index.d.ts.map +1 -0
  22. package/dist/tools/prompt/index.js +7 -0
  23. package/dist/tools/prompt/index.js.map +1 -0
  24. package/dist/tools/reasoning/index.d.ts +5 -0
  25. package/dist/tools/reasoning/index.d.ts.map +1 -0
  26. package/dist/tools/reasoning/index.js +5 -0
  27. package/dist/tools/reasoning/index.js.map +1 -0
  28. package/dist/tools/semantic/index.d.ts +7 -0
  29. package/dist/tools/semantic/index.d.ts.map +1 -0
  30. package/dist/tools/semantic/index.js +7 -0
  31. package/dist/tools/semantic/index.js.map +1 -0
  32. package/dist/tools/thinking/index.d.ts +10 -0
  33. package/dist/tools/thinking/index.d.ts.map +1 -0
  34. package/dist/tools/thinking/index.js +10 -0
  35. package/dist/tools/thinking/index.js.map +1 -0
  36. package/dist/tools/time/index.d.ts +5 -0
  37. package/dist/tools/time/index.d.ts.map +1 -0
  38. package/dist/tools/time/index.js +5 -0
  39. package/dist/tools/time/index.js.map +1 -0
  40. package/dist/tools/ui/index.d.ts +5 -0
  41. package/dist/tools/ui/index.d.ts.map +1 -0
  42. package/dist/tools/ui/index.js +5 -0
  43. package/dist/tools/ui/index.js.map +1 -0
  44. package/hooks/hooks.json +14 -9
  45. package/package.json +11 -1
  46. package/skills/tool-fallback.md +70 -17
@@ -1 +1 @@
1
- {"version":3,"file":"parallelResearch.d.ts","sourceRoot":"","sources":["../../src/orchestrator/parallelResearch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,oBAAoB,EAEpB,YAAY,EAGb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAiB9C;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAM,EAAO,GAAG,YAAY,EAAE,CAiD7F;AA4FD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAwEtF;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAM,EAAO,EACxB,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,UAAU,CAAC,CAGrB"}
1
+ {"version":3,"file":"parallelResearch.d.ts","sourceRoot":"","sources":["../../src/orchestrator/parallelResearch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,oBAAoB,EAEpB,YAAY,EAGb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAiB9C;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAM,EAAO,GAAG,YAAY,EAAE,CAiD7F;AA4HD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAwEtF;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAM,EAAO,EACxB,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,UAAU,CAAC,CAGrB"}
@@ -68,6 +68,30 @@ Provide security recommendations.`
68
68
  }
69
69
  ];
70
70
  }
71
+ /**
72
+ * 에이전트 파일 로드
73
+ */
74
+ async function loadAgentFile(agentName, projectPath) {
75
+ const { promises: fs } = await import('fs');
76
+ const path = await import('path');
77
+ // 에이전트 파일 경로 우선순위
78
+ const possiblePaths = [
79
+ path.join(projectPath, '.claude', 'agents', 'research', `${agentName}.md`),
80
+ path.join(projectPath, 'agents', 'research', `${agentName}.md`),
81
+ // 패키지 내장 에이전트 (fallback)
82
+ path.join(process.cwd(), 'agents', 'research', `${agentName}.md`)
83
+ ];
84
+ for (const filePath of possiblePaths) {
85
+ try {
86
+ const content = await fs.readFile(filePath, 'utf-8');
87
+ return content;
88
+ }
89
+ catch {
90
+ // 다음 경로 시도
91
+ }
92
+ }
93
+ return null;
94
+ }
71
95
  /**
72
96
  * 단일 리서치 태스크 실행
73
97
  */
@@ -87,14 +111,18 @@ async function executeResearchTask(task, projectPath, timeout) {
87
111
  try {
88
112
  let sessionId = '';
89
113
  let result = '';
114
+ // 에이전트 파일 로드 (systemPrompt로 사용)
115
+ const agentContent = await loadAgentFile(task.name, projectPath);
90
116
  // Agent SDK query 실행
91
117
  const response = query({
92
118
  prompt: task.prompt,
93
119
  options: {
94
- model: 'claude-haiku-3-5', // 리서치는 빠른 모델 사용
120
+ model: 'claude-haiku-4-5-20251001', // 리서치는 빠른 모델 사용 (Haiku 4.5)
95
121
  maxTurns: 3,
96
122
  allowedTools: ['Read', 'Glob', 'Grep', 'WebFetch', 'WebSearch'],
97
- cwd: projectPath
123
+ cwd: projectPath,
124
+ // 에이전트 파일을 systemPrompt로 전달
125
+ systemPrompt: agentContent || undefined
98
126
  }
99
127
  });
100
128
  // 타임아웃 처리
@@ -146,7 +174,7 @@ async function executeResearchTask(task, projectPath, timeout) {
146
174
  * 병렬 리서치 실행
147
175
  */
148
176
  export async function parallelResearch(args) {
149
- const { tasks, projectPath = process.cwd(), maxConcurrency = 4, timeout = 60000 // 1분 기본 타임아웃
177
+ const { tasks, projectPath = process.cwd(), maxConcurrency = 4, timeout = 180000 // 3분 기본 타임아웃 (WebSearch 포함)
150
178
  } = args;
151
179
  const startTime = Date.now();
152
180
  const results = [];
@@ -1 +1 @@
1
- {"version":3,"file":"parallelResearch.js","sourceRoot":"","sources":["../../src/orchestrator/parallelResearch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parallelResearch.js","sourceRoot":"","sources":["../../src/orchestrator/parallelResearch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,uCAAuC;AACvC,IAAI,aAAa,GAAiE,IAAI,CAAC;AAEvF,KAAK,UAAU,gBAAgB;IAC7B,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QAC3D,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC;QAC1B,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,YAAsB,EAAE;IAC3E,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IAE7E,OAAO;QACL;YACE,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,gBAAgB;YAC1B,MAAM,EAAE,6CAA6C,OAAO,UAAU,QAAQ;;;;;;oCAMhD;SAC/B;QACD;YACE,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,gBAAgB;YAC1B,MAAM,EAAE,qCAAqC,QAAQ,gBAAgB,OAAO;;;;;;4DAMtB;SACvD;QACD;YACE,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,mBAAmB;YAC7B,MAAM,EAAE,yDAAyD,OAAO;;;;;;0CAMpC;SACrC;QACD;YACE,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,mBAAmB;YAC7B,MAAM,EAAE,uCAAuC,OAAO,UAAU,QAAQ;;;;;;kCAM5C;SAC7B;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,SAAiB,EAAE,WAAmB;IACjE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IAElC,kBAAkB;IAClB,MAAM,aAAa,GAAG;QACpB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,SAAS,KAAK,CAAC;QAC1E,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,SAAS,KAAK,CAAC;QAC/D,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,SAAS,KAAK,CAAC;KAClE,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,WAAW;QACb,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAChC,IAAkB,EAClB,WAAmB,EACnB,OAAe;IAEf,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAEvC,6BAA6B;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,SAAS,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE;YACpC,MAAM,EAAE,mCAAmC,IAAI,CAAC,IAAI,oBAAoB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK;YACtG,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACjC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,gCAAgC;QAChC,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAEjE,qBAAqB;QACrB,MAAM,QAAQ,GAAG,KAAK,CAAC;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE;gBACP,KAAK,EAAE,2BAA2B,EAAE,4BAA4B;gBAChE,QAAQ,EAAE,CAAC;gBACX,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC;gBAC/D,GAAG,EAAE,WAAW;gBAChB,4BAA4B;gBAC5B,YAAY,EAAE,YAAY,IAAI,SAAS;aACxC;SACF,CAAC,CAAC;QAEH,UAAU;QACV,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACtD,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,aAAa;QACb,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC/B,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBACrC,MAAM,GAAG,GAAG,OAAuB,CAAC;gBAEpC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;oBACtE,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC;gBAC7B,CAAC;gBAED,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBACxC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;gBACtB,CAAC;gBAED,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;oBACrD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO;yBACpC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;yBACpD,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;yBACxB,IAAI,CAAC,IAAI,CAAC,CAAC;oBACd,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,IAAI,WAAW,CAAC;oBACxB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QAEtD,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,SAAS;YACT,MAAM,EAAE,MAAM,IAAI,qBAAqB;YACvC,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACjC,CAAC;IAEJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC7D,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACjC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAA0B;IAC/D,MAAM,EACJ,KAAK,EACL,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,EAC3B,cAAc,GAAG,CAAC,EAClB,OAAO,GAAG,MAAM,CAAC,4BAA4B;MAC9C,GAAG,IAAI,CAAC;IAET,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,IAAI,CAAC;QACH,mBAAmB;QACnB,MAAM,MAAM,GAAqB,EAAE,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC;YACtD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,YAAY;QACZ,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CACnE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAC7C,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC;QAEnD,SAAS;QACT,IAAI,OAAO,GAAG,kCAAkC,CAAC;QACjD,OAAO,IAAI,iBAAiB,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QACnE,OAAO,IAAI,gBAAgB,YAAY,IAAI,OAAO,CAAC,MAAM,MAAM,CAAC;QAEhE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC1C,OAAO,IAAI,OAAO,MAAM,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC;YACjD,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;YAEjE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,iBAAiB;gBACjB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG;oBACxC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK;oBACrC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBAClB,OAAO,IAAI,KAAK,OAAO,IAAI,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,UAAU,MAAM,CAAC,KAAK,IAAI,CAAC;YACxC,CAAC;YACD,OAAO,IAAI,WAAW,CAAC;QACzB,CAAC;QAED,MAAM,UAAU,GAA2B;YACzC,OAAO;YACP,aAAa;YACb,YAAY;YACZ,YAAY;SACb,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAC1C,GAAG,UAAU;SACyB,CAAC;IAE3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAC5F,CAAC;SACH,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,YAAsB,EAAE,EACxB,cAAsB,OAAO,CAAC,GAAG,EAAE;IAEnC,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACtD,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Analytics Tools - 사용 분석
3
+ */
4
+ export { getUsageAnalytics } from './getUsageAnalytics.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ /**
2
+ * Analytics Tools - 사용 분석
3
+ */
4
+ export { getUsageAnalytics } from './getUsageAnalytics.js';
5
+ //# sourceMappingURL=index.js.map
@@ -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,7 @@
1
+ /**
2
+ * Prompt Tools - 프롬프트 분석 및 개선
3
+ */
4
+ export { enhancePrompt } from './enhancePrompt.js';
5
+ export { analyzePrompt } from './analyzePrompt.js';
6
+ export { enhancePromptGemini } from './enhancePromptGemini.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -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,7 @@
1
+ /**
2
+ * Prompt Tools - 프롬프트 분석 및 개선
3
+ */
4
+ export { enhancePrompt } from './enhancePrompt.js';
5
+ export { analyzePrompt } from './analyzePrompt.js';
6
+ export { enhancePromptGemini } from './enhancePromptGemini.js';
7
+ //# sourceMappingURL=index.js.map
@@ -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,5 @@
1
+ /**
2
+ * Reasoning Tools - 체계적 추론
3
+ */
4
+ export { applyReasoningFramework } from './applyReasoningFramework.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ /**
2
+ * Reasoning Tools - 체계적 추론
3
+ */
4
+ export { applyReasoningFramework } from './applyReasoningFramework.js';
5
+ //# sourceMappingURL=index.js.map
@@ -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,7 @@
1
+ /**
2
+ * Semantic Tools - 코드 분석 및 심볼 탐색
3
+ */
4
+ export { findSymbol } from './findSymbol.js';
5
+ export { findReferences } from './findReferences.js';
6
+ export { analyzeDependencyGraph } from './analyzeDependencyGraph.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -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,7 @@
1
+ /**
2
+ * Semantic Tools - 코드 분석 및 심볼 탐색
3
+ */
4
+ export { findSymbol } from './findSymbol.js';
5
+ export { findReferences } from './findReferences.js';
6
+ export { analyzeDependencyGraph } from './analyzeDependencyGraph.js';
7
+ //# sourceMappingURL=index.js.map
@@ -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,5 @@
1
+ /**
2
+ * Time Tools - 시간 관련
3
+ */
4
+ export { getCurrentTime } from './getCurrentTime.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ /**
2
+ * Time Tools - 시간 관련
3
+ */
4
+ export { getCurrentTime } from './getCurrentTime.js';
5
+ //# sourceMappingURL=index.js.map
@@ -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,5 @@
1
+ /**
2
+ * UI Tools - UI 미리보기
3
+ */
4
+ export { previewUiAscii } from './previewUiAscii.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ /**
2
+ * UI Tools - UI 미리보기
3
+ */
4
+ export { previewUiAscii } from './previewUiAscii.js';
5
+ //# sourceMappingURL=index.js.map
@@ -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
@@ -1,11 +1,16 @@
1
1
  {
2
+ "permissions": {
3
+ "allow": [],
4
+ "deny": [],
5
+ "ask": []
6
+ },
2
7
  "hooks": {
3
8
  "SessionStart": [
4
9
  {
5
10
  "hooks": [
6
11
  {
7
12
  "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))\""
13
+ "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
14
  }
10
15
  ]
11
16
  }
@@ -27,7 +32,7 @@
27
32
  "hooks": [
28
33
  {
29
34
  "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.'))\""
35
+ "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
36
  }
32
37
  ]
33
38
  }
@@ -56,7 +61,7 @@
56
61
  "hooks": [
57
62
  {
58
63
  "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'))\""
64
+ "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
65
  }
61
66
  ]
62
67
  },
@@ -65,7 +70,7 @@
65
70
  "hooks": [
66
71
  {
67
72
  "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'))\""
73
+ "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
74
  }
70
75
  ]
71
76
  },
@@ -83,7 +88,7 @@
83
88
  "hooks": [
84
89
  {
85
90
  "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'))\""
91
+ "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
92
  }
88
93
  ]
89
94
  },
@@ -92,7 +97,7 @@
92
97
  "hooks": [
93
98
  {
94
99
  "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'))\""
100
+ "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
101
  }
97
102
  ]
98
103
  },
@@ -157,7 +162,7 @@
157
162
  "hooks": [
158
163
  {
159
164
  "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)))\""
165
+ "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
166
  }
162
167
  ]
163
168
  },
@@ -166,7 +171,7 @@
166
171
  "hooks": [
167
172
  {
168
173
  "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)))\""
174
+ "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
175
  }
171
176
  ]
172
177
  },
@@ -175,7 +180,7 @@
175
180
  "hooks": [
176
181
  {
177
182
  "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)))\""
183
+ "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
184
  }
180
185
  ]
181
186
  }
package/package.json CHANGED
@@ -1,12 +1,22 @@
1
1
  {
2
2
  "name": "@su-record/vibe",
3
- "version": "2.4.2",
3
+ "version": "2.4.4",
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": {
@@ -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 | `mcp__context7__get-library-docs` |
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
- Try context7 for library docs
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 retry (2-4-8s) |
31
- | 5xx | Server Error | Switch to alternative tool |
32
- | 529 | Overloaded | Wait and retry or use alternative |
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
- ```typescript
62
- // Exponential backoff
63
- retry(1): wait 2s
64
- retry(2): wait 4s
65
- retry(3): wait 8s
66
- retry(4): give up use alternative
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. **Log failures** - Prevent same failure later
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