@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,220 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Skill Quality Gate
|
|
3
|
-
* 저장할 메모리/스킬의 품질을 검증
|
|
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
|
-
// 거부할 패턴 (너무 일반적이거나 쉽게 검색 가능한 정보)
|
|
10
|
-
const REJECT_PATTERNS = [
|
|
11
|
-
// 일반적인 정보
|
|
12
|
-
/^(how to|what is|definition of)/i,
|
|
13
|
-
/^(npm install|pip install|cargo add)/i,
|
|
14
|
-
/^(import|from .* import|require\()/i,
|
|
15
|
-
// 단순 명령어
|
|
16
|
-
/^(git (add|commit|push|pull|merge|checkout))/i,
|
|
17
|
-
/^(docker (run|build|pull|push))/i,
|
|
18
|
-
/^(kubectl (get|apply|delete))/i,
|
|
19
|
-
// 너무 짧은 내용
|
|
20
|
-
/^.{0,20}$/,
|
|
21
|
-
// 일반적인 best practice (검색 가능)
|
|
22
|
-
/^(always use|never use|prefer|avoid)/i,
|
|
23
|
-
/^(use (async|await|promises))/i,
|
|
24
|
-
/^(handle (errors?|exceptions?))/i,
|
|
25
|
-
];
|
|
26
|
-
// 가치 있는 패턴 (원칙, 발견, 결정)
|
|
27
|
-
const VALUE_PATTERNS = [
|
|
28
|
-
// 프로젝트 특정 결정
|
|
29
|
-
{ pattern: /we (decided|chose|agreed|concluded)/i, category: 'decision', score: 20 },
|
|
30
|
-
{ pattern: /after (debugging|investigating|researching)/i, category: 'discovery', score: 25 },
|
|
31
|
-
{ pattern: /the root cause (is|was)/i, category: 'discovery', score: 30 },
|
|
32
|
-
// 원칙/휴리스틱
|
|
33
|
-
{ pattern: /when .* then .* because/i, category: 'principle', score: 25 },
|
|
34
|
-
{ pattern: /if .* fails?, (check|try|verify)/i, category: 'principle', score: 20 },
|
|
35
|
-
{ pattern: /the trick (is|was) to/i, category: 'discovery', score: 25 },
|
|
36
|
-
// 구체적인 파일/라인 참조
|
|
37
|
-
{ pattern: /in (file|path|line) [`"]?[\w/.:-]+[`"]?/i, category: 'code', score: 15 },
|
|
38
|
-
{ pattern: /at line \d+/i, category: 'code', score: 10 },
|
|
39
|
-
{ pattern: /error: .{20,}/i, category: 'discovery', score: 15 },
|
|
40
|
-
// 아키텍처/설계 결정
|
|
41
|
-
{ pattern: /architecture|design pattern|trade-?off/i, category: 'decision', score: 20 },
|
|
42
|
-
{ pattern: /because (performance|security|maintainability)/i, category: 'decision', score: 20 },
|
|
43
|
-
];
|
|
44
|
-
// 필수 요소 체크
|
|
45
|
-
const REQUIRED_ELEMENTS = [
|
|
46
|
-
{ name: 'context', pattern: /\b(when|if|because|since|after)\b/i, weight: 10 },
|
|
47
|
-
{ name: 'specificity', pattern: /\b(this|our|my|the)\s+(project|codebase|repo|app)/i, weight: 15 },
|
|
48
|
-
{ name: 'actionable', pattern: /\b(should|must|need to|have to|try|use|avoid)\b/i, weight: 10 },
|
|
49
|
-
];
|
|
50
|
-
/**
|
|
51
|
-
* 메모리/스킬 품질 검증
|
|
52
|
-
*/
|
|
53
|
-
export function validateSkillQuality(key, value, category) {
|
|
54
|
-
const issues = [];
|
|
55
|
-
const suggestions = [];
|
|
56
|
-
let score = 50; // 기본 점수
|
|
57
|
-
let detectedCategory = 'generic';
|
|
58
|
-
// 1. 거부 패턴 체크
|
|
59
|
-
for (const pattern of REJECT_PATTERNS) {
|
|
60
|
-
if (pattern.test(value)) {
|
|
61
|
-
issues.push(`Too generic or easily searchable: matches pattern ${pattern}`);
|
|
62
|
-
score -= 30;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
// 2. 최소 길이 체크
|
|
66
|
-
if (value.length < 50) {
|
|
67
|
-
issues.push('Content too short (min 50 chars)');
|
|
68
|
-
score -= 20;
|
|
69
|
-
suggestions.push('Add more context: why, when, what was the situation?');
|
|
70
|
-
}
|
|
71
|
-
// 3. 가치 패턴 체크
|
|
72
|
-
for (const { pattern, category: cat, score: bonus } of VALUE_PATTERNS) {
|
|
73
|
-
if (pattern.test(value)) {
|
|
74
|
-
score += bonus;
|
|
75
|
-
detectedCategory = cat;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
// 4. 필수 요소 체크
|
|
79
|
-
let hasRequiredElements = 0;
|
|
80
|
-
for (const { name, pattern, weight } of REQUIRED_ELEMENTS) {
|
|
81
|
-
if (pattern.test(value)) {
|
|
82
|
-
score += weight;
|
|
83
|
-
hasRequiredElements++;
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
suggestions.push(`Consider adding ${name} (${pattern.source})`);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
if (hasRequiredElements < 2) {
|
|
90
|
-
issues.push('Missing essential elements (context, specificity, or actionability)');
|
|
91
|
-
score -= 15;
|
|
92
|
-
}
|
|
93
|
-
// 5. 구체적인 참조 체크 (파일 경로, 라인 번호, 에러 메시지)
|
|
94
|
-
const hasFilePath = /[`"]?[\w/.-]+\.(ts|js|py|go|rs|java|tsx|jsx)[`"]?/i.test(value);
|
|
95
|
-
const hasLineNumber = /line\s*\d+|:\d+:/i.test(value);
|
|
96
|
-
const hasErrorMessage = /error:|exception:|failed:/i.test(value);
|
|
97
|
-
if (hasFilePath)
|
|
98
|
-
score += 10;
|
|
99
|
-
if (hasLineNumber)
|
|
100
|
-
score += 10;
|
|
101
|
-
if (hasErrorMessage)
|
|
102
|
-
score += 10;
|
|
103
|
-
if (!hasFilePath && !hasLineNumber && !hasErrorMessage) {
|
|
104
|
-
suggestions.push('Add specific references: file paths, line numbers, or error messages');
|
|
105
|
-
}
|
|
106
|
-
// 6. 원칙 형태 체크 ("when X, do Y because Z")
|
|
107
|
-
const isPrincipleForm = /when.*,.*because|if.*then.*because/i.test(value);
|
|
108
|
-
if (isPrincipleForm) {
|
|
109
|
-
score += 20;
|
|
110
|
-
detectedCategory = 'principle';
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
suggestions.push('Consider reformulating as a principle: "When [situation], [action] because [reason]"');
|
|
114
|
-
}
|
|
115
|
-
// 7. 키 품질 체크
|
|
116
|
-
if (key.length < 5) {
|
|
117
|
-
issues.push('Key too short');
|
|
118
|
-
score -= 10;
|
|
119
|
-
}
|
|
120
|
-
if (!/^[a-z0-9-]+$/i.test(key.replace(/\s+/g, '-'))) {
|
|
121
|
-
suggestions.push('Use kebab-case for key (e.g., "auth-token-refresh-strategy")');
|
|
122
|
-
}
|
|
123
|
-
// 점수 정규화 (0-100)
|
|
124
|
-
score = Math.max(0, Math.min(100, score));
|
|
125
|
-
// 임계값: 60점 이상이면 통과
|
|
126
|
-
const isValid = score >= 60 && issues.length === 0;
|
|
127
|
-
return {
|
|
128
|
-
isValid,
|
|
129
|
-
score,
|
|
130
|
-
issues,
|
|
131
|
-
suggestions,
|
|
132
|
-
category: detectedCategory,
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* 원칙 형태로 변환 도우미
|
|
137
|
-
*/
|
|
138
|
-
export function suggestPrincipleFormat(value) {
|
|
139
|
-
// 이미 원칙 형태면 그대로 반환
|
|
140
|
-
if (/when.*because|if.*then.*because/i.test(value)) {
|
|
141
|
-
return value;
|
|
142
|
-
}
|
|
143
|
-
// 변환 템플릿 제안
|
|
144
|
-
return `Consider reformulating as:
|
|
145
|
-
|
|
146
|
-
"When [describe the situation/trigger],
|
|
147
|
-
[describe the action to take]
|
|
148
|
-
because [explain the reasoning/tradeoff]"
|
|
149
|
-
|
|
150
|
-
Example:
|
|
151
|
-
"When the auth token expires during a request,
|
|
152
|
-
retry the request after refreshing the token (not before)
|
|
153
|
-
because refreshing preemptively causes race conditions with concurrent requests"`;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* 스킬 분류
|
|
157
|
-
*/
|
|
158
|
-
export function classifySkill(value) {
|
|
159
|
-
const scores = {
|
|
160
|
-
principle: 0,
|
|
161
|
-
discovery: 0,
|
|
162
|
-
decision: 0,
|
|
163
|
-
reference: 0,
|
|
164
|
-
generic: 20, // 기본
|
|
165
|
-
};
|
|
166
|
-
// 원칙
|
|
167
|
-
if (/when.*then|if.*should|always.*because|never.*because/i.test(value)) {
|
|
168
|
-
scores.principle += 30;
|
|
169
|
-
}
|
|
170
|
-
// 발견
|
|
171
|
-
if (/found|discovered|realized|root cause|after debugging/i.test(value)) {
|
|
172
|
-
scores.discovery += 30;
|
|
173
|
-
}
|
|
174
|
-
// 결정
|
|
175
|
-
if (/decided|chose|agreed|will use|architecture|design/i.test(value)) {
|
|
176
|
-
scores.decision += 30;
|
|
177
|
-
}
|
|
178
|
-
// 참조 (파일/코드 중심)
|
|
179
|
-
if (/\.(ts|js|py|go)\b.*:\d+|file:|path:/i.test(value)) {
|
|
180
|
-
scores.reference += 30;
|
|
181
|
-
}
|
|
182
|
-
// 최고 점수 타입 선택
|
|
183
|
-
const entries = Object.entries(scores);
|
|
184
|
-
entries.sort((a, b) => b[1] - a[1]);
|
|
185
|
-
const [type, score] = entries[0];
|
|
186
|
-
const total = Object.values(scores).reduce((a, b) => a + b, 0);
|
|
187
|
-
const confidence = Math.round((score / total) * 100);
|
|
188
|
-
return { type, confidence };
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* 저장 전 검증 래퍼
|
|
192
|
-
*/
|
|
193
|
-
export function validateBeforeSave(key, value, options) {
|
|
194
|
-
if (options?.bypassValidation) {
|
|
195
|
-
return {
|
|
196
|
-
canSave: true,
|
|
197
|
-
result: { isValid: true, score: 100, issues: [], suggestions: [], category: 'generic' },
|
|
198
|
-
formattedFeedback: '⚠️ Validation bypassed',
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
const result = validateSkillQuality(key, value);
|
|
202
|
-
const minScore = options?.minScore ?? 60;
|
|
203
|
-
const canSave = result.score >= minScore && result.issues.length === 0;
|
|
204
|
-
let feedback = '';
|
|
205
|
-
if (canSave) {
|
|
206
|
-
feedback = `✅ Quality check passed (score: ${result.score}/100, category: ${result.category})`;
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
209
|
-
feedback = `❌ Quality check failed (score: ${result.score}/100)\n`;
|
|
210
|
-
if (result.issues.length > 0) {
|
|
211
|
-
feedback += `\nIssues:\n${result.issues.map(i => ` - ${i}`).join('\n')}`;
|
|
212
|
-
}
|
|
213
|
-
if (result.suggestions.length > 0) {
|
|
214
|
-
feedback += `\n\nSuggestions:\n${result.suggestions.map(s => ` - ${s}`).join('\n')}`;
|
|
215
|
-
}
|
|
216
|
-
feedback += `\n\n${suggestPrincipleFormat(value)}`;
|
|
217
|
-
}
|
|
218
|
-
return { canSave, result, formattedFeedback: feedback };
|
|
219
|
-
}
|
|
220
|
-
//# sourceMappingURL=SkillQualityGate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SkillQualityGate.js","sourceRoot":"","sources":["../../../src/infra/lib/SkillQualityGate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Skill Repository - ~/.claude/vibe/skills/ 저장소 관리
|
|
3
|
-
*
|
|
4
|
-
* 기본 스킬 세트를 전역 위치에 설치하고 관리
|
|
5
|
-
*/
|
|
6
|
-
import { SkillMetadata, SkillTier } from './SkillFrontmatter.js';
|
|
7
|
-
export interface SkillInfo {
|
|
8
|
-
id: string;
|
|
9
|
-
name: string;
|
|
10
|
-
description: string;
|
|
11
|
-
path: string;
|
|
12
|
-
source: 'user' | 'default';
|
|
13
|
-
metadata?: SkillMetadata;
|
|
14
|
-
}
|
|
15
|
-
export interface SkillRepositoryConfig {
|
|
16
|
-
userSkillsDir?: string;
|
|
17
|
-
bundledSkillsDir?: string;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* 기본 전역 스킬 디렉토리 경로
|
|
21
|
-
*/
|
|
22
|
-
export declare function getGlobalSkillsDir(): string;
|
|
23
|
-
/**
|
|
24
|
-
* 번들된 기본 스킬 디렉토리 (패키지 내부)
|
|
25
|
-
*/
|
|
26
|
-
export declare function getBundledSkillsDir(): string;
|
|
27
|
-
/**
|
|
28
|
-
* Skill Repository 클래스
|
|
29
|
-
*/
|
|
30
|
-
export declare class SkillRepository {
|
|
31
|
-
private userSkillsDir;
|
|
32
|
-
private bundledSkillsDir;
|
|
33
|
-
constructor(config?: SkillRepositoryConfig);
|
|
34
|
-
/**
|
|
35
|
-
* 스킬 디렉토리 초기화
|
|
36
|
-
*/
|
|
37
|
-
ensureSkillsDir(): void;
|
|
38
|
-
/**
|
|
39
|
-
* 기본 스킬 세트 시딩 (없는 것만 복사)
|
|
40
|
-
*/
|
|
41
|
-
seedDefaultSkills(): {
|
|
42
|
-
seeded: string[];
|
|
43
|
-
skipped: string[];
|
|
44
|
-
errors: string[];
|
|
45
|
-
};
|
|
46
|
-
/**
|
|
47
|
-
* 모든 스킬 목록 조회 (user + bundled fallback)
|
|
48
|
-
*/
|
|
49
|
-
listSkills(): SkillInfo[];
|
|
50
|
-
/**
|
|
51
|
-
* 디렉토리에서 스킬 로드
|
|
52
|
-
*/
|
|
53
|
-
private loadSkillsFromDir;
|
|
54
|
-
/**
|
|
55
|
-
* 콘텐츠에서 설명 추출 (frontmatter 없는 경우)
|
|
56
|
-
*/
|
|
57
|
-
private extractDescription;
|
|
58
|
-
/**
|
|
59
|
-
* ID로 스킬 조회
|
|
60
|
-
*/
|
|
61
|
-
getSkill(id: string): SkillInfo | null;
|
|
62
|
-
/**
|
|
63
|
-
* 스킬 파일 찾기
|
|
64
|
-
*/
|
|
65
|
-
private findSkillFile;
|
|
66
|
-
/**
|
|
67
|
-
* 스킬 정보 로드
|
|
68
|
-
*/
|
|
69
|
-
private loadSkillInfo;
|
|
70
|
-
/**
|
|
71
|
-
* 스킬 콘텐츠 읽기
|
|
72
|
-
*/
|
|
73
|
-
getSkillContent(id: string): string | null;
|
|
74
|
-
/**
|
|
75
|
-
* 유저 스킬 저장
|
|
76
|
-
*/
|
|
77
|
-
saveSkill(id: string, content: string): void;
|
|
78
|
-
/**
|
|
79
|
-
* 유저 스킬 삭제
|
|
80
|
-
*/
|
|
81
|
-
deleteSkill(id: string): boolean;
|
|
82
|
-
/**
|
|
83
|
-
* 티어 기반 스킬 필터링
|
|
84
|
-
*/
|
|
85
|
-
listSkillsByTier(tier: SkillTier): SkillInfo[];
|
|
86
|
-
/**
|
|
87
|
-
* core + standard 스킬만 반환 (optional 제외)
|
|
88
|
-
*/
|
|
89
|
-
listActiveSkills(): SkillInfo[];
|
|
90
|
-
/**
|
|
91
|
-
* 트리거 기반 스킬 검색
|
|
92
|
-
*/
|
|
93
|
-
findSkillsByTrigger(input: string): SkillInfo[];
|
|
94
|
-
/**
|
|
95
|
-
* 저장소 경로 정보
|
|
96
|
-
*/
|
|
97
|
-
getPaths(): {
|
|
98
|
-
userDir: string;
|
|
99
|
-
bundledDir: string;
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* 기본 스킬 세트 정의 (인라인)
|
|
104
|
-
* postinstall에서 skills/ 폴더가 없을 때 사용
|
|
105
|
-
*/
|
|
106
|
-
/**
|
|
107
|
-
* Generate DEFAULT_SKILLS with resolved core path URL.
|
|
108
|
-
* Accepts corePathUrl as parameter to avoid infra→cli layer violation.
|
|
109
|
-
*/
|
|
110
|
-
export declare function getDefaultSkills(corePathUrl: string): Array<{
|
|
111
|
-
id: string;
|
|
112
|
-
content: string;
|
|
113
|
-
}>;
|
|
114
|
-
/** @deprecated Use getDefaultSkills(corePathUrl) instead */
|
|
115
|
-
export declare const DEFAULT_SKILLS: Array<{
|
|
116
|
-
id: string;
|
|
117
|
-
content: string;
|
|
118
|
-
}>;
|
|
119
|
-
/**
|
|
120
|
-
* 인라인 기본 스킬 시딩 (번들 폴더가 없을 때)
|
|
121
|
-
*/
|
|
122
|
-
export declare function seedInlineDefaultSkills(targetDir: string): {
|
|
123
|
-
seeded: string[];
|
|
124
|
-
errors: string[];
|
|
125
|
-
};
|
|
126
|
-
/**
|
|
127
|
-
* 편의 함수: 기본 스킬 세트 설치
|
|
128
|
-
*/
|
|
129
|
-
export declare function ensureDefaultSkills(): {
|
|
130
|
-
seeded: string[];
|
|
131
|
-
skipped: string[];
|
|
132
|
-
errors: string[];
|
|
133
|
-
};
|
|
134
|
-
//# sourceMappingURL=SkillRepository.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SkillRepository.d.ts","sourceRoot":"","sources":["../../../src/infra/lib/SkillRepository.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAsC,aAAa,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKrG,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAQ5C;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAS;gBAErB,MAAM,GAAE,qBAA0B;IAK9C;;OAEG;IACH,eAAe,IAAI,IAAI;IAMvB;;OAEG;IACH,iBAAiB,IAAI;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IA+C9E;;OAEG;IACH,UAAU,IAAI,SAAS,EAAE;IAgBzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAgBtC;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAW1C;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAU5C;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAShC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE;IAM9C;;OAEG;IACH,gBAAgB,IAAI,SAAS,EAAE;IAO/B;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE;IAY/C;;OAEG;IACH,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;CAMpD;AAED;;;GAGG;AACH;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAkL5F;AAED,4DAA4D;AAC5D,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAwB,CAAC;AAE3F;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA4BjG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAG/F"}
|