skill-creator 0.0.0 → 1.0.0
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/README.md +148 -19
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +265 -260
- package/dist/cli.js.map +1 -1
- package/dist/commands/addContent.d.ts +5 -0
- package/dist/commands/addContent.d.ts.map +1 -0
- package/dist/commands/addContent.js +74 -0
- package/dist/commands/addContent.js.map +1 -0
- package/dist/commands/buildIndex.d.ts +5 -0
- package/dist/commands/buildIndex.d.ts.map +1 -0
- package/dist/commands/buildIndex.js +17 -0
- package/dist/commands/buildIndex.js.map +1 -0
- package/dist/commands/downloadContext7.d.ts +5 -0
- package/dist/commands/downloadContext7.d.ts.map +1 -0
- package/dist/commands/downloadContext7.js +62 -0
- package/dist/commands/downloadContext7.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +89 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/initCc.d.ts +5 -0
- package/dist/commands/initCc.d.ts.map +1 -0
- package/dist/commands/initCc.js +26 -0
- package/dist/commands/initCc.js.map +1 -0
- package/dist/commands/listContent.d.ts +5 -0
- package/dist/commands/listContent.d.ts.map +1 -0
- package/dist/commands/listContent.js +35 -0
- package/dist/commands/listContent.js.map +1 -0
- package/dist/commands/searchContent.d.ts +5 -0
- package/dist/commands/searchContent.d.ts.map +1 -0
- package/dist/commands/searchContent.js +98 -0
- package/dist/commands/searchContent.js.map +1 -0
- package/dist/commands/shared.d.ts +23 -0
- package/dist/commands/shared.d.ts.map +1 -0
- package/dist/commands/shared.js +92 -0
- package/dist/commands/shared.js.map +1 -0
- package/dist/commands/updateContext7.d.ts +5 -0
- package/dist/commands/updateContext7.d.ts.map +1 -0
- package/dist/commands/updateContext7.js +28 -0
- package/dist/commands/updateContext7.js.map +1 -0
- package/dist/core/autoSearchAdapter.d.ts +42 -0
- package/dist/core/autoSearchAdapter.d.ts.map +1 -0
- package/dist/core/autoSearchAdapter.js +116 -0
- package/dist/core/autoSearchAdapter.js.map +1 -0
- package/dist/core/chromaLocalSearch.d.ts +26 -0
- package/dist/core/chromaLocalSearch.d.ts.map +1 -0
- package/dist/core/chromaLocalSearch.js +212 -0
- package/dist/core/chromaLocalSearch.js.map +1 -0
- package/dist/core/chromaLocalSimple.d.ts +24 -0
- package/dist/core/chromaLocalSimple.d.ts.map +1 -0
- package/dist/core/chromaLocalSimple.js +216 -0
- package/dist/core/chromaLocalSimple.js.map +1 -0
- package/dist/core/chromaSearchAdapter.d.ts +86 -0
- package/dist/core/chromaSearchAdapter.d.ts.map +1 -0
- package/dist/core/chromaSearchAdapter.js +477 -0
- package/dist/core/chromaSearchAdapter.js.map +1 -0
- package/dist/core/chromaSearchImproved.d.ts +29 -0
- package/dist/core/chromaSearchImproved.d.ts.map +1 -0
- package/dist/core/chromaSearchImproved.js +259 -0
- package/dist/core/chromaSearchImproved.js.map +1 -0
- package/dist/core/chromaServerManager.d.ts +64 -0
- package/dist/core/chromaServerManager.d.ts.map +1 -0
- package/dist/core/chromaServerManager.js +186 -0
- package/dist/core/chromaServerManager.js.map +1 -0
- package/dist/core/contentManager.d.ts +1 -0
- package/dist/core/contentManager.d.ts.map +1 -1
- package/dist/core/contentManager.js +75 -21
- package/dist/core/contentManager.js.map +1 -1
- package/dist/core/fuseSearch.d.ts +25 -0
- package/dist/core/fuseSearch.d.ts.map +1 -0
- package/dist/core/fuseSearch.js +198 -0
- package/dist/core/fuseSearch.js.map +1 -0
- package/dist/core/fuzzySearch.d.ts +66 -0
- package/dist/core/fuzzySearch.d.ts.map +1 -0
- package/dist/core/fuzzySearch.js +271 -0
- package/dist/core/fuzzySearch.js.map +1 -0
- package/dist/core/fuzzySearchAdapter.d.ts +33 -0
- package/dist/core/fuzzySearchAdapter.d.ts.map +1 -0
- package/dist/core/fuzzySearchAdapter.js +185 -0
- package/dist/core/fuzzySearchAdapter.js.map +1 -0
- package/dist/core/portUtils.d.ts +51 -0
- package/dist/core/portUtils.d.ts.map +1 -0
- package/dist/core/portUtils.js +120 -0
- package/dist/core/portUtils.js.map +1 -0
- package/dist/core/runScript.d.ts +1 -1
- package/dist/core/runScript.d.ts.map +1 -1
- package/dist/core/runScript.js +27 -210
- package/dist/core/runScript.js.map +1 -1
- package/dist/core/searchAdapter.d.ts +48 -0
- package/dist/core/searchAdapter.d.ts.map +1 -0
- package/dist/core/searchAdapter.js +6 -0
- package/dist/core/searchAdapter.js.map +1 -0
- package/dist/core/searchEngineFactory.d.ts +30 -0
- package/dist/core/searchEngineFactory.d.ts.map +1 -0
- package/dist/core/searchEngineFactory.js +41 -0
- package/dist/core/searchEngineFactory.js.map +1 -0
- package/dist/core/simpleLocalSearch.d.ts +50 -0
- package/dist/core/simpleLocalSearch.d.ts.map +1 -0
- package/dist/core/simpleLocalSearch.js +406 -0
- package/dist/core/simpleLocalSearch.js.map +1 -0
- package/dist/core/skillCreator.d.ts +0 -2
- package/dist/core/skillCreator.d.ts.map +1 -1
- package/dist/core/skillCreator.js +20 -92
- package/dist/core/skillCreator.js.map +1 -1
- package/dist/core/unifiedSearch.d.ts +57 -11
- package/dist/core/unifiedSearch.d.ts.map +1 -1
- package/dist/core/unifiedSearch.js +88 -29
- package/dist/core/unifiedSearch.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/search_format/enhancedFormatter.d.ts +109 -0
- package/dist/search_format/enhancedFormatter.d.ts.map +1 -0
- package/dist/search_format/enhancedFormatter.js +262 -0
- package/dist/search_format/enhancedFormatter.js.map +1 -0
- package/dist/search_format/index.d.ts +10 -0
- package/dist/search_format/index.d.ts.map +1 -0
- package/dist/search_format/index.js +22 -0
- package/dist/search_format/index.js.map +1 -0
- package/dist/search_format/listFormatter.d.ts +16 -0
- package/dist/search_format/listFormatter.d.ts.map +1 -0
- package/dist/search_format/listFormatter.js +51 -0
- package/dist/search_format/listFormatter.js.map +1 -0
- package/dist/search_format/types.d.ts +69 -0
- package/dist/search_format/types.d.ts.map +1 -0
- package/dist/search_format/types.js +5 -0
- package/dist/search_format/types.js.map +1 -0
- package/dist/test/testFuzzy.d.ts +3 -0
- package/dist/test/testFuzzy.d.ts.map +1 -0
- package/dist/test/testFuzzy.js +72 -0
- package/dist/test/testFuzzy.js.map +1 -0
- package/dist/test-fuzzy.d.ts +6 -0
- package/dist/test-fuzzy.d.ts.map +1 -0
- package/dist/test-fuzzy.js +65 -0
- package/dist/test-fuzzy.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/package.d.ts +17 -0
- package/dist/utils/package.d.ts.map +1 -1
- package/dist/utils/package.js +51 -14
- package/dist/utils/package.js.map +1 -1
- package/package.json +9 -8
- package/templates/skill-creator.md +65 -153
- package/templates/skill-creator.zh-CN.md +93 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 简化的 ChromaDB 本地搜索引擎
|
|
3
|
+
* 根据 Context7 文档实现最简单的用法
|
|
4
|
+
*/
|
|
5
|
+
import { ChromaClient } from 'chromadb';
|
|
6
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
7
|
+
import { createHash } from 'node:crypto';
|
|
8
|
+
/**
|
|
9
|
+
* 简单的嵌入函数实现
|
|
10
|
+
*/
|
|
11
|
+
class SimpleEmbeddingFunction {
|
|
12
|
+
async generate(texts) {
|
|
13
|
+
return texts.map(text => {
|
|
14
|
+
// 基于文本内容生成简单的嵌入向量
|
|
15
|
+
const hash = createHash('sha256').update(text).digest('hex');
|
|
16
|
+
const vector = [];
|
|
17
|
+
for (let i = 0; i < hash.length; i += 2) {
|
|
18
|
+
vector.push(parseInt(hash.substr(i, 2), 16) / 255);
|
|
19
|
+
}
|
|
20
|
+
// 确保向量长度为1536(标准OpenAI嵌入维度)
|
|
21
|
+
while (vector.length < 1536) {
|
|
22
|
+
vector.push(0);
|
|
23
|
+
}
|
|
24
|
+
return vector.slice(0, 1536);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export class ChromaLocalSimpleEngine {
|
|
29
|
+
client = null;
|
|
30
|
+
collection = null;
|
|
31
|
+
options;
|
|
32
|
+
embeddingFunction;
|
|
33
|
+
constructor(options) {
|
|
34
|
+
this.options = options;
|
|
35
|
+
this.embeddingFunction = new SimpleEmbeddingFunction();
|
|
36
|
+
}
|
|
37
|
+
async initialize() {
|
|
38
|
+
if (this.client)
|
|
39
|
+
return true;
|
|
40
|
+
try {
|
|
41
|
+
// 根据文档使用最简单的初始化方式
|
|
42
|
+
this.client = new ChromaClient();
|
|
43
|
+
// 获取或创建集合
|
|
44
|
+
try {
|
|
45
|
+
this.collection = await this.client.getCollection({
|
|
46
|
+
name: this.options.collectionName,
|
|
47
|
+
embeddingFunction: this.embeddingFunction,
|
|
48
|
+
});
|
|
49
|
+
console.log(`✅ 获取现有集合: ${this.options.collectionName}`);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
// 集合不存在,创建新的
|
|
53
|
+
this.collection = await this.client.createCollection({
|
|
54
|
+
name: this.options.collectionName,
|
|
55
|
+
embeddingFunction: this.embeddingFunction,
|
|
56
|
+
});
|
|
57
|
+
console.log(`✅ 创建新集合: ${this.options.collectionName}`);
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.log('❌ 初始化 ChromaDB 失败:', error instanceof Error ? error.message : String(error));
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async buildIndex(referencesDir, hashFile) {
|
|
67
|
+
const initialized = await this.initialize();
|
|
68
|
+
if (!initialized) {
|
|
69
|
+
throw new Error('无法初始化 ChromaDB');
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
// 计算文件哈希
|
|
73
|
+
const currentHash = await this.calculateDirectoryHash(referencesDir);
|
|
74
|
+
// 检查是否需要重建索引
|
|
75
|
+
let needsRebuild = true;
|
|
76
|
+
try {
|
|
77
|
+
const savedHash = await readFile(hashFile, 'utf8');
|
|
78
|
+
if (savedHash === currentHash) {
|
|
79
|
+
console.log('📦 文件未变化,跳过重建索引');
|
|
80
|
+
needsRebuild = false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
// 哈希文件不存在,需要重建
|
|
85
|
+
}
|
|
86
|
+
if (!needsRebuild)
|
|
87
|
+
return;
|
|
88
|
+
console.log('🔧 构建 ChromaDB 索引...');
|
|
89
|
+
// 清空现有集合
|
|
90
|
+
try {
|
|
91
|
+
if (this.collection) {
|
|
92
|
+
await this.collection.delete();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
// 集合为空,忽略错误
|
|
97
|
+
}
|
|
98
|
+
// 创建示例文档
|
|
99
|
+
const documents = [
|
|
100
|
+
{
|
|
101
|
+
id: 'doc1',
|
|
102
|
+
content: 'TypeScript 是 JavaScript 的超集,添加了静态类型支持。接口定义了对象的形状。',
|
|
103
|
+
metadata: {
|
|
104
|
+
title: 'TypeScript 基础',
|
|
105
|
+
source: 'context7',
|
|
106
|
+
filePath: 'typescript-basics.md'
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
id: 'doc2',
|
|
111
|
+
content: 'React 是一个用于构建用户界面的 JavaScript 库,组件是 React 的核心概念。',
|
|
112
|
+
metadata: {
|
|
113
|
+
title: 'React 介绍',
|
|
114
|
+
source: 'context7',
|
|
115
|
+
filePath: 'react-intro.md'
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
id: 'doc3',
|
|
120
|
+
content: 'Node.js 允许在服务器端运行 JavaScript 代码,模块系统是 Node.js 的重要特性。',
|
|
121
|
+
metadata: {
|
|
122
|
+
title: 'Node.js 服务器端开发',
|
|
123
|
+
source: 'context7',
|
|
124
|
+
filePath: 'nodejs-server.md'
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
];
|
|
128
|
+
if (documents.length === 0) {
|
|
129
|
+
console.log('⚠️ 没有找到文档');
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
// 添加文档到集合
|
|
133
|
+
if (this.collection) {
|
|
134
|
+
await this.collection.add({
|
|
135
|
+
ids: documents.map(doc => doc.id),
|
|
136
|
+
documents: documents.map(doc => doc.content),
|
|
137
|
+
metadatas: documents.map(doc => doc.metadata),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
// 保存哈希值
|
|
141
|
+
await writeFile(hashFile, currentHash);
|
|
142
|
+
console.log(`✅ 构建完成,共处理 ${documents.length} 个文档`);
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
console.log('❌ 构建索引失败:', error instanceof Error ? error.message : String(error));
|
|
146
|
+
throw error;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async search(query, topK = 5, where) {
|
|
150
|
+
const initialized = await this.initialize();
|
|
151
|
+
if (!initialized || !this.collection) {
|
|
152
|
+
throw new Error('无法初始化 ChromaDB');
|
|
153
|
+
}
|
|
154
|
+
try {
|
|
155
|
+
// 构建查询条件
|
|
156
|
+
const queryOptions = {
|
|
157
|
+
queryTexts: [query],
|
|
158
|
+
nResults: topK,
|
|
159
|
+
};
|
|
160
|
+
if (where) {
|
|
161
|
+
queryOptions.where = where;
|
|
162
|
+
}
|
|
163
|
+
const results = await this.collection.query(queryOptions);
|
|
164
|
+
// 转换结果格式
|
|
165
|
+
const searchResults = [];
|
|
166
|
+
if (results.ids[0] && results.documents[0] && results.metadatas[0]) {
|
|
167
|
+
for (let i = 0; i < results.ids[0].length; i++) {
|
|
168
|
+
const metadata = results.metadatas[0][i];
|
|
169
|
+
searchResults.push({
|
|
170
|
+
id: results.ids[0][i],
|
|
171
|
+
source: 'context7',
|
|
172
|
+
file_path: metadata.filePath || metadata.file_path || 'unknown',
|
|
173
|
+
title: metadata.title || '未知文档',
|
|
174
|
+
content: results.documents[0][i] || '',
|
|
175
|
+
score: results.distances?.[0]?.[i] ? 1 - results.distances[0][i] : 1,
|
|
176
|
+
metadata: {
|
|
177
|
+
...metadata,
|
|
178
|
+
searchEngine: 'chroma-local-simple',
|
|
179
|
+
embeddingDimension: 1536,
|
|
180
|
+
similarity: results.distances?.[0]?.[i] || 0,
|
|
181
|
+
indexedAt: new Date().toISOString(),
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return searchResults;
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
console.log('❌ 搜索失败:', error instanceof Error ? error.message : String(error));
|
|
190
|
+
throw error;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
async searchByPriority(query, topK = 5) {
|
|
194
|
+
return this.search(query, topK);
|
|
195
|
+
}
|
|
196
|
+
async getStats() {
|
|
197
|
+
const initialized = await this.initialize();
|
|
198
|
+
if (!initialized || !this.collection) {
|
|
199
|
+
return { totalDocuments: 0 };
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
const count = await this.collection.count();
|
|
203
|
+
return { totalDocuments: count };
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
console.log('❌ 获取统计信息失败:', error instanceof Error ? error.message : String(error));
|
|
207
|
+
return { totalDocuments: 0 };
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
async calculateDirectoryHash(dirPath) {
|
|
211
|
+
const hash = createHash('md5');
|
|
212
|
+
hash.update(dirPath + Date.now());
|
|
213
|
+
return hash.digest('hex');
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=chromaLocalSimple.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chromaLocalSimple.js","sourceRoot":"","sources":["../../src/core/chromaLocalSimple.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChromaDB Search Adapter
|
|
3
|
+
* Implements on-demand ChromaDB search with automatic fallback to fuzzy search
|
|
4
|
+
*/
|
|
5
|
+
import { ChromaClient } from 'chromadb';
|
|
6
|
+
import type { SearchEngine, SearchResult, SearchOptions } from './searchAdapter.js';
|
|
7
|
+
export interface ChromaSearchOptions {
|
|
8
|
+
/** 技能目录路径 */
|
|
9
|
+
skillDir: string;
|
|
10
|
+
/** ChromaDB 集合名称 */
|
|
11
|
+
collectionName: string;
|
|
12
|
+
/** 启动超时时间(毫秒) */
|
|
13
|
+
startupTimeout?: number;
|
|
14
|
+
/** 是否启用自动回退 */
|
|
15
|
+
enableFallback?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface ChromaPreparedResult {
|
|
18
|
+
/** ChromaDB 客户端 */
|
|
19
|
+
client: ChromaClient;
|
|
20
|
+
/** 服务器信息 */
|
|
21
|
+
serverInfo: {
|
|
22
|
+
port: number;
|
|
23
|
+
dataPath: string;
|
|
24
|
+
};
|
|
25
|
+
/** 是否需要自动关闭服务器 */
|
|
26
|
+
shouldAutoShutdown: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* ChromaDB Search Adapter
|
|
30
|
+
* 支持按需启动、自动回退和优雅关闭
|
|
31
|
+
*/
|
|
32
|
+
export declare class ChromaSearchAdapter implements SearchEngine {
|
|
33
|
+
private fuzzyAdapter;
|
|
34
|
+
private serverManager;
|
|
35
|
+
private options;
|
|
36
|
+
private isIndexBuilt;
|
|
37
|
+
private embeddingFunction;
|
|
38
|
+
constructor(options: ChromaSearchOptions);
|
|
39
|
+
/**
|
|
40
|
+
* 统一准备ChromaDB环境
|
|
41
|
+
* 封装服务器启动、客户端创建和配置的通用逻辑
|
|
42
|
+
*/
|
|
43
|
+
private prepareChromadb;
|
|
44
|
+
/**
|
|
45
|
+
* 安全关闭ChromaDB服务器
|
|
46
|
+
*/
|
|
47
|
+
private safeShutdownServer;
|
|
48
|
+
search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
|
|
49
|
+
/**
|
|
50
|
+
* 计算当前文件的hash映射 {filename: hash}
|
|
51
|
+
*/
|
|
52
|
+
private calculateFileHashes;
|
|
53
|
+
/**
|
|
54
|
+
* 加载之前的文件hash缓存
|
|
55
|
+
*/
|
|
56
|
+
private loadFileHashCache;
|
|
57
|
+
/**
|
|
58
|
+
* 保存文件hash缓存
|
|
59
|
+
*/
|
|
60
|
+
private saveFileHashCache;
|
|
61
|
+
/**
|
|
62
|
+
* 分析文件变化
|
|
63
|
+
*/
|
|
64
|
+
private analyzeFileChanges;
|
|
65
|
+
/**
|
|
66
|
+
* 获取或创建集合
|
|
67
|
+
*/
|
|
68
|
+
private getOrCreateCollection;
|
|
69
|
+
/**
|
|
70
|
+
* 处理文件变化
|
|
71
|
+
*/
|
|
72
|
+
private processFileChanges;
|
|
73
|
+
buildIndex(referencesDir: string): Promise<void>;
|
|
74
|
+
clearIndex(): Promise<void>;
|
|
75
|
+
isBuilt(): boolean;
|
|
76
|
+
getStats(): Promise<{
|
|
77
|
+
totalDocuments: number;
|
|
78
|
+
}>;
|
|
79
|
+
/**
|
|
80
|
+
* 获取运行中的服务器状态
|
|
81
|
+
*/
|
|
82
|
+
getServerStatus(): {
|
|
83
|
+
isRunning: boolean;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=chromaSearchAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chromaSearchAdapter.d.ts","sourceRoot":"","sources":["../../src/core/chromaSearchAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAInF,MAAM,WAAW,mBAAmB;IAClC,aAAa;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,oBAAoB;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe;IACf,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,mBAAmB;IACnB,MAAM,EAAE,YAAY,CAAA;IACpB,YAAY;IACZ,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,kBAAkB;IAClB,kBAAkB,EAAE,OAAO,CAAA;CAC5B;AAED;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,iBAAiB,CAA0B;gBAEvC,OAAO,EAAE,mBAAmB;IAOxC;;;OAGG;YACW,eAAe;IAsD7B;;OAEG;YACW,kBAAkB;IAmB1B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAmHjF;;OAEG;YACW,mBAAmB;IAsBjC;;OAEG;YACW,iBAAiB;IA2B/B;;OAEG;YACW,iBAAiB;IAe/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;OAEG;YACW,qBAAqB;IAiBnC;;OAEG;YACW,kBAAkB;IAmF1B,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDhD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BjC,OAAO,IAAI,OAAO;IAIZ,QAAQ,IAAI,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IA0BrD;;OAEG;IACH,eAAe,IAAI;QACjB,SAAS,EAAE,OAAO,CAAA;KACnB;CAOF"}
|