@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.
Files changed (49) hide show
  1. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
  2. package/dist/cli/setup/ProjectSetup.js +13 -1
  3. package/dist/cli/setup/ProjectSetup.js.map +1 -1
  4. package/dist/tools/dispatch/deterministicSignals.d.ts.map +1 -1
  5. package/dist/tools/dispatch/deterministicSignals.js +15 -10
  6. package/dist/tools/dispatch/deterministicSignals.js.map +1 -1
  7. package/dist/tools/dispatch/vibePaths.d.ts +7 -0
  8. package/dist/tools/dispatch/vibePaths.d.ts.map +1 -0
  9. package/dist/tools/dispatch/vibePaths.js +35 -0
  10. package/dist/tools/dispatch/vibePaths.js.map +1 -0
  11. package/dist/tools/spec/validateSpecDocument.d.ts.map +1 -1
  12. package/dist/tools/spec/validateSpecDocument.js +33 -6
  13. package/dist/tools/spec/validateSpecDocument.js.map +1 -1
  14. package/hooks/scripts/code-check.js +90 -16
  15. package/hooks/scripts/lib/anchor.js +15 -4
  16. package/hooks/scripts/lib/inbox.js +10 -2
  17. package/package.json +1 -1
  18. package/dist/infra/lib/DeepInit.d.ts +0 -60
  19. package/dist/infra/lib/DeepInit.d.ts.map +0 -1
  20. package/dist/infra/lib/DeepInit.js +0 -245
  21. package/dist/infra/lib/DeepInit.js.map +0 -1
  22. package/dist/infra/lib/FrameworkDetector.d.ts +0 -56
  23. package/dist/infra/lib/FrameworkDetector.d.ts.map +0 -1
  24. package/dist/infra/lib/FrameworkDetector.js +0 -287
  25. package/dist/infra/lib/FrameworkDetector.js.map +0 -1
  26. package/dist/infra/lib/ModelRouter.d.ts +0 -48
  27. package/dist/infra/lib/ModelRouter.d.ts.map +0 -1
  28. package/dist/infra/lib/ModelRouter.js +0 -216
  29. package/dist/infra/lib/ModelRouter.js.map +0 -1
  30. package/dist/infra/lib/ReviewRace.d.ts +0 -86
  31. package/dist/infra/lib/ReviewRace.d.ts.map +0 -1
  32. package/dist/infra/lib/ReviewRace.js +0 -454
  33. package/dist/infra/lib/ReviewRace.js.map +0 -1
  34. package/dist/infra/lib/RuleBuildSystem.d.ts +0 -157
  35. package/dist/infra/lib/RuleBuildSystem.d.ts.map +0 -1
  36. package/dist/infra/lib/RuleBuildSystem.js +0 -550
  37. package/dist/infra/lib/RuleBuildSystem.js.map +0 -1
  38. package/dist/infra/lib/SkillQualityGate.d.ts +0 -42
  39. package/dist/infra/lib/SkillQualityGate.d.ts.map +0 -1
  40. package/dist/infra/lib/SkillQualityGate.js +0 -220
  41. package/dist/infra/lib/SkillQualityGate.js.map +0 -1
  42. package/dist/infra/lib/SkillRepository.d.ts +0 -134
  43. package/dist/infra/lib/SkillRepository.d.ts.map +0 -1
  44. package/dist/infra/lib/SkillRepository.js +0 -500
  45. package/dist/infra/lib/SkillRepository.js.map +0 -1
  46. package/dist/infra/lib/UltraQA.d.ts +0 -89
  47. package/dist/infra/lib/UltraQA.d.ts.map +0 -1
  48. package/dist/infra/lib/UltraQA.js +0 -301
  49. 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"}