agent-skills-cli 1.1.2 → 1.1.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 (74) hide show
  1. package/README.md +29 -10
  2. package/dist/cli/commands/bench.d.ts +7 -0
  3. package/dist/cli/commands/bench.d.ts.map +1 -0
  4. package/dist/cli/commands/bench.js +158 -0
  5. package/dist/cli/commands/bench.js.map +1 -0
  6. package/dist/cli/commands/compose.d.ts +7 -0
  7. package/dist/cli/commands/compose.d.ts.map +1 -0
  8. package/dist/cli/commands/compose.js +71 -0
  9. package/dist/cli/commands/compose.js.map +1 -0
  10. package/dist/cli/commands/context.d.ts +7 -0
  11. package/dist/cli/commands/context.d.ts.map +1 -0
  12. package/dist/cli/commands/context.js +119 -0
  13. package/dist/cli/commands/context.js.map +1 -0
  14. package/dist/cli/commands/diff.d.ts +7 -0
  15. package/dist/cli/commands/diff.d.ts.map +1 -0
  16. package/dist/cli/commands/diff.js +101 -0
  17. package/dist/cli/commands/diff.js.map +1 -0
  18. package/dist/cli/commands/frozen.d.ts +7 -0
  19. package/dist/cli/commands/frozen.d.ts.map +1 -0
  20. package/dist/cli/commands/frozen.js +133 -0
  21. package/dist/cli/commands/frozen.js.map +1 -0
  22. package/dist/cli/commands/install.d.ts.map +1 -1
  23. package/dist/cli/commands/install.js +60 -19
  24. package/dist/cli/commands/install.js.map +1 -1
  25. package/dist/cli/commands/sandbox.d.ts +7 -0
  26. package/dist/cli/commands/sandbox.d.ts.map +1 -0
  27. package/dist/cli/commands/sandbox.js +174 -0
  28. package/dist/cli/commands/sandbox.js.map +1 -0
  29. package/dist/cli/commands/split.d.ts +7 -0
  30. package/dist/cli/commands/split.d.ts.map +1 -0
  31. package/dist/cli/commands/split.js +80 -0
  32. package/dist/cli/commands/split.js.map +1 -0
  33. package/dist/cli/commands/test.d.ts +7 -0
  34. package/dist/cli/commands/test.d.ts.map +1 -0
  35. package/dist/cli/commands/test.js +121 -0
  36. package/dist/cli/commands/test.js.map +1 -0
  37. package/dist/cli/commands/utils-commands.d.ts.map +1 -1
  38. package/dist/cli/commands/utils-commands.js +72 -4
  39. package/dist/cli/commands/utils-commands.js.map +1 -1
  40. package/dist/cli/commands/watch.d.ts +7 -0
  41. package/dist/cli/commands/watch.d.ts.map +1 -0
  42. package/dist/cli/commands/watch.js +85 -0
  43. package/dist/cli/commands/watch.js.map +1 -0
  44. package/dist/cli/index.js +20 -0
  45. package/dist/cli/index.js.map +1 -1
  46. package/dist/core/composer.d.ts +41 -0
  47. package/dist/core/composer.d.ts.map +1 -0
  48. package/dist/core/composer.js +230 -0
  49. package/dist/core/composer.js.map +1 -0
  50. package/dist/core/conflict-detector.d.ts +55 -0
  51. package/dist/core/conflict-detector.d.ts.map +1 -0
  52. package/dist/core/conflict-detector.js +339 -0
  53. package/dist/core/conflict-detector.js.map +1 -0
  54. package/dist/core/context-budget.d.ts +63 -0
  55. package/dist/core/context-budget.d.ts.map +1 -0
  56. package/dist/core/context-budget.js +310 -0
  57. package/dist/core/context-budget.js.map +1 -0
  58. package/dist/core/differ.d.ts +42 -0
  59. package/dist/core/differ.d.ts.map +1 -0
  60. package/dist/core/differ.js +117 -0
  61. package/dist/core/differ.js.map +1 -0
  62. package/dist/core/index.d.ts +12 -0
  63. package/dist/core/index.d.ts.map +1 -1
  64. package/dist/core/index.js +12 -0
  65. package/dist/core/index.js.map +1 -1
  66. package/dist/core/skill-tester.d.ts +54 -0
  67. package/dist/core/skill-tester.d.ts.map +1 -0
  68. package/dist/core/skill-tester.js +201 -0
  69. package/dist/core/skill-tester.js.map +1 -0
  70. package/dist/core/splitter.d.ts +36 -0
  71. package/dist/core/splitter.d.ts.map +1 -0
  72. package/dist/core/splitter.js +186 -0
  73. package/dist/core/splitter.js.map +1 -0
  74. package/package.json +1 -1
@@ -0,0 +1,339 @@
1
+ /**
2
+ * Skill Conflict Detector Module
3
+ * Detects contradictory instructions and overlapping topics across installed skills.
4
+ *
5
+ * 3 detection strategies (no LLM required):
6
+ * 1. Keyword Contradiction — imperative statements that oppose each other
7
+ * 2. Topic Overlap — skills covering identical topics (token waste)
8
+ * 3. Rule Extraction — Do/Don't lists with conflicting directives
9
+ */
10
+ import { readFile } from 'fs/promises';
11
+ import { existsSync } from 'fs';
12
+ import { join, basename } from 'path';
13
+ import matter from 'gray-matter';
14
+ // ── Patterns ─────────────────────────────────────────────────────────────
15
+ /** Patterns for extracting imperative directives */
16
+ const DIRECTIVE_PATTERNS = [
17
+ { regex: /^\s*[-*]?\s*(?:always\s+)use\s+(.+)/i, verb: 'use' },
18
+ { regex: /^\s*[-*]?\s*always\s+(.+)/i, verb: 'always' },
19
+ { regex: /^\s*[-*]?\s*never\s+(.+)/i, verb: 'never' },
20
+ { regex: /^\s*[-*]?\s*avoid\s+(.+)/i, verb: 'avoid' },
21
+ { regex: /^\s*[-*]?\s*prefer\s+(.+)/i, verb: 'prefer' },
22
+ { regex: /^\s*[-*]?\s*(?:do\s+not|don'?t)\s+(.+)/i, verb: 'dont' },
23
+ { regex: /^\s*[-*]?\s*do\s+(.+)/i, verb: 'do' },
24
+ ];
25
+ /** Verbs that oppose each other */
26
+ const OPPOSING_VERBS = [
27
+ ['use', 'avoid'],
28
+ ['always', 'never'],
29
+ ['prefer', 'avoid'],
30
+ ['do', 'dont'],
31
+ ['use', 'dont'],
32
+ ['always', 'dont'],
33
+ ['use', 'never'],
34
+ ];
35
+ /** Code fence language regex */
36
+ const CODE_FENCE_RE = /```(\w+)/g;
37
+ /** Common stop words to ignore in topic matching */
38
+ const STOP_WORDS = new Set([
39
+ 'the', 'a', 'an', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for',
40
+ 'of', 'with', 'by', 'from', 'is', 'are', 'was', 'were', 'be', 'been',
41
+ 'being', 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would',
42
+ 'should', 'could', 'may', 'might', 'shall', 'can', 'need', 'must',
43
+ 'this', 'that', 'these', 'those', 'it', 'its', 'you', 'your', 'we',
44
+ 'our', 'they', 'their', 'when', 'where', 'how', 'what', 'which',
45
+ 'who', 'whom', 'if', 'then', 'else', 'not', 'no', 'as', 'so',
46
+ 'than', 'too', 'very', 'just', 'about', 'up', 'out', 'all', 'also',
47
+ 'each', 'every', 'any', 'some', 'such', 'only', 'own', 'same',
48
+ 'use', 'using', 'used', 'make', 'sure', 'file', 'code', 'skill',
49
+ ]);
50
+ // ── Main Entry ───────────────────────────────────────────────────────────
51
+ /**
52
+ * Detect conflicts and overlaps across a set of installed skills.
53
+ *
54
+ * @param skillPaths — array of absolute paths to skill directories
55
+ * (each should contain a SKILL.md)
56
+ */
57
+ export async function detectConflicts(skillPaths) {
58
+ // 1. Load all skills
59
+ const skills = [];
60
+ for (const p of skillPaths) {
61
+ const skill = await loadSkillContent(p);
62
+ if (skill)
63
+ skills.push(skill);
64
+ }
65
+ // 2. Run detection strategies
66
+ const conflicts = detectContradictions(skills);
67
+ const overlaps = detectOverlaps(skills);
68
+ // 3. Build summary
69
+ const critical = conflicts.filter(c => c.severity === 'critical').length;
70
+ const warnings = conflicts.filter(c => c.severity === 'warning').length;
71
+ const estimatedTokenWaste = overlaps.reduce((sum, o) => sum + o.tokenWaste, 0);
72
+ return {
73
+ conflicts,
74
+ overlaps,
75
+ summary: {
76
+ total: conflicts.length + overlaps.length,
77
+ critical,
78
+ warnings,
79
+ overlapCount: overlaps.length,
80
+ estimatedTokenWaste,
81
+ },
82
+ };
83
+ }
84
+ // ── Strategy 1: Keyword Contradiction ────────────────────────────────────
85
+ /**
86
+ * Extract directives from all skills, then cross-compare for contradictions.
87
+ */
88
+ function detectContradictions(skills) {
89
+ const conflicts = [];
90
+ for (let i = 0; i < skills.length; i++) {
91
+ for (let j = i + 1; j < skills.length; j++) {
92
+ const a = skills[i];
93
+ const b = skills[j];
94
+ for (const da of a.directives) {
95
+ for (const db of b.directives) {
96
+ const opposition = checkOpposition(da, db);
97
+ if (opposition) {
98
+ conflicts.push({
99
+ severity: opposition.confidence > 0.7 ? 'critical' : 'warning',
100
+ skillA: a.name,
101
+ skillB: b.name,
102
+ category: opposition.category,
103
+ description: opposition.description,
104
+ lineA: da.original,
105
+ lineB: db.original,
106
+ });
107
+ }
108
+ }
109
+ }
110
+ }
111
+ }
112
+ return conflicts;
113
+ }
114
+ /**
115
+ * Check if two directives oppose each other.
116
+ */
117
+ function checkOpposition(a, b) {
118
+ // Check if verbs are opposing
119
+ const isOpposing = OPPOSING_VERBS.some(([v1, v2]) => (a.verb === v1 && b.verb === v2) || (a.verb === v2 && b.verb === v1));
120
+ if (!isOpposing)
121
+ return null;
122
+ // Check if subjects are similar (normalized comparison)
123
+ const similarity = subjectSimilarity(a.subject, b.subject);
124
+ if (similarity < 0.4)
125
+ return null;
126
+ // Determine category from subject keywords
127
+ const category = categorizeSubject(a.subject + ' ' + b.subject);
128
+ return {
129
+ confidence: similarity,
130
+ category,
131
+ description: `"${a.verb} ${a.subject}" conflicts with "${b.verb} ${b.subject}"`,
132
+ };
133
+ }
134
+ /**
135
+ * Compute similarity between two subjects (0-1).
136
+ * Uses normalized word overlap (Jaccard-like).
137
+ */
138
+ function subjectSimilarity(a, b) {
139
+ const wordsA = extractWords(a);
140
+ const wordsB = extractWords(b);
141
+ if (wordsA.length === 0 || wordsB.length === 0)
142
+ return 0;
143
+ const setA = new Set(wordsA);
144
+ const setB = new Set(wordsB);
145
+ let intersection = 0;
146
+ for (const word of setA) {
147
+ if (setB.has(word))
148
+ intersection++;
149
+ }
150
+ const union = new Set([...setA, ...setB]).size;
151
+ return union === 0 ? 0 : intersection / union;
152
+ }
153
+ // ── Strategy 2: Topic Overlap ────────────────────────────────────────────
154
+ /**
155
+ * Detect skills that cover the same topic (duplicate instructions).
156
+ */
157
+ function detectOverlaps(skills) {
158
+ const overlaps = [];
159
+ const seen = new Set();
160
+ for (let i = 0; i < skills.length; i++) {
161
+ for (let j = i + 1; j < skills.length; j++) {
162
+ const a = skills[i];
163
+ const b = skills[j];
164
+ const key = [a.name, b.name].sort().join('::');
165
+ if (seen.has(key))
166
+ continue;
167
+ // Check heading overlap
168
+ const headingOverlap = arrayOverlap(a.topics.headings, b.topics.headings);
169
+ // Check keyword overlap
170
+ const keywordOverlap = arrayOverlap(a.topics.keywords, b.topics.keywords);
171
+ // Check language overlap
172
+ const langOverlap = arrayOverlap(a.topics.codeLanguages, b.topics.codeLanguages);
173
+ // Weighted score
174
+ const score = headingOverlap * 0.5 + keywordOverlap * 0.35 + langOverlap * 0.15;
175
+ if (score > 0.35) {
176
+ seen.add(key);
177
+ // Estimate token waste: smaller skill's token count × overlap ratio
178
+ const tokensA = Math.ceil(a.body.length / 4);
179
+ const tokensB = Math.ceil(b.body.length / 4);
180
+ const waste = Math.round(Math.min(tokensA, tokensB) * score);
181
+ // Find the common topic
182
+ const commonHeadings = a.topics.headings.filter(h => b.topics.headings.includes(h));
183
+ const commonKeywords = a.topics.keywords.filter(k => b.topics.keywords.includes(k));
184
+ const topic = commonHeadings.length > 0
185
+ ? commonHeadings.slice(0, 3).join(', ')
186
+ : commonKeywords.slice(0, 5).join(', ');
187
+ overlaps.push({
188
+ skills: [a.name, b.name],
189
+ topic: topic || 'general instructions',
190
+ tokenWaste: waste,
191
+ });
192
+ }
193
+ }
194
+ }
195
+ return overlaps;
196
+ }
197
+ // ── Helpers ──────────────────────────────────────────────────────────────
198
+ /**
199
+ * Load a skill's content and extract directives + topics.
200
+ */
201
+ async function loadSkillContent(skillPath) {
202
+ const skillMd = skillPath.endsWith('SKILL.md')
203
+ ? skillPath
204
+ : join(skillPath, 'SKILL.md');
205
+ if (!existsSync(skillMd))
206
+ return null;
207
+ try {
208
+ const raw = await readFile(skillMd, 'utf-8');
209
+ const { data, content } = matter(raw);
210
+ const name = data.name || basename(skillPath);
211
+ const directives = extractDirectives(content);
212
+ const topics = extractTopics(content);
213
+ return { name, path: skillPath, body: content, directives, topics };
214
+ }
215
+ catch {
216
+ return null;
217
+ }
218
+ }
219
+ /**
220
+ * Extract imperative directives from skill body.
221
+ */
222
+ function extractDirectives(body) {
223
+ const directives = [];
224
+ const lines = body.split('\n');
225
+ for (const line of lines) {
226
+ const trimmed = line.trim();
227
+ if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('```'))
228
+ continue;
229
+ for (const { regex, verb } of DIRECTIVE_PATTERNS) {
230
+ const match = trimmed.match(regex);
231
+ if (match) {
232
+ const subject = match[1].replace(/[.!,;:]+$/, '').trim().toLowerCase();
233
+ if (subject.length > 2 && subject.length < 200) {
234
+ directives.push({ line: trimmed, verb, subject, original: trimmed });
235
+ }
236
+ break; // only match first pattern per line
237
+ }
238
+ }
239
+ }
240
+ return directives;
241
+ }
242
+ /**
243
+ * Extract topic signals from skill body: headings, keywords, code languages.
244
+ */
245
+ function extractTopics(body) {
246
+ const lines = body.split('\n');
247
+ const headings = [];
248
+ const allWords = [];
249
+ const codeLanguages = [];
250
+ let inCodeBlock = false;
251
+ for (const line of lines) {
252
+ if (line.trim().startsWith('```')) {
253
+ inCodeBlock = !inCodeBlock;
254
+ // Extract language from opening fence
255
+ if (inCodeBlock) {
256
+ const match = line.match(/```(\w+)/);
257
+ if (match && match[1]) {
258
+ codeLanguages.push(match[1].toLowerCase());
259
+ }
260
+ }
261
+ continue;
262
+ }
263
+ if (inCodeBlock)
264
+ continue;
265
+ // Extract headings (## or ###)
266
+ const headingMatch = line.match(/^#{2,4}\s+(.+)/);
267
+ if (headingMatch) {
268
+ headings.push(headingMatch[1].toLowerCase().trim());
269
+ }
270
+ // Extract significant words
271
+ const words = extractWords(line);
272
+ allWords.push(...words);
273
+ }
274
+ // Get top keywords by frequency (skip stop words)
275
+ const freq = new Map();
276
+ for (const word of allWords) {
277
+ freq.set(word, (freq.get(word) || 0) + 1);
278
+ }
279
+ const keywords = [...freq.entries()]
280
+ .filter(([, count]) => count >= 2)
281
+ .sort((a, b) => b[1] - a[1])
282
+ .slice(0, 30)
283
+ .map(([word]) => word);
284
+ return {
285
+ keywords,
286
+ headings: [...new Set(headings)],
287
+ codeLanguages: [...new Set(codeLanguages)],
288
+ };
289
+ }
290
+ /**
291
+ * Extract significant words from a line (lowercase, no stop words, min length 3).
292
+ */
293
+ function extractWords(text) {
294
+ return text
295
+ .toLowerCase()
296
+ .replace(/[^a-z0-9\s-]/g, ' ')
297
+ .split(/\s+/)
298
+ .filter(w => w.length >= 3 && !STOP_WORDS.has(w));
299
+ }
300
+ /**
301
+ * Compute overlap ratio between two arrays (Jaccard index).
302
+ */
303
+ function arrayOverlap(a, b) {
304
+ if (a.length === 0 || b.length === 0)
305
+ return 0;
306
+ const setA = new Set(a);
307
+ const setB = new Set(b);
308
+ let intersection = 0;
309
+ for (const item of setA) {
310
+ if (setB.has(item))
311
+ intersection++;
312
+ }
313
+ const union = new Set([...setA, ...setB]).size;
314
+ return union === 0 ? 0 : intersection / union;
315
+ }
316
+ /**
317
+ * Categorize a subject string into a conflict category.
318
+ */
319
+ function categorizeSubject(text) {
320
+ const lower = text.toLowerCase();
321
+ const categories = [
322
+ ['formatting', ['format', 'indent', 'tab', 'space', 'semicolon', 'quote', 'lint', 'prettier', 'eslint']],
323
+ ['architecture', ['component', 'class', 'function', 'functional', 'module', 'pattern', 'architecture', 'structure']],
324
+ ['testing', ['test', 'spec', 'jest', 'vitest', 'mocha', 'assert', 'mock', 'stub']],
325
+ ['styling', ['css', 'style', 'tailwind', 'sass', 'scss', 'styled', 'theme', 'color']],
326
+ ['state management', ['state', 'redux', 'zustand', 'context', 'store', 'signal', 'observable']],
327
+ ['dependencies', ['import', 'require', 'dependency', 'package', 'library', 'framework']],
328
+ ['language', ['typescript', 'javascript', 'python', 'rust', 'go', 'java', 'type', 'interface']],
329
+ ['security', ['auth', 'token', 'password', 'secret', 'encrypt', 'cors', 'xss', 'csrf']],
330
+ ['deployment', ['deploy', 'build', 'ci', 'cd', 'docker', 'kubernetes', 'vercel', 'aws']],
331
+ ['api', ['api', 'rest', 'graphql', 'endpoint', 'route', 'fetch', 'request', 'response']],
332
+ ];
333
+ for (const [category, keywords] of categories) {
334
+ if (keywords.some(kw => lower.includes(kw)))
335
+ return category;
336
+ }
337
+ return 'general';
338
+ }
339
+ //# sourceMappingURL=conflict-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict-detector.js","sourceRoot":"","sources":["../../src/core/conflict-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Context Budget Manager
3
+ * Ranks installed skills by relevance to the current project and selects
4
+ * the best combination that fits within a token budget.
5
+ *
6
+ * Relevance scoring (no LLM required):
7
+ * 1. File extension matching — project files vs. skill code languages
8
+ * 2. Dependency matching — package.json / requirements.txt keywords
9
+ * 3. Keyword density — skill keywords vs. project file names
10
+ * 4. Recency boost — recently installed skills get a small bump
11
+ */
12
+ export interface SkillWithRelevance {
13
+ /** Skill name */
14
+ name: string;
15
+ /** Path to skill directory */
16
+ path: string;
17
+ /** Estimated token count */
18
+ tokens: number;
19
+ /** Relevance score 0-100 */
20
+ relevance: number;
21
+ /** Why this relevance score */
22
+ reason: string;
23
+ /** Full SKILL.md content (for output) */
24
+ content: string;
25
+ }
26
+ export interface ContextPlan {
27
+ /** Skills selected to load (within budget) */
28
+ loaded: SkillWithRelevance[];
29
+ /** Skills skipped (didn't fit or too irrelevant) */
30
+ skipped: SkillWithRelevance[];
31
+ /** Total tokens used */
32
+ totalTokens: number;
33
+ /** Budget that was set */
34
+ budget: number;
35
+ /** Budget remaining */
36
+ budgetRemaining: number;
37
+ }
38
+ export interface ContextOptions {
39
+ /** Token budget */
40
+ budget: number;
41
+ /** Minimum relevance score to include (0-100, default 10) */
42
+ minRelevance?: number;
43
+ /** Project directory to analyze (default: process.cwd()) */
44
+ projectDir?: string;
45
+ /** Output format */
46
+ format?: 'text' | 'xml' | 'json';
47
+ }
48
+ /**
49
+ * Build a context plan that fits installed skills into a token budget.
50
+ *
51
+ * @param skillPaths — array of absolute paths to skill directories
52
+ * @param options — budget + project analysis options
53
+ */
54
+ export declare function buildContextPlan(skillPaths: string[], options: ContextOptions): Promise<ContextPlan>;
55
+ /**
56
+ * Format the context plan as XML for agent consumption.
57
+ */
58
+ export declare function formatContextXML(plan: ContextPlan): string;
59
+ /**
60
+ * Format the context plan as JSON.
61
+ */
62
+ export declare function formatContextJSON(plan: ContextPlan): string;
63
+ //# sourceMappingURL=context-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-budget.d.ts","sourceRoot":"","sources":["../../src/core/context-budget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,MAAM,WAAW,kBAAkB;IAC/B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IACxB,8CAA8C;IAC9C,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,oDAAoD;IACpD,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC3B,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;CACpC;AAuCD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAClC,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,WAAW,CAAC,CAyCtB;AA+ND;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAS1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAQ3D"}