@su-record/vibe 3.2.19 → 3.2.21
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/cli/setup/ProjectSetup.d.ts.map +1 -1
- package/dist/cli/setup/ProjectSetup.js +13 -1
- package/dist/cli/setup/ProjectSetup.js.map +1 -1
- package/dist/tools/dispatch/deterministicSignals.d.ts.map +1 -1
- package/dist/tools/dispatch/deterministicSignals.js +15 -10
- package/dist/tools/dispatch/deterministicSignals.js.map +1 -1
- package/dist/tools/dispatch/vibePaths.d.ts +7 -0
- package/dist/tools/dispatch/vibePaths.d.ts.map +1 -0
- package/dist/tools/dispatch/vibePaths.js +35 -0
- package/dist/tools/dispatch/vibePaths.js.map +1 -0
- package/dist/tools/spec/validateSpecDocument.d.ts.map +1 -1
- package/dist/tools/spec/validateSpecDocument.js +33 -6
- package/dist/tools/spec/validateSpecDocument.js.map +1 -1
- package/hooks/scripts/code-check.js +90 -16
- package/hooks/scripts/lib/anchor.js +15 -4
- package/hooks/scripts/lib/inbox.js +10 -2
- package/package.json +1 -1
- package/dist/infra/lib/DeepInit.d.ts +0 -60
- package/dist/infra/lib/DeepInit.d.ts.map +0 -1
- package/dist/infra/lib/DeepInit.js +0 -245
- package/dist/infra/lib/DeepInit.js.map +0 -1
- package/dist/infra/lib/FrameworkDetector.d.ts +0 -56
- package/dist/infra/lib/FrameworkDetector.d.ts.map +0 -1
- package/dist/infra/lib/FrameworkDetector.js +0 -287
- package/dist/infra/lib/FrameworkDetector.js.map +0 -1
- package/dist/infra/lib/ModelRouter.d.ts +0 -48
- package/dist/infra/lib/ModelRouter.d.ts.map +0 -1
- package/dist/infra/lib/ModelRouter.js +0 -216
- package/dist/infra/lib/ModelRouter.js.map +0 -1
- package/dist/infra/lib/ReviewRace.d.ts +0 -86
- package/dist/infra/lib/ReviewRace.d.ts.map +0 -1
- package/dist/infra/lib/ReviewRace.js +0 -454
- package/dist/infra/lib/ReviewRace.js.map +0 -1
- package/dist/infra/lib/RuleBuildSystem.d.ts +0 -157
- package/dist/infra/lib/RuleBuildSystem.d.ts.map +0 -1
- package/dist/infra/lib/RuleBuildSystem.js +0 -550
- package/dist/infra/lib/RuleBuildSystem.js.map +0 -1
- package/dist/infra/lib/SkillQualityGate.d.ts +0 -42
- package/dist/infra/lib/SkillQualityGate.d.ts.map +0 -1
- package/dist/infra/lib/SkillQualityGate.js +0 -220
- package/dist/infra/lib/SkillQualityGate.js.map +0 -1
- package/dist/infra/lib/SkillRepository.d.ts +0 -134
- package/dist/infra/lib/SkillRepository.d.ts.map +0 -1
- package/dist/infra/lib/SkillRepository.js +0 -500
- package/dist/infra/lib/SkillRepository.js.map +0 -1
- package/dist/infra/lib/UltraQA.d.ts +0 -89
- package/dist/infra/lib/UltraQA.d.ts.map +0 -1
- package/dist/infra/lib/UltraQA.js +0 -301
- package/dist/infra/lib/UltraQA.js.map +0 -1
|
@@ -1,500 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Skill Repository - ~/.claude/vibe/skills/ 저장소 관리
|
|
3
|
-
*
|
|
4
|
-
* 기본 스킬 세트를 전역 위치에 설치하고 관리
|
|
5
|
-
*/
|
|
6
|
-
import fs from 'fs';
|
|
7
|
-
import path from 'path';
|
|
8
|
-
import os from 'os';
|
|
9
|
-
import { fileURLToPath } from 'url';
|
|
10
|
-
import { parseSkillFrontmatter } from './SkillFrontmatter.js';
|
|
11
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
-
const __dirname = path.dirname(__filename);
|
|
13
|
-
/**
|
|
14
|
-
* 기본 전역 스킬 디렉토리 경로
|
|
15
|
-
*/
|
|
16
|
-
export function getGlobalSkillsDir() {
|
|
17
|
-
return path.join(os.homedir(), '.claude', 'vibe', 'skills');
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* 번들된 기본 스킬 디렉토리 (패키지 내부)
|
|
21
|
-
*/
|
|
22
|
-
export function getBundledSkillsDir() {
|
|
23
|
-
// dist/lib/SkillRepository.js 기준 -> ../../skills
|
|
24
|
-
const distPath = path.resolve(__dirname, '..', '..', 'skills');
|
|
25
|
-
if (fs.existsSync(distPath)) {
|
|
26
|
-
return distPath;
|
|
27
|
-
}
|
|
28
|
-
// 개발 환경: src/lib -> ../../skills
|
|
29
|
-
return path.resolve(__dirname, '..', '..', 'skills');
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Skill Repository 클래스
|
|
33
|
-
*/
|
|
34
|
-
export class SkillRepository {
|
|
35
|
-
userSkillsDir;
|
|
36
|
-
bundledSkillsDir;
|
|
37
|
-
constructor(config = {}) {
|
|
38
|
-
this.userSkillsDir = config.userSkillsDir || getGlobalSkillsDir();
|
|
39
|
-
this.bundledSkillsDir = config.bundledSkillsDir || getBundledSkillsDir();
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* 스킬 디렉토리 초기화
|
|
43
|
-
*/
|
|
44
|
-
ensureSkillsDir() {
|
|
45
|
-
if (!fs.existsSync(this.userSkillsDir)) {
|
|
46
|
-
fs.mkdirSync(this.userSkillsDir, { recursive: true });
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* 기본 스킬 세트 시딩 (없는 것만 복사)
|
|
51
|
-
*/
|
|
52
|
-
seedDefaultSkills() {
|
|
53
|
-
this.ensureSkillsDir();
|
|
54
|
-
const seeded = [];
|
|
55
|
-
const skipped = [];
|
|
56
|
-
const errors = [];
|
|
57
|
-
if (!fs.existsSync(this.bundledSkillsDir)) {
|
|
58
|
-
errors.push(`Bundled skills directory not found: ${this.bundledSkillsDir}`);
|
|
59
|
-
return { seeded, skipped, errors };
|
|
60
|
-
}
|
|
61
|
-
const entries = fs.readdirSync(this.bundledSkillsDir, { withFileTypes: true });
|
|
62
|
-
for (const entry of entries) {
|
|
63
|
-
if (!entry.isFile())
|
|
64
|
-
continue;
|
|
65
|
-
if (!entry.name.endsWith('.md') && !entry.name.endsWith('.yaml') && !entry.name.endsWith('.yml')) {
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
const srcPath = path.join(this.bundledSkillsDir, entry.name);
|
|
69
|
-
const destPath = path.join(this.userSkillsDir, entry.name);
|
|
70
|
-
try {
|
|
71
|
-
if (fs.existsSync(destPath)) {
|
|
72
|
-
skipped.push(entry.name);
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
// Atomic write: temp file -> rename
|
|
76
|
-
const tmpPath = destPath + '.tmp';
|
|
77
|
-
const content = fs.readFileSync(srcPath, 'utf8');
|
|
78
|
-
fs.writeFileSync(tmpPath, content, { flag: 'wx' });
|
|
79
|
-
fs.renameSync(tmpPath, destPath);
|
|
80
|
-
seeded.push(entry.name);
|
|
81
|
-
}
|
|
82
|
-
catch (err) {
|
|
83
|
-
if (err.code === 'EEXIST') {
|
|
84
|
-
skipped.push(entry.name);
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
errors.push(`${entry.name}: ${err.message}`);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return { seeded, skipped, errors };
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* 모든 스킬 목록 조회 (user + bundled fallback)
|
|
95
|
-
*/
|
|
96
|
-
listSkills() {
|
|
97
|
-
const skills = new Map();
|
|
98
|
-
// 1. 번들 스킬 먼저 로드 (낮은 우선순위)
|
|
99
|
-
if (fs.existsSync(this.bundledSkillsDir)) {
|
|
100
|
-
this.loadSkillsFromDir(this.bundledSkillsDir, 'default', skills);
|
|
101
|
-
}
|
|
102
|
-
// 2. 유저 스킬 로드 (높은 우선순위, 덮어쓰기)
|
|
103
|
-
if (fs.existsSync(this.userSkillsDir)) {
|
|
104
|
-
this.loadSkillsFromDir(this.userSkillsDir, 'user', skills);
|
|
105
|
-
}
|
|
106
|
-
return Array.from(skills.values());
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* 디렉토리에서 스킬 로드
|
|
110
|
-
*/
|
|
111
|
-
loadSkillsFromDir(dir, source, skills) {
|
|
112
|
-
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
113
|
-
for (const entry of entries) {
|
|
114
|
-
if (!entry.isFile())
|
|
115
|
-
continue;
|
|
116
|
-
if (!entry.name.endsWith('.md') && !entry.name.endsWith('.yaml') && !entry.name.endsWith('.yml')) {
|
|
117
|
-
continue;
|
|
118
|
-
}
|
|
119
|
-
const filePath = path.join(dir, entry.name);
|
|
120
|
-
const id = entry.name.replace(/\.(md|yaml|yml)$/, '');
|
|
121
|
-
try {
|
|
122
|
-
const content = fs.readFileSync(filePath, 'utf8');
|
|
123
|
-
const parsed = parseSkillFrontmatter(content);
|
|
124
|
-
const info = {
|
|
125
|
-
id,
|
|
126
|
-
name: parsed?.metadata?.name || id,
|
|
127
|
-
description: parsed?.metadata?.description || this.extractDescription(content),
|
|
128
|
-
path: filePath,
|
|
129
|
-
source,
|
|
130
|
-
metadata: parsed?.metadata,
|
|
131
|
-
};
|
|
132
|
-
skills.set(id, info);
|
|
133
|
-
}
|
|
134
|
-
catch {
|
|
135
|
-
// 파싱 실패한 스킬은 건너뜀
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* 콘텐츠에서 설명 추출 (frontmatter 없는 경우)
|
|
141
|
-
*/
|
|
142
|
-
extractDescription(content) {
|
|
143
|
-
// description: 라인 찾기
|
|
144
|
-
const match = content.match(/^description:\s*(.+)$/m);
|
|
145
|
-
if (match) {
|
|
146
|
-
return match[1].replace(/^["']|["']$/g, '');
|
|
147
|
-
}
|
|
148
|
-
// 첫 번째 문단 사용
|
|
149
|
-
const lines = content.split('\n').filter(l => l.trim() && !l.startsWith('#') && !l.startsWith('---'));
|
|
150
|
-
return lines[0]?.slice(0, 200) || 'No description';
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* ID로 스킬 조회
|
|
154
|
-
*/
|
|
155
|
-
getSkill(id) {
|
|
156
|
-
// 유저 스킬 우선
|
|
157
|
-
const userPath = this.findSkillFile(this.userSkillsDir, id);
|
|
158
|
-
if (userPath) {
|
|
159
|
-
return this.loadSkillInfo(userPath, id, 'user');
|
|
160
|
-
}
|
|
161
|
-
// 번들 스킬 fallback
|
|
162
|
-
const bundledPath = this.findSkillFile(this.bundledSkillsDir, id);
|
|
163
|
-
if (bundledPath) {
|
|
164
|
-
return this.loadSkillInfo(bundledPath, id, 'default');
|
|
165
|
-
}
|
|
166
|
-
return null;
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* 스킬 파일 찾기
|
|
170
|
-
*/
|
|
171
|
-
findSkillFile(dir, id) {
|
|
172
|
-
if (!fs.existsSync(dir))
|
|
173
|
-
return null;
|
|
174
|
-
const extensions = ['.md', '.yaml', '.yml'];
|
|
175
|
-
for (const ext of extensions) {
|
|
176
|
-
const filePath = path.join(dir, id + ext);
|
|
177
|
-
if (fs.existsSync(filePath)) {
|
|
178
|
-
return filePath;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return null;
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* 스킬 정보 로드
|
|
185
|
-
*/
|
|
186
|
-
loadSkillInfo(filePath, id, source) {
|
|
187
|
-
try {
|
|
188
|
-
const content = fs.readFileSync(filePath, 'utf8');
|
|
189
|
-
const parsed = parseSkillFrontmatter(content);
|
|
190
|
-
return {
|
|
191
|
-
id,
|
|
192
|
-
name: parsed?.metadata?.name || id,
|
|
193
|
-
description: parsed?.metadata?.description || this.extractDescription(content),
|
|
194
|
-
path: filePath,
|
|
195
|
-
source,
|
|
196
|
-
metadata: parsed?.metadata,
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
catch {
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* 스킬 콘텐츠 읽기
|
|
205
|
-
*/
|
|
206
|
-
getSkillContent(id) {
|
|
207
|
-
const skill = this.getSkill(id);
|
|
208
|
-
if (!skill)
|
|
209
|
-
return null;
|
|
210
|
-
try {
|
|
211
|
-
return fs.readFileSync(skill.path, 'utf8');
|
|
212
|
-
}
|
|
213
|
-
catch {
|
|
214
|
-
return null;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* 유저 스킬 저장
|
|
219
|
-
*/
|
|
220
|
-
saveSkill(id, content) {
|
|
221
|
-
this.ensureSkillsDir();
|
|
222
|
-
const filePath = path.join(this.userSkillsDir, `${id}.md`);
|
|
223
|
-
// Atomic write
|
|
224
|
-
const tmpPath = filePath + '.tmp';
|
|
225
|
-
fs.writeFileSync(tmpPath, content);
|
|
226
|
-
fs.renameSync(tmpPath, filePath);
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* 유저 스킬 삭제
|
|
230
|
-
*/
|
|
231
|
-
deleteSkill(id) {
|
|
232
|
-
const userPath = this.findSkillFile(this.userSkillsDir, id);
|
|
233
|
-
if (userPath) {
|
|
234
|
-
fs.unlinkSync(userPath);
|
|
235
|
-
return true;
|
|
236
|
-
}
|
|
237
|
-
return false;
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* 티어 기반 스킬 필터링
|
|
241
|
-
*/
|
|
242
|
-
listSkillsByTier(tier) {
|
|
243
|
-
return this.listSkills().filter(skill => (skill.metadata?.tier ?? 'standard') === tier);
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* core + standard 스킬만 반환 (optional 제외)
|
|
247
|
-
*/
|
|
248
|
-
listActiveSkills() {
|
|
249
|
-
return this.listSkills().filter(skill => {
|
|
250
|
-
const t = skill.metadata?.tier ?? 'standard';
|
|
251
|
-
return t === 'core' || t === 'standard';
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* 트리거 기반 스킬 검색
|
|
256
|
-
*/
|
|
257
|
-
findSkillsByTrigger(input) {
|
|
258
|
-
const skills = this.listSkills();
|
|
259
|
-
const lowerInput = input.toLowerCase();
|
|
260
|
-
return skills.filter(skill => {
|
|
261
|
-
if (!skill.metadata?.triggers)
|
|
262
|
-
return false;
|
|
263
|
-
return skill.metadata.triggers.some(trigger => lowerInput.includes(trigger.toLowerCase()));
|
|
264
|
-
});
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* 저장소 경로 정보
|
|
268
|
-
*/
|
|
269
|
-
getPaths() {
|
|
270
|
-
return {
|
|
271
|
-
userDir: this.userSkillsDir,
|
|
272
|
-
bundledDir: this.bundledSkillsDir,
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* 기본 스킬 세트 정의 (인라인)
|
|
278
|
-
* postinstall에서 skills/ 폴더가 없을 때 사용
|
|
279
|
-
*/
|
|
280
|
-
/**
|
|
281
|
-
* Generate DEFAULT_SKILLS with resolved core path URL.
|
|
282
|
-
* Accepts corePathUrl as parameter to avoid infra→cli layer violation.
|
|
283
|
-
*/
|
|
284
|
-
export function getDefaultSkills(corePathUrl) {
|
|
285
|
-
return [
|
|
286
|
-
{
|
|
287
|
-
id: 'multi-llm-orchestration',
|
|
288
|
-
content: `---
|
|
289
|
-
name: multi-llm-orchestration
|
|
290
|
-
description: "Multi-LLM research using GPT and Antigravity for comprehensive analysis"
|
|
291
|
-
triggers: [gpt, antigravity, agy, multi-llm, research, parallel research]
|
|
292
|
-
priority: 80
|
|
293
|
-
---
|
|
294
|
-
# Multi-LLM Orchestration
|
|
295
|
-
|
|
296
|
-
Use multiple LLMs for comprehensive research and validation.
|
|
297
|
-
|
|
298
|
-
## Usage
|
|
299
|
-
|
|
300
|
-
\`\`\`bash
|
|
301
|
-
# Via Bash hook (automatic in /vibe.spec)
|
|
302
|
-
node hooks/scripts/llm-orchestrate.js gpt "your prompt"
|
|
303
|
-
node hooks/scripts/llm-orchestrate.js antigravity "your prompt"
|
|
304
|
-
\`\`\`
|
|
305
|
-
|
|
306
|
-
## Setup
|
|
307
|
-
|
|
308
|
-
\`\`\`bash
|
|
309
|
-
vibe gpt key <key> # Configure GPT API key
|
|
310
|
-
vibe antigravity key <key> # Configure Antigravity API key
|
|
311
|
-
vibe status # Check current configuration
|
|
312
|
-
\`\`\`
|
|
313
|
-
|
|
314
|
-
## Best Practices
|
|
315
|
-
|
|
316
|
-
1. Use GPT for best practices and code review
|
|
317
|
-
2. Use Antigravity for documentation and security analysis
|
|
318
|
-
3. Combine results for comprehensive coverage
|
|
319
|
-
`,
|
|
320
|
-
},
|
|
321
|
-
{
|
|
322
|
-
id: 'error-recovery',
|
|
323
|
-
content: `---
|
|
324
|
-
name: error-recovery
|
|
325
|
-
description: "Error recovery patterns and retry strategies"
|
|
326
|
-
triggers: [error, fail, retry, recover, fix]
|
|
327
|
-
priority: 70
|
|
328
|
-
---
|
|
329
|
-
# Error Recovery Patterns
|
|
330
|
-
|
|
331
|
-
## Common Error Types
|
|
332
|
-
|
|
333
|
-
### Build Errors
|
|
334
|
-
- Check TypeScript compilation errors
|
|
335
|
-
- Verify dependency versions
|
|
336
|
-
- Run \`npm ci\` to clean install
|
|
337
|
-
|
|
338
|
-
### Test Failures
|
|
339
|
-
- Run failed tests in isolation
|
|
340
|
-
- Check test fixtures/mocks
|
|
341
|
-
- Verify async timing issues
|
|
342
|
-
|
|
343
|
-
### Runtime Errors
|
|
344
|
-
- Check stack trace carefully
|
|
345
|
-
- Verify environment variables
|
|
346
|
-
- Check external service connectivity
|
|
347
|
-
|
|
348
|
-
## Retry Strategy
|
|
349
|
-
|
|
350
|
-
1. First retry: Same action
|
|
351
|
-
2. Second retry: Clean state (cache clear)
|
|
352
|
-
3. Third retry: Alternative approach
|
|
353
|
-
4. Max retries exceeded: Escalate to user
|
|
354
|
-
|
|
355
|
-
## Auto-Recovery Commands
|
|
356
|
-
|
|
357
|
-
\`\`\`bash
|
|
358
|
-
# Clean build
|
|
359
|
-
rm -rf node_modules dist && npm ci && npm run build
|
|
360
|
-
|
|
361
|
-
# Reset git state (careful!)
|
|
362
|
-
git stash && git checkout .
|
|
363
|
-
|
|
364
|
-
# Clear caches
|
|
365
|
-
npm cache clean --force
|
|
366
|
-
\`\`\`
|
|
367
|
-
`,
|
|
368
|
-
},
|
|
369
|
-
{
|
|
370
|
-
id: 'code-quality-check',
|
|
371
|
-
content: `---
|
|
372
|
-
name: code-quality-check
|
|
373
|
-
description: "Code quality validation using core tools"
|
|
374
|
-
triggers: [quality, lint, complexity, review]
|
|
375
|
-
priority: 60
|
|
376
|
-
---
|
|
377
|
-
# Code Quality Check
|
|
378
|
-
|
|
379
|
-
## Using Core Tools
|
|
380
|
-
|
|
381
|
-
\`\`\`bash
|
|
382
|
-
# Analyze complexity
|
|
383
|
-
node -e "import('${corePathUrl}/node_modules/@su-record/vibe/dist/tools/index.js').then(t =>
|
|
384
|
-
t.analyzeComplexity({targetPath: 'src/', projectPath: process.cwd()})
|
|
385
|
-
.then(r => console.log(r.content[0].text))
|
|
386
|
-
)"
|
|
387
|
-
|
|
388
|
-
# Validate quality
|
|
389
|
-
node -e "import('${corePathUrl}/node_modules/@su-record/vibe/dist/tools/index.js').then(t =>
|
|
390
|
-
t.validateCodeQuality({targetPath: 'src/', projectPath: process.cwd()})
|
|
391
|
-
.then(r => console.log(r.content[0].text))
|
|
392
|
-
)"
|
|
393
|
-
\`\`\`
|
|
394
|
-
|
|
395
|
-
## Quality Metrics
|
|
396
|
-
|
|
397
|
-
| Metric | Good | Warning | Critical |
|
|
398
|
-
|--------|------|---------|----------|
|
|
399
|
-
| Cyclomatic Complexity | ≤10 | 11-15 | >15 |
|
|
400
|
-
| Function Length | ≤30 | 31-50 | >50 |
|
|
401
|
-
| Nesting Depth | ≤3 | 4 | >4 |
|
|
402
|
-
|
|
403
|
-
## Common Issues
|
|
404
|
-
|
|
405
|
-
1. **High Complexity**: Extract helper functions
|
|
406
|
-
2. **Long Functions**: Split by responsibility
|
|
407
|
-
3. **Deep Nesting**: Use early returns
|
|
408
|
-
4. **Tight Coupling**: Apply dependency injection
|
|
409
|
-
`,
|
|
410
|
-
},
|
|
411
|
-
{
|
|
412
|
-
id: 'session-management',
|
|
413
|
-
content: `---
|
|
414
|
-
name: session-management
|
|
415
|
-
description: "Context and session management across conversations"
|
|
416
|
-
triggers: [session, context, memory, save, restore, continue]
|
|
417
|
-
priority: 75
|
|
418
|
-
---
|
|
419
|
-
# Session Management
|
|
420
|
-
|
|
421
|
-
## Starting a Session
|
|
422
|
-
|
|
423
|
-
\`\`\`bash
|
|
424
|
-
# Auto-restore previous context
|
|
425
|
-
node -e "import('${corePathUrl}/node_modules/@su-record/vibe/dist/tools/index.js').then(t =>
|
|
426
|
-
t.startSession({projectPath: process.cwd()})
|
|
427
|
-
.then(r => console.log(r.content[0].text))
|
|
428
|
-
)"
|
|
429
|
-
\`\`\`
|
|
430
|
-
|
|
431
|
-
## Saving Context
|
|
432
|
-
|
|
433
|
-
\`\`\`bash
|
|
434
|
-
# Save important decisions
|
|
435
|
-
node -e "import('${corePathUrl}/node_modules/@su-record/vibe/dist/tools/index.js').then(t =>
|
|
436
|
-
t.saveMemory({
|
|
437
|
-
key: 'decision-auth-method',
|
|
438
|
-
value: 'Using JWT with refresh tokens for auth',
|
|
439
|
-
category: 'architecture',
|
|
440
|
-
projectPath: process.cwd()
|
|
441
|
-
}).then(r => console.log(r.content[0].text))
|
|
442
|
-
)"
|
|
443
|
-
\`\`\`
|
|
444
|
-
|
|
445
|
-
## Context Management
|
|
446
|
-
|
|
447
|
-
At 70%+ context usage:
|
|
448
|
-
1. Use \`saveMemory\` for important decisions
|
|
449
|
-
2. Start new session with \`/new\`
|
|
450
|
-
3. Previous context auto-restores
|
|
451
|
-
|
|
452
|
-
## Slash Command
|
|
453
|
-
|
|
454
|
-
\`\`\`
|
|
455
|
-
/vibe.continue
|
|
456
|
-
\`\`\`
|
|
457
|
-
|
|
458
|
-
Restores previous session context automatically.
|
|
459
|
-
`,
|
|
460
|
-
},
|
|
461
|
-
];
|
|
462
|
-
}
|
|
463
|
-
/** @deprecated Use getDefaultSkills(corePathUrl) instead */
|
|
464
|
-
export const DEFAULT_SKILLS = getDefaultSkills('');
|
|
465
|
-
/**
|
|
466
|
-
* 인라인 기본 스킬 시딩 (번들 폴더가 없을 때)
|
|
467
|
-
*/
|
|
468
|
-
export function seedInlineDefaultSkills(targetDir) {
|
|
469
|
-
const seeded = [];
|
|
470
|
-
const errors = [];
|
|
471
|
-
if (!fs.existsSync(targetDir)) {
|
|
472
|
-
fs.mkdirSync(targetDir, { recursive: true });
|
|
473
|
-
}
|
|
474
|
-
for (const skill of DEFAULT_SKILLS) {
|
|
475
|
-
const destPath = path.join(targetDir, `${skill.id}.md`);
|
|
476
|
-
if (fs.existsSync(destPath)) {
|
|
477
|
-
continue; // 이미 존재하면 건너뜀
|
|
478
|
-
}
|
|
479
|
-
try {
|
|
480
|
-
const tmpPath = destPath + '.tmp';
|
|
481
|
-
fs.writeFileSync(tmpPath, skill.content, { flag: 'wx' });
|
|
482
|
-
fs.renameSync(tmpPath, destPath);
|
|
483
|
-
seeded.push(skill.id);
|
|
484
|
-
}
|
|
485
|
-
catch (err) {
|
|
486
|
-
if (err.code !== 'EEXIST') {
|
|
487
|
-
errors.push(`${skill.id}: ${err.message}`);
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
return { seeded, errors };
|
|
492
|
-
}
|
|
493
|
-
/**
|
|
494
|
-
* 편의 함수: 기본 스킬 세트 설치
|
|
495
|
-
*/
|
|
496
|
-
export function ensureDefaultSkills() {
|
|
497
|
-
const repo = new SkillRepository();
|
|
498
|
-
return repo.seedDefaultSkills();
|
|
499
|
-
}
|
|
500
|
-
//# sourceMappingURL=SkillRepository.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SkillRepository.js","sourceRoot":"","sources":["../../../src/infra/lib/SkillRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* UltraQA - 5-Cycle Autonomous QA Loop
|
|
3
|
-
* Test/Build/Lint → Fail → Architect Diagnosis → Executor Fix → Repeat
|
|
4
|
-
*
|
|
5
|
-
* @deprecated Not wired into the vibe runtime (no hook/skill/CLI consumer).
|
|
6
|
-
* No consumer in the shipped pipeline.
|
|
7
|
-
* Retained for API compatibility; may be removed in a future major.
|
|
8
|
-
*/
|
|
9
|
-
export type QAGoal = 'tests' | 'build' | 'lint' | 'typecheck' | 'custom' | 'all';
|
|
10
|
-
export interface QAConfig {
|
|
11
|
-
goals: QAGoal[];
|
|
12
|
-
maxCycles: number;
|
|
13
|
-
maxSameFailure: number;
|
|
14
|
-
customCommand?: string;
|
|
15
|
-
interactive?: boolean;
|
|
16
|
-
}
|
|
17
|
-
export interface QACycleResult {
|
|
18
|
-
cycle: number;
|
|
19
|
-
goal: QAGoal;
|
|
20
|
-
command: string;
|
|
21
|
-
passed: boolean;
|
|
22
|
-
output: string;
|
|
23
|
-
exitCode: number;
|
|
24
|
-
diagnosis?: string;
|
|
25
|
-
fix?: string;
|
|
26
|
-
}
|
|
27
|
-
export interface QASession {
|
|
28
|
-
config: QAConfig;
|
|
29
|
-
cycles: QACycleResult[];
|
|
30
|
-
currentCycle: number;
|
|
31
|
-
consecutiveFailures: Map<string, number>;
|
|
32
|
-
status: 'running' | 'passed' | 'failed' | 'max_cycles' | 'env_error' | 'architecture_question';
|
|
33
|
-
evidenceCollected: boolean;
|
|
34
|
-
startTime: Date;
|
|
35
|
-
endTime?: Date;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Create new QA session
|
|
39
|
-
*/
|
|
40
|
-
export declare function createQASession(config?: Partial<QAConfig>): QASession;
|
|
41
|
-
/**
|
|
42
|
-
* Get command for goal
|
|
43
|
-
*/
|
|
44
|
-
export declare function getCommandForGoal(goal: QAGoal, customCommand?: string): string;
|
|
45
|
-
/**
|
|
46
|
-
* Record cycle result
|
|
47
|
-
*/
|
|
48
|
-
export declare function recordCycleResult(session: QASession, result: Omit<QACycleResult, 'cycle'>): QASession;
|
|
49
|
-
/**
|
|
50
|
-
* Check if session should continue
|
|
51
|
-
*/
|
|
52
|
-
export declare function shouldContinue(session: QASession): boolean;
|
|
53
|
-
/**
|
|
54
|
-
* Generate architect diagnosis prompt
|
|
55
|
-
*/
|
|
56
|
-
export declare function generateDiagnosisPrompt(result: QACycleResult): string;
|
|
57
|
-
/**
|
|
58
|
-
* Generate executor fix prompt
|
|
59
|
-
*/
|
|
60
|
-
export declare function generateFixPrompt(diagnosis: string, result: QACycleResult): string;
|
|
61
|
-
/**
|
|
62
|
-
* 3-Fix Rule: Generate architecture escalation prompt
|
|
63
|
-
* When same failure occurs 3+ times, stop fixing and question architecture
|
|
64
|
-
*/
|
|
65
|
-
export declare function generateArchitectureEscalationPrompt(session: QASession): string;
|
|
66
|
-
/**
|
|
67
|
-
* Evidence Gate: Check if session has verification evidence
|
|
68
|
-
*/
|
|
69
|
-
export declare function requireEvidence(session: QASession): {
|
|
70
|
-
hasEvidence: boolean;
|
|
71
|
-
message: string;
|
|
72
|
-
};
|
|
73
|
-
/**
|
|
74
|
-
* Mark evidence as collected for the session
|
|
75
|
-
*/
|
|
76
|
-
export declare function markEvidenceCollected(session: QASession): void;
|
|
77
|
-
/**
|
|
78
|
-
* Format QA session status
|
|
79
|
-
*/
|
|
80
|
-
export declare function formatQAStatus(session: QASession): string;
|
|
81
|
-
/**
|
|
82
|
-
* Parse QA goal from string
|
|
83
|
-
*/
|
|
84
|
-
export declare function parseQAGoals(input: string): QAGoal[];
|
|
85
|
-
/**
|
|
86
|
-
* Create UltraQA workflow description
|
|
87
|
-
*/
|
|
88
|
-
export declare function describeUltraQAWorkflow(): string;
|
|
89
|
-
//# sourceMappingURL=UltraQA.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UltraQA.d.ts","sourceRoot":"","sources":["../../../src/infra/lib/UltraQA.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEjF,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,uBAAuB,CAAC;IAC/F,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAYD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,GAAE,OAAO,CAAC,QAAQ,CAAM,GAAG,SAAS,CAgBzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAK9E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GACnC,SAAS,CA6BX;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAgB1D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CA8BrE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAsBlF;AAED;;;GAGG;AACH,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CA6B/E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,GAAG;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAqB7F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAE9D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CAiCzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAapD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CA+BhD"}
|