@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
@@ -8,11 +8,19 @@
8
8
  */
9
9
  import fs from 'fs';
10
10
  import path from 'path';
11
+ import { projectVibePath } from '../utils.js';
11
12
 
12
13
  const HEADER = '# Loop Inbox\n\n> 루프가 남긴 사람 리뷰 큐. 최신 항목이 위에 온다.\n';
13
14
 
14
- function inboxPath(projectDir) {
15
- return path.join(projectDir, '.vibe', 'loops', 'inbox.md');
15
+ /**
16
+ * 인박스 경로 — 이 모듈이 소유한다.
17
+ *
18
+ * 쓰기는 항상 `.vibe/` 로 한다(신규 레이아웃). 읽기는 레거시(`.claude/vibe/`)도
19
+ * 봐야 하므로 `projectVibePath` 를 쓴다 — 두 쪽이 다른 파일을 보면 기록은 되는데
20
+ * ANCHOR 는 못 읽는 상태가 된다.
21
+ */
22
+ export function inboxPath(projectDir) {
23
+ return projectVibePath(projectDir, 'loops', 'inbox.md');
16
24
  }
17
25
 
18
26
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@su-record/vibe",
3
- "version": "3.2.19",
3
+ "version": "3.2.21",
4
4
  "description": "AI Coding Framework for Claude Code — 7+ agents, 52 skills, multi-LLM orchestration",
5
5
  "type": "module",
6
6
  "main": "dist/cli/index.js",
@@ -1,60 +0,0 @@
1
- /**
2
- * DeepInit - Hierarchical AGENTS.md Generation
3
- * Creates AI-readable documentation hierarchy with parent references
4
- */
5
- export interface DirectoryInfo {
6
- path: string;
7
- name: string;
8
- depth: number;
9
- parent?: string;
10
- children: string[];
11
- files: FileInfo[];
12
- purpose?: string;
13
- }
14
- export interface FileInfo {
15
- name: string;
16
- path: string;
17
- extension: string;
18
- size?: number;
19
- isEntry?: boolean;
20
- description?: string;
21
- }
22
- export interface AgentsMdContent {
23
- header: string;
24
- parentRef?: string;
25
- purpose: string;
26
- structure: string;
27
- keyFiles: string;
28
- conventions: string;
29
- dependencies: string;
30
- notes: string;
31
- }
32
- /**
33
- * Detect directory purpose from name
34
- */
35
- export declare function detectDirectoryPurpose(dirName: string): string;
36
- /**
37
- * Check if file is an entry point
38
- */
39
- export declare function isEntryPoint(fileName: string): boolean;
40
- /**
41
- * Generate AGENTS.md content for a directory
42
- */
43
- export declare function generateAgentsMd(dir: DirectoryInfo): AgentsMdContent;
44
- /**
45
- * Format full AGENTS.md content
46
- */
47
- export declare function formatAgentsMd(content: AgentsMdContent): string;
48
- /**
49
- * Preserve manual notes from existing AGENTS.md
50
- */
51
- export declare function preserveManualNotes(existing: string, newContent: string): string;
52
- /**
53
- * Generate navigation header
54
- */
55
- export declare function generateNavigationHeader(dir: DirectoryInfo, rootPath: string): string;
56
- /**
57
- * Describe DeepInit workflow
58
- */
59
- export declare function describeDeepInitWorkflow(): string;
60
- //# sourceMappingURL=DeepInit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeepInit.d.ts","sourceRoot":"","sources":["../../../src/infra/lib/DeepInit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AA6CD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,eAAe,CAoFpE;AAsCD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAe/D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAahF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAarF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CA0BjD"}
@@ -1,245 +0,0 @@
1
- /**
2
- * DeepInit - Hierarchical AGENTS.md Generation
3
- * Creates AI-readable documentation hierarchy with parent references
4
- */
5
- import path from 'path';
6
- // Common directory purposes
7
- const DIRECTORY_PURPOSES = {
8
- src: 'Source code directory',
9
- lib: 'Library/utility code',
10
- utils: 'Utility functions',
11
- helpers: 'Helper functions',
12
- components: 'UI components',
13
- pages: 'Page components/routes',
14
- hooks: 'React/custom hooks',
15
- services: 'Business logic services',
16
- api: 'API endpoints/clients',
17
- models: 'Data models/schemas',
18
- types: 'TypeScript type definitions',
19
- interfaces: 'Interface definitions',
20
- controllers: 'Request controllers',
21
- routes: 'Route definitions',
22
- middleware: 'Middleware functions',
23
- config: 'Configuration files',
24
- constants: 'Constant values',
25
- assets: 'Static assets',
26
- styles: 'CSS/styling files',
27
- tests: 'Test files',
28
- __tests__: 'Jest test directory',
29
- spec: 'Test specifications',
30
- fixtures: 'Test fixtures/data',
31
- mocks: 'Mock implementations',
32
- scripts: 'Build/utility scripts',
33
- tools: 'Development tools',
34
- docs: 'Documentation',
35
- dist: 'Build output',
36
- build: 'Build output',
37
- node_modules: 'Dependencies (skip)',
38
- '.git': 'Git directory (skip)',
39
- };
40
- // File patterns to identify entry points
41
- const ENTRY_PATTERNS = [
42
- /^index\.(ts|js|tsx|jsx)$/,
43
- /^main\.(ts|js|tsx|jsx)$/,
44
- /^app\.(ts|js|tsx|jsx)$/,
45
- /^server\.(ts|js|tsx|jsx)$/,
46
- ];
47
- /**
48
- * Detect directory purpose from name
49
- */
50
- export function detectDirectoryPurpose(dirName) {
51
- const lower = dirName.toLowerCase();
52
- return DIRECTORY_PURPOSES[lower] || DIRECTORY_PURPOSES[dirName] || 'Project directory';
53
- }
54
- /**
55
- * Check if file is an entry point
56
- */
57
- export function isEntryPoint(fileName) {
58
- return ENTRY_PATTERNS.some(pattern => pattern.test(fileName));
59
- }
60
- /**
61
- * Generate AGENTS.md content for a directory
62
- */
63
- export function generateAgentsMd(dir) {
64
- const header = `# AGENTS.md - ${dir.name}`;
65
- // Parent reference
66
- const parentRef = dir.parent
67
- ? `<!-- Parent: ${path.relative(dir.path, dir.parent)}/AGENTS.md -->`
68
- : undefined;
69
- // Purpose
70
- const purpose = `## Purpose\n\n${dir.purpose || detectDirectoryPurpose(dir.name)}`;
71
- // Structure
72
- const structureLines = ['## Structure\n', '```'];
73
- structureLines.push(`${dir.name}/`);
74
- for (const child of dir.children) {
75
- structureLines.push(`├── ${child}/`);
76
- }
77
- for (const file of dir.files) {
78
- const marker = isEntryPoint(file.name) ? ' ← entry' : '';
79
- structureLines.push(`├── ${file.name}${marker}`);
80
- }
81
- structureLines.push('```');
82
- const structure = structureLines.join('\n');
83
- // Key files
84
- const keyFilesLines = ['## Key Files\n'];
85
- const entryFiles = dir.files.filter(f => isEntryPoint(f.name));
86
- if (entryFiles.length > 0) {
87
- keyFilesLines.push('### Entry Points');
88
- for (const file of entryFiles) {
89
- keyFilesLines.push(`- \`${file.name}\`: ${file.description || 'Main entry point'}`);
90
- }
91
- keyFilesLines.push('');
92
- }
93
- // Group by extension
94
- const byExtension = new Map();
95
- for (const file of dir.files) {
96
- const ext = file.extension || 'other';
97
- if (!byExtension.has(ext))
98
- byExtension.set(ext, []);
99
- byExtension.get(ext).push(file);
100
- }
101
- for (const [ext, files] of byExtension) {
102
- if (files.length > 5) {
103
- keyFilesLines.push(`- \`*.${ext}\`: ${files.length} files`);
104
- }
105
- else {
106
- for (const file of files) {
107
- if (!isEntryPoint(file.name)) {
108
- keyFilesLines.push(`- \`${file.name}\``);
109
- }
110
- }
111
- }
112
- }
113
- const keyFiles = keyFilesLines.join('\n');
114
- // Conventions (auto-detected)
115
- const conventions = generateConventions(dir);
116
- // Dependencies (child directories)
117
- const dependenciesLines = ['## Dependencies\n'];
118
- if (dir.children.length > 0) {
119
- dependenciesLines.push('### Child Modules');
120
- for (const child of dir.children) {
121
- dependenciesLines.push(`- [\`${child}/\`](./${child}/AGENTS.md)`);
122
- }
123
- }
124
- else {
125
- dependenciesLines.push('No child modules.');
126
- }
127
- const dependencies = dependenciesLines.join('\n');
128
- // Notes placeholder
129
- const notes = '## Notes\n\n<!-- Add manual notes here. They will be preserved on regeneration. -->';
130
- return {
131
- header,
132
- parentRef,
133
- purpose,
134
- structure,
135
- keyFiles,
136
- conventions,
137
- dependencies,
138
- notes,
139
- };
140
- }
141
- /**
142
- * Generate conventions based on file patterns
143
- */
144
- function generateConventions(dir) {
145
- const lines = ['## Conventions\n'];
146
- // Detect naming conventions
147
- const hasKebab = dir.files.some(f => f.name.includes('-'));
148
- const hasCamel = dir.files.some(f => /[a-z][A-Z]/.test(f.name));
149
- const hasPascal = dir.files.some(f => /^[A-Z]/.test(f.name));
150
- if (hasPascal)
151
- lines.push('- **Naming**: PascalCase for components/classes');
152
- if (hasCamel)
153
- lines.push('- **Naming**: camelCase for utilities/functions');
154
- if (hasKebab)
155
- lines.push('- **Naming**: kebab-case for files');
156
- // Detect test patterns
157
- const hasTestFiles = dir.files.some(f => f.name.includes('.test.') || f.name.includes('.spec.'));
158
- if (hasTestFiles) {
159
- lines.push('- **Testing**: Co-located test files (*.test.ts, *.spec.ts)');
160
- }
161
- // Detect TypeScript
162
- const hasTs = dir.files.some(f => f.extension === 'ts' || f.extension === 'tsx');
163
- if (hasTs) {
164
- lines.push('- **Language**: TypeScript');
165
- }
166
- if (lines.length === 1) {
167
- lines.push('No specific conventions detected.');
168
- }
169
- return lines.join('\n');
170
- }
171
- /**
172
- * Format full AGENTS.md content
173
- */
174
- export function formatAgentsMd(content) {
175
- const sections = [content.header];
176
- if (content.parentRef) {
177
- sections.push('', content.parentRef);
178
- }
179
- sections.push('', content.purpose);
180
- sections.push('', content.structure);
181
- sections.push('', content.keyFiles);
182
- sections.push('', content.conventions);
183
- sections.push('', content.dependencies);
184
- sections.push('', content.notes);
185
- return sections.join('\n');
186
- }
187
- /**
188
- * Preserve manual notes from existing AGENTS.md
189
- */
190
- export function preserveManualNotes(existing, newContent) {
191
- // Extract notes section from existing
192
- const notesMatch = existing.match(/## Notes\n\n([\s\S]*?)(?=\n## |$)/);
193
- if (!notesMatch || notesMatch[1].trim() === '<!-- Add manual notes here. They will be preserved on regeneration. -->') {
194
- return newContent;
195
- }
196
- // Replace notes section in new content
197
- const preservedNotes = notesMatch[1].trim();
198
- return newContent.replace(/## Notes\n\n<!-- Add manual notes here\. They will be preserved on regeneration\. -->/, `## Notes\n\n${preservedNotes}`);
199
- }
200
- /**
201
- * Generate navigation header
202
- */
203
- export function generateNavigationHeader(dir, rootPath) {
204
- const parts = dir.path.replace(rootPath, '').split(path.sep).filter(Boolean);
205
- const breadcrumbs = parts.map((part, i) => {
206
- const depth = parts.length - i;
207
- const prefix = '../'.repeat(depth);
208
- return `[${part}](${prefix}AGENTS.md)`;
209
- });
210
- if (breadcrumbs.length === 0) {
211
- return '📍 Root';
212
- }
213
- return `📍 ${breadcrumbs.join(' / ')}`;
214
- }
215
- /**
216
- * Describe DeepInit workflow
217
- */
218
- export function describeDeepInitWorkflow() {
219
- return `
220
- ## DeepInit Workflow
221
-
222
- Hierarchical AI-readable documentation generation:
223
-
224
- \`\`\`
225
- project/
226
- ├── AGENTS.md ← Root documentation
227
- ├── src/
228
- │ ├── AGENTS.md ← <!-- Parent: ../AGENTS.md -->
229
- │ ├── components/
230
- │ │ └── AGENTS.md ← <!-- Parent: ../AGENTS.md -->
231
- │ └── services/
232
- │ └── AGENTS.md ← <!-- Parent: ../AGENTS.md -->
233
- └── tests/
234
- └── AGENTS.md ← <!-- Parent: ../AGENTS.md -->
235
- \`\`\`
236
-
237
- Features:
238
- - Parent references for navigation
239
- - Auto-detected purpose and conventions
240
- - Preserved manual notes on regeneration
241
- - Entry point identification
242
- - Child module linking
243
- `.trim();
244
- }
245
- //# sourceMappingURL=DeepInit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeepInit.js","sourceRoot":"","sources":["../../../src/infra/lib/DeepInit.ts"],"names":[],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- /**
2
- * Framework Detector - Automatically detect project framework from package.json
3
- * Inspired by Vercel's deploy script
4
- */
5
- export interface FrameworkInfo {
6
- id: string;
7
- name: string;
8
- category: 'frontend' | 'backend' | 'fullstack' | 'static' | 'docs';
9
- runtime?: 'node' | 'bun' | 'deno' | 'browser';
10
- features?: string[];
11
- }
12
- export declare const FRAMEWORKS: Record<string, FrameworkInfo>;
13
- export interface PackageJson {
14
- name?: string;
15
- version?: string;
16
- dependencies?: Record<string, string>;
17
- devDependencies?: Record<string, string>;
18
- scripts?: Record<string, string>;
19
- }
20
- export interface DetectionResult {
21
- framework: FrameworkInfo | null;
22
- confidence: 'high' | 'medium' | 'low';
23
- matchedDep?: string;
24
- allDetected: string[];
25
- packageJson?: PackageJson;
26
- projectType: 'monorepo' | 'single' | 'static' | 'unknown';
27
- }
28
- /**
29
- * Detect framework from package.json
30
- */
31
- export declare function detectFramework(projectPath: string): Promise<DetectionResult>;
32
- /**
33
- * Detect framework from string content (for analysis without file access)
34
- */
35
- export declare function detectFrameworkFromContent(content: string): DetectionResult;
36
- /**
37
- * Get recommended rules/agents based on framework
38
- */
39
- export declare function getFrameworkRecommendations(framework: FrameworkInfo): {
40
- reviewers: string[];
41
- rules: string[];
42
- features: string[];
43
- };
44
- /**
45
- * Format detection result for display
46
- */
47
- export declare function formatDetectionResult(result: DetectionResult): string;
48
- /**
49
- * Quick check if project uses a specific framework
50
- */
51
- export declare function isFramework(projectPath: string, frameworkId: string): Promise<boolean>;
52
- /**
53
- * Get all supported frameworks grouped by category
54
- */
55
- export declare function getSupportedFrameworks(): Record<string, FrameworkInfo[]>;
56
- //# sourceMappingURL=FrameworkDetector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FrameworkDetector.d.ts","sourceRoot":"","sources":["../../../src/infra/lib/FrameworkDetector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAGD,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAoDpD,CAAC;AA6DF,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,aAAa,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC3D;AAoDD;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAmCnF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAmB3E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,aAAa,GAAG;IACrE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAoCA;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAyBrE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG5F;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAcxE"}