skill-creator 1.4.2 → 1.5.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/dist/chunk-Da8dvM5T.mjs +1 -0
- package/dist/cli.d.mts +1016 -0
- package/dist/cli.d.mts.map +1 -0
- package/dist/cli.mjs +36 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/contentManager-8rmWJMb6.mjs +22 -0
- package/dist/contentManager-8rmWJMb6.mjs.map +1 -0
- package/dist/contentManager-Xt8N5psY.mjs +1 -0
- package/dist/dist-DZL34HNo.mjs +8 -0
- package/dist/dist-DZL34HNo.mjs.map +1 -0
- package/dist/dist-X_kVEzbK.mjs +1 -0
- package/dist/esm-8qfZdcpd.mjs +33 -0
- package/dist/esm-8qfZdcpd.mjs.map +1 -0
- package/dist/esm-BF5pvSbc.mjs +1 -0
- package/dist/esm-BbhxxeGF.mjs +4 -0
- package/dist/esm-BbhxxeGF.mjs.map +1 -0
- package/dist/index.d.mts +1964 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +21 -0
- package/dist/index.mjs.map +1 -0
- package/dist/listContext7-DKXzgWdn.mjs +2 -0
- package/dist/listContext7-DKXzgWdn.mjs.map +1 -0
- package/dist/package-B4FNst2t.mjs +2 -0
- package/dist/package-B4FNst2t.mjs.map +1 -0
- package/dist/path-CuoiIaIe.mjs +2 -0
- package/dist/path-CuoiIaIe.mjs.map +1 -0
- package/dist/removeContext7-DOXrTXeI.mjs +3 -0
- package/dist/removeContext7-DOXrTXeI.mjs.map +1 -0
- package/dist/removeSkill-C-ehFexk.mjs +5 -0
- package/dist/removeSkill-C-ehFexk.mjs.map +1 -0
- package/dist/removeSkill-DWwhvzej.mjs +1 -0
- package/dist/runScript-Cr9RRN9y.mjs +14 -0
- package/dist/runScript-Cr9RRN9y.mjs.map +1 -0
- package/dist/search_format-DIs-1lKk.mjs +5 -0
- package/dist/search_format-DIs-1lKk.mjs.map +1 -0
- package/dist/shared-CFoY2Xhg.mjs +2 -0
- package/dist/shared-CFoY2Xhg.mjs.map +1 -0
- package/dist/skillMdManager-DP8fGZb7.mjs +7 -0
- package/dist/skillMdManager-DP8fGZb7.mjs.map +1 -0
- package/dist/unifiedSearch-CGZXw0NB.mjs +1 -0
- package/dist/unifiedSearch-l-lrSc9C.mjs +4 -0
- package/dist/unifiedSearch-l-lrSc9C.mjs.map +1 -0
- package/package.json +30 -16
- package/dist/cli.d.ts +0 -8
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -513
- package/dist/cli.js.map +0 -1
- package/dist/commands/addContent.d.ts +0 -5
- package/dist/commands/addContent.d.ts.map +0 -1
- package/dist/commands/addContent.js +0 -88
- package/dist/commands/addContent.js.map +0 -1
- package/dist/commands/buildIndex.d.ts +0 -5
- package/dist/commands/buildIndex.d.ts.map +0 -1
- package/dist/commands/buildIndex.js +0 -16
- package/dist/commands/buildIndex.js.map +0 -1
- package/dist/commands/createSkill.d.ts +0 -6
- package/dist/commands/createSkill.d.ts.map +0 -1
- package/dist/commands/createSkill.js +0 -32
- package/dist/commands/createSkill.js.map +0 -1
- package/dist/commands/downloadContext7.d.ts +0 -5
- package/dist/commands/downloadContext7.d.ts.map +0 -1
- package/dist/commands/downloadContext7.js +0 -71
- package/dist/commands/downloadContext7.js.map +0 -1
- package/dist/commands/init.d.ts +0 -5
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -95
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/listContent.d.ts +0 -5
- package/dist/commands/listContent.d.ts.map +0 -1
- package/dist/commands/listContent.js +0 -34
- package/dist/commands/listContent.js.map +0 -1
- package/dist/commands/listContext7.d.ts +0 -5
- package/dist/commands/listContext7.d.ts.map +0 -1
- package/dist/commands/listContext7.js +0 -26
- package/dist/commands/listContext7.js.map +0 -1
- package/dist/commands/listSkills.d.ts +0 -5
- package/dist/commands/listSkills.d.ts.map +0 -1
- package/dist/commands/listSkills.js +0 -34
- package/dist/commands/listSkills.js.map +0 -1
- package/dist/commands/removeContext7.d.ts +0 -5
- package/dist/commands/removeContext7.d.ts.map +0 -1
- package/dist/commands/removeContext7.js +0 -54
- package/dist/commands/removeContext7.js.map +0 -1
- package/dist/commands/removeSkill.d.ts +0 -5
- package/dist/commands/removeSkill.d.ts.map +0 -1
- package/dist/commands/removeSkill.js +0 -83
- package/dist/commands/removeSkill.js.map +0 -1
- package/dist/commands/searchContent.d.ts +0 -5
- package/dist/commands/searchContent.d.ts.map +0 -1
- package/dist/commands/searchContent.js +0 -99
- package/dist/commands/searchContent.js.map +0 -1
- package/dist/commands/shared.d.ts +0 -21
- package/dist/commands/shared.d.ts.map +0 -1
- package/dist/commands/shared.js +0 -80
- package/dist/commands/shared.js.map +0 -1
- package/dist/core/autoSearchAdapter.d.ts +0 -42
- package/dist/core/autoSearchAdapter.d.ts.map +0 -1
- package/dist/core/autoSearchAdapter.js +0 -116
- package/dist/core/autoSearchAdapter.js.map +0 -1
- package/dist/core/chromaSearch.d.ts +0 -24
- package/dist/core/chromaSearch.d.ts.map +0 -1
- package/dist/core/chromaSearch.js +0 -194
- package/dist/core/chromaSearch.js.map +0 -1
- package/dist/core/chromaSearchAdapter.d.ts +0 -86
- package/dist/core/chromaSearchAdapter.d.ts.map +0 -1
- package/dist/core/chromaSearchAdapter.js +0 -477
- package/dist/core/chromaSearchAdapter.js.map +0 -1
- package/dist/core/chromaServerManager.d.ts +0 -64
- package/dist/core/chromaServerManager.d.ts.map +0 -1
- package/dist/core/chromaServerManager.js +0 -186
- package/dist/core/chromaServerManager.js.map +0 -1
- package/dist/core/contentManager.d.ts +0 -65
- package/dist/core/contentManager.d.ts.map +0 -1
- package/dist/core/contentManager.js +0 -533
- package/dist/core/contentManager.js.map +0 -1
- package/dist/core/fuzzySearchAdapter.d.ts +0 -33
- package/dist/core/fuzzySearchAdapter.d.ts.map +0 -1
- package/dist/core/fuzzySearchAdapter.js +0 -185
- package/dist/core/fuzzySearchAdapter.js.map +0 -1
- package/dist/core/portUtils.d.ts +0 -51
- package/dist/core/portUtils.d.ts.map +0 -1
- package/dist/core/portUtils.js +0 -120
- package/dist/core/portUtils.js.map +0 -1
- package/dist/core/runScript.d.ts +0 -5
- package/dist/core/runScript.d.ts.map +0 -1
- package/dist/core/runScript.js +0 -40
- package/dist/core/runScript.js.map +0 -1
- package/dist/core/searchAdapter.d.ts +0 -48
- package/dist/core/searchAdapter.d.ts.map +0 -1
- package/dist/core/searchAdapter.js +0 -6
- package/dist/core/searchAdapter.js.map +0 -1
- package/dist/core/searchEngineFactory.d.ts +0 -30
- package/dist/core/searchEngineFactory.d.ts.map +0 -1
- package/dist/core/searchEngineFactory.js +0 -41
- package/dist/core/searchEngineFactory.js.map +0 -1
- package/dist/core/skillCreator.d.ts +0 -12
- package/dist/core/skillCreator.d.ts.map +0 -1
- package/dist/core/skillCreator.js +0 -75
- package/dist/core/skillCreator.js.map +0 -1
- package/dist/core/templateManager.d.ts +0 -28
- package/dist/core/templateManager.d.ts.map +0 -1
- package/dist/core/templateManager.js +0 -583
- package/dist/core/templateManager.js.map +0 -1
- package/dist/core/unifiedSearch.d.ts +0 -69
- package/dist/core/unifiedSearch.d.ts.map +0 -1
- package/dist/core/unifiedSearch.js +0 -105
- package/dist/core/unifiedSearch.js.map +0 -1
- package/dist/index.d.ts +0 -13
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -11
- package/dist/index.js.map +0 -1
- package/dist/search_format/enhancedFormatter.d.ts +0 -109
- package/dist/search_format/enhancedFormatter.d.ts.map +0 -1
- package/dist/search_format/enhancedFormatter.js +0 -262
- package/dist/search_format/enhancedFormatter.js.map +0 -1
- package/dist/search_format/index.d.ts +0 -10
- package/dist/search_format/index.d.ts.map +0 -1
- package/dist/search_format/index.js +0 -22
- package/dist/search_format/index.js.map +0 -1
- package/dist/search_format/listFormatter.d.ts +0 -16
- package/dist/search_format/listFormatter.d.ts.map +0 -1
- package/dist/search_format/listFormatter.js +0 -51
- package/dist/search_format/listFormatter.js.map +0 -1
- package/dist/search_format/types.d.ts +0 -69
- package/dist/search_format/types.d.ts.map +0 -1
- package/dist/search_format/types.js +0 -5
- package/dist/search_format/types.js.map +0 -1
- package/dist/types/index.d.ts +0 -74
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -2
- package/dist/types/index.js.map +0 -1
- package/dist/utils/claudeCodeDetection.d.ts +0 -27
- package/dist/utils/claudeCodeDetection.d.ts.map +0 -1
- package/dist/utils/claudeCodeDetection.js +0 -81
- package/dist/utils/claudeCodeDetection.js.map +0 -1
- package/dist/utils/config.d.ts +0 -23
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -41
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/package.d.ts +0 -88
- package/dist/utils/package.d.ts.map +0 -1
- package/dist/utils/package.js +0 -221
- package/dist/utils/package.js.map +0 -1
- package/dist/utils/skillMdManager.d.ts +0 -44
- package/dist/utils/skillMdManager.d.ts.map +0 -1
- package/dist/utils/skillMdManager.js +0 -157
- package/dist/utils/skillMdManager.js.map +0 -1
|
@@ -1,86 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,477 +0,0 @@
|
|
|
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 { DefaultEmbeddingFunction } from '@chroma-core/default-embed';
|
|
7
|
-
import { FuzzySearchAdapter } from './fuzzySearchAdapter.js';
|
|
8
|
-
import { ChromaServerManager } from './chromaServerManager.js';
|
|
9
|
-
/**
|
|
10
|
-
* ChromaDB Search Adapter
|
|
11
|
-
* 支持按需启动、自动回退和优雅关闭
|
|
12
|
-
*/
|
|
13
|
-
export class ChromaSearchAdapter {
|
|
14
|
-
fuzzyAdapter;
|
|
15
|
-
serverManager;
|
|
16
|
-
options;
|
|
17
|
-
isIndexBuilt = false;
|
|
18
|
-
embeddingFunction;
|
|
19
|
-
constructor(options) {
|
|
20
|
-
this.options = options;
|
|
21
|
-
this.fuzzyAdapter = new FuzzySearchAdapter();
|
|
22
|
-
this.serverManager = ChromaServerManager.getInstance();
|
|
23
|
-
this.embeddingFunction = new DefaultEmbeddingFunction();
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* 统一准备ChromaDB环境
|
|
27
|
-
* 封装服务器启动、客户端创建和配置的通用逻辑
|
|
28
|
-
*/
|
|
29
|
-
async prepareChromadb(operation = 'search', autoShutdown = true) {
|
|
30
|
-
// 检查服务器是否已运行
|
|
31
|
-
const isServerRunning = this.serverManager.isServerRunning({
|
|
32
|
-
skillDir: this.options.skillDir,
|
|
33
|
-
});
|
|
34
|
-
let serverInfo;
|
|
35
|
-
let shouldAutoShutdown = autoShutdown;
|
|
36
|
-
if (isServerRunning) {
|
|
37
|
-
// 服务器已运行,获取现有信息
|
|
38
|
-
serverInfo = this.serverManager.getServerInfo({
|
|
39
|
-
skillDir: this.options.skillDir,
|
|
40
|
-
});
|
|
41
|
-
console.log(`🔄 使用现有的 ChromaDB 服务器 (端口: ${serverInfo.port})`);
|
|
42
|
-
shouldAutoShutdown = false; // 现有服务器不自动关闭
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
// 启动新服务器
|
|
46
|
-
serverInfo = await this.serverManager.startServer({
|
|
47
|
-
skillDir: this.options.skillDir,
|
|
48
|
-
startupTimeout: this.options.startupTimeout,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
// 创建ChromaDB客户端
|
|
52
|
-
console.log(`🔗 连接到 ChromaDB: http://localhost:${serverInfo.port}`);
|
|
53
|
-
const client = new ChromaClient({
|
|
54
|
-
host: 'localhost',
|
|
55
|
-
port: serverInfo.port,
|
|
56
|
-
});
|
|
57
|
-
// 测试连接
|
|
58
|
-
try {
|
|
59
|
-
await client.heartbeat();
|
|
60
|
-
console.log(`✅ ChromaDB 连接成功`);
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
throw new Error(`ChromaDB 连接失败: ${error instanceof Error ? error.message : String(error)}`);
|
|
64
|
-
}
|
|
65
|
-
return {
|
|
66
|
-
client,
|
|
67
|
-
serverInfo: {
|
|
68
|
-
port: serverInfo.port,
|
|
69
|
-
dataPath: serverInfo.dataPath,
|
|
70
|
-
},
|
|
71
|
-
shouldAutoShutdown,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* 安全关闭ChromaDB服务器
|
|
76
|
-
*/
|
|
77
|
-
async safeShutdownServer(serverInfo, shouldShutdown) {
|
|
78
|
-
if (!shouldShutdown) {
|
|
79
|
-
console.log(`🔄 保持 ChromaDB 服务器运行 (端口: ${serverInfo.port})`);
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
try {
|
|
83
|
-
await this.serverManager.stopServer({
|
|
84
|
-
skillDir: this.options.skillDir,
|
|
85
|
-
});
|
|
86
|
-
console.log(`✅ ChromaDB 服务器已关闭 (端口: ${serverInfo.port})`);
|
|
87
|
-
}
|
|
88
|
-
catch (error) {
|
|
89
|
-
console.warn(`⚠️ 关闭 ChromaDB 服务器时出现警告:`, error);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
async search(query, options = {}) {
|
|
93
|
-
const { topK = 5, where } = options;
|
|
94
|
-
try {
|
|
95
|
-
console.log('🔍 启动 ChromaDB 搜索...');
|
|
96
|
-
// 准备ChromaDB环境
|
|
97
|
-
const { client, serverInfo, shouldAutoShutdown } = await this.prepareChromadb('search');
|
|
98
|
-
try {
|
|
99
|
-
// 获取或创建集合
|
|
100
|
-
let collection;
|
|
101
|
-
try {
|
|
102
|
-
collection = await client.getCollection({
|
|
103
|
-
name: this.options.collectionName,
|
|
104
|
-
embeddingFunction: this.embeddingFunction,
|
|
105
|
-
});
|
|
106
|
-
console.log(`📚 获取现有集合: ${this.options.collectionName}`);
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
if (!this.isIndexBuilt) {
|
|
110
|
-
console.log(`⚠️ 集合不存在且索引未构建,跳过 ChromaDB 搜索`);
|
|
111
|
-
throw new Error('ChromaDB 索引未构建');
|
|
112
|
-
}
|
|
113
|
-
throw error;
|
|
114
|
-
}
|
|
115
|
-
// 检查是否有数据
|
|
116
|
-
try {
|
|
117
|
-
const count = await collection.count();
|
|
118
|
-
if (count === 0) {
|
|
119
|
-
console.log(`📭 集合为空,跳过 ChromaDB 搜索`);
|
|
120
|
-
throw new Error('ChromaDB 集合为空');
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
console.log(`⚠️ 无法获取集合计数,可能集合为空`);
|
|
125
|
-
throw new Error('ChromaDB 集合不可访问');
|
|
126
|
-
}
|
|
127
|
-
// 执行搜索
|
|
128
|
-
console.log(`🔎 查询 ChromaDB: "${query}"`);
|
|
129
|
-
const results = await collection.query({
|
|
130
|
-
queryTexts: [query],
|
|
131
|
-
nResults: topK,
|
|
132
|
-
});
|
|
133
|
-
// 转换结果
|
|
134
|
-
const searchResults = [];
|
|
135
|
-
if (results.ids[0] && results.ids[0].length > 0) {
|
|
136
|
-
for (let i = 0; i < results.ids[0].length; i++) {
|
|
137
|
-
const id = results.ids[0][i];
|
|
138
|
-
const document = results.documents[0]?.[i];
|
|
139
|
-
const metadata = results.metadatas[0]?.[i];
|
|
140
|
-
const distance = results.distances?.[0]?.[i] || 1;
|
|
141
|
-
if (id && document) {
|
|
142
|
-
// 将distance转换为similarity
|
|
143
|
-
// ChromaDB使用不同的距离度量,这里使用更通用的转换方法
|
|
144
|
-
let similarity;
|
|
145
|
-
if (distance <= 0) {
|
|
146
|
-
// 完美匹配
|
|
147
|
-
similarity = 1.0;
|
|
148
|
-
}
|
|
149
|
-
else if (distance <= 1) {
|
|
150
|
-
// 对于小距离使用线性转换
|
|
151
|
-
similarity = 1 - distance;
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
// 对于大距离使用归一化到0-0.3范围
|
|
155
|
-
// 这确保即使距离很大,也不会完全为0
|
|
156
|
-
similarity = Math.max(0.1, 0.3 / distance);
|
|
157
|
-
}
|
|
158
|
-
searchResults.push({
|
|
159
|
-
id,
|
|
160
|
-
title: (typeof metadata?.title === 'string'
|
|
161
|
-
? metadata.title
|
|
162
|
-
: `Document ${id}`),
|
|
163
|
-
content: document,
|
|
164
|
-
source: (metadata?.source === 'user' || metadata?.source === 'context7'
|
|
165
|
-
? metadata.source
|
|
166
|
-
: 'user'),
|
|
167
|
-
file_path: (typeof metadata?.file_path === 'string'
|
|
168
|
-
? metadata.file_path
|
|
169
|
-
: `unknown/${id}`),
|
|
170
|
-
score: similarity,
|
|
171
|
-
metadata: {
|
|
172
|
-
...metadata,
|
|
173
|
-
similarity: distance,
|
|
174
|
-
distance: distance,
|
|
175
|
-
serverPort: serverInfo.port,
|
|
176
|
-
indexedAt: new Date().toISOString(),
|
|
177
|
-
},
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
console.log(`✅ ChromaDB 搜索完成,找到 ${searchResults.length} 个结果`);
|
|
183
|
-
return searchResults;
|
|
184
|
-
}
|
|
185
|
-
finally {
|
|
186
|
-
// 安全关闭服务器
|
|
187
|
-
await this.safeShutdownServer(serverInfo, shouldAutoShutdown);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
catch (error) {
|
|
191
|
-
console.log(`❌ ChromaDB 搜索失败: ${error instanceof Error ? error.message : String(error)}`);
|
|
192
|
-
// 自动回退到模糊搜索
|
|
193
|
-
if (this.options.enableFallback) {
|
|
194
|
-
console.log('🔄 自动回退到模糊搜索...');
|
|
195
|
-
return this.fuzzyAdapter.search(query, { topK, where });
|
|
196
|
-
}
|
|
197
|
-
throw error;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* 计算当前文件的hash映射 {filename: hash}
|
|
202
|
-
*/
|
|
203
|
-
async calculateFileHashes(referencesDir) {
|
|
204
|
-
const fs = await import('node:fs');
|
|
205
|
-
const { createHash } = await import('node:crypto');
|
|
206
|
-
const { glob } = await import('glob');
|
|
207
|
-
const files = await glob('**/*.md', { cwd: referencesDir });
|
|
208
|
-
const fileHashes = new Map();
|
|
209
|
-
for (const file of files.sort()) {
|
|
210
|
-
try {
|
|
211
|
-
const fullPath = `${referencesDir}/${file}`;
|
|
212
|
-
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
213
|
-
const hash = createHash('sha256').update(content).digest('hex');
|
|
214
|
-
fileHashes.set(file, hash);
|
|
215
|
-
}
|
|
216
|
-
catch (error) {
|
|
217
|
-
console.warn(`⚠️ 计算文件hash失败 ${file}:`, error);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
return fileHashes;
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* 加载之前的文件hash缓存
|
|
224
|
-
*/
|
|
225
|
-
async loadFileHashCache(cacheFile) {
|
|
226
|
-
const fs = await import('node:fs');
|
|
227
|
-
const path = await import('node:path');
|
|
228
|
-
// 确保缓存目录存在
|
|
229
|
-
const cacheDir = path.dirname(cacheFile);
|
|
230
|
-
if (!fs.existsSync(cacheDir)) {
|
|
231
|
-
fs.mkdirSync(cacheDir, { recursive: true });
|
|
232
|
-
}
|
|
233
|
-
const fileHashes = new Map();
|
|
234
|
-
try {
|
|
235
|
-
if (fs.existsSync(cacheFile)) {
|
|
236
|
-
const content = fs.readFileSync(cacheFile, 'utf-8');
|
|
237
|
-
const data = JSON.parse(content);
|
|
238
|
-
Object.entries(data).forEach(([file, hash]) => {
|
|
239
|
-
fileHashes.set(file, hash);
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
catch (error) {
|
|
244
|
-
console.warn('⚠️ 读取文件hash缓存失败:', error);
|
|
245
|
-
}
|
|
246
|
-
return fileHashes;
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* 保存文件hash缓存
|
|
250
|
-
*/
|
|
251
|
-
async saveFileHashCache(cacheFile, fileHashes) {
|
|
252
|
-
const fs = await import('node:fs');
|
|
253
|
-
try {
|
|
254
|
-
const data = Object.fromEntries(fileHashes);
|
|
255
|
-
fs.writeFileSync(cacheFile, JSON.stringify(data, null, 2));
|
|
256
|
-
console.log('💾 已更新文件hash缓存');
|
|
257
|
-
}
|
|
258
|
-
catch (error) {
|
|
259
|
-
console.warn('⚠️ 保存文件hash缓存失败:', error);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* 分析文件变化
|
|
264
|
-
*/
|
|
265
|
-
analyzeFileChanges(currentHashes, previousHashes) {
|
|
266
|
-
const added = [];
|
|
267
|
-
const modified = [];
|
|
268
|
-
const deleted = [];
|
|
269
|
-
// 检查新增和修改的文件
|
|
270
|
-
for (const [file, currentHash] of currentHashes) {
|
|
271
|
-
const previousHash = previousHashes.get(file);
|
|
272
|
-
if (!previousHash) {
|
|
273
|
-
added.push(file);
|
|
274
|
-
}
|
|
275
|
-
else if (previousHash !== currentHash) {
|
|
276
|
-
modified.push(file);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
// 检查删除的文件
|
|
280
|
-
for (const file of previousHashes.keys()) {
|
|
281
|
-
if (!currentHashes.has(file)) {
|
|
282
|
-
deleted.push(file);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
return { added, modified, deleted };
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* 获取或创建集合
|
|
289
|
-
*/
|
|
290
|
-
async getOrCreateCollection(client) {
|
|
291
|
-
try {
|
|
292
|
-
const collection = await client.getCollection({
|
|
293
|
-
name: this.options.collectionName,
|
|
294
|
-
embeddingFunction: this.embeddingFunction,
|
|
295
|
-
});
|
|
296
|
-
console.log(`📝 使用现有集合: ${this.options.collectionName}`);
|
|
297
|
-
return collection;
|
|
298
|
-
}
|
|
299
|
-
catch (error) {
|
|
300
|
-
console.log(`📝 创建新集合: ${this.options.collectionName}`);
|
|
301
|
-
return await client.createCollection({
|
|
302
|
-
name: this.options.collectionName,
|
|
303
|
-
embeddingFunction: this.embeddingFunction,
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* 处理文件变化
|
|
309
|
-
*/
|
|
310
|
-
async processFileChanges(collection, referencesDir, changes) {
|
|
311
|
-
const fs = await import('node:fs');
|
|
312
|
-
const { join, relative } = await import('node:path');
|
|
313
|
-
// 处理删除的文件
|
|
314
|
-
if (changes.deleted.length > 0) {
|
|
315
|
-
try {
|
|
316
|
-
await collection.delete({
|
|
317
|
-
ids: changes.deleted,
|
|
318
|
-
});
|
|
319
|
-
console.log(`🗑️ 已删除 ${changes.deleted.length} 个文档`);
|
|
320
|
-
}
|
|
321
|
-
catch (error) {
|
|
322
|
-
console.warn('⚠️ 删除文档失败:', error);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
// 处理新增和修改的文件
|
|
326
|
-
const filesToProcess = [...changes.added, ...changes.modified];
|
|
327
|
-
if (filesToProcess.length > 0) {
|
|
328
|
-
console.log(`📝 处理文件变更: 新增 ${changes.added.length}, 修改 ${changes.modified.length}`);
|
|
329
|
-
// 分批处理
|
|
330
|
-
const batchSize = 50;
|
|
331
|
-
for (let i = 0; i < filesToProcess.length; i += batchSize) {
|
|
332
|
-
const batch = filesToProcess.slice(i, i + batchSize);
|
|
333
|
-
const documents = [];
|
|
334
|
-
const ids = [];
|
|
335
|
-
const metadatas = [];
|
|
336
|
-
for (const file of batch) {
|
|
337
|
-
try {
|
|
338
|
-
const fullPath = join(referencesDir, file);
|
|
339
|
-
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
340
|
-
// 提取标题
|
|
341
|
-
const lines = content.split('\n');
|
|
342
|
-
const title = lines[0]?.replace(/^#+\s*/, '').trim() || file.replace(/\.md$/, '');
|
|
343
|
-
documents.push(content);
|
|
344
|
-
ids.push(file);
|
|
345
|
-
metadatas.push({
|
|
346
|
-
title,
|
|
347
|
-
file_path: file,
|
|
348
|
-
source: file.includes('context7/') ? 'context7' : 'user',
|
|
349
|
-
file_name: file.split('/').pop() || file,
|
|
350
|
-
updated_at: new Date().toISOString(),
|
|
351
|
-
});
|
|
352
|
-
}
|
|
353
|
-
catch (error) {
|
|
354
|
-
console.warn(`⚠️ 处理文件失败 ${file}:`, error);
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
if (documents.length > 0) {
|
|
358
|
-
// 先删除已存在的文档(用于修改的情况)
|
|
359
|
-
const existingIds = ids.filter((id) => changes.modified.includes(id));
|
|
360
|
-
if (existingIds.length > 0) {
|
|
361
|
-
try {
|
|
362
|
-
await collection.delete({
|
|
363
|
-
ids: existingIds,
|
|
364
|
-
});
|
|
365
|
-
}
|
|
366
|
-
catch (error) {
|
|
367
|
-
// 忽略删除不存在的文档的错误
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
// 添加新的文档
|
|
371
|
-
await collection.add({
|
|
372
|
-
ids,
|
|
373
|
-
documents,
|
|
374
|
-
metadatas,
|
|
375
|
-
});
|
|
376
|
-
console.log(`📚 已处理 ${Math.min(i + batchSize, filesToProcess.length)}/${filesToProcess.length} 个文档`);
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
async buildIndex(referencesDir) {
|
|
382
|
-
console.log('🔧 构建 ChromaDB 索引...');
|
|
383
|
-
// 准备ChromaDB环境
|
|
384
|
-
const { client, serverInfo, shouldAutoShutdown } = await this.prepareChromadb('build-index', false);
|
|
385
|
-
try {
|
|
386
|
-
// 计算当前文件的hash映射
|
|
387
|
-
const currentFileHashes = await this.calculateFileHashes(referencesDir);
|
|
388
|
-
// 读取之前的文件hash缓存
|
|
389
|
-
const cacheFile = `${referencesDir}/../.cache/chroma-file-hashes.json`;
|
|
390
|
-
const previousFileHashes = await this.loadFileHashCache(cacheFile);
|
|
391
|
-
// 分析文件变化
|
|
392
|
-
const changes = this.analyzeFileChanges(currentFileHashes, previousFileHashes);
|
|
393
|
-
console.log(`📊 文件变化分析: 新增 ${changes.added.length}, 修改 ${changes.modified.length}, 删除 ${changes.deleted.length}`);
|
|
394
|
-
if (changes.added.length === 0 &&
|
|
395
|
-
changes.modified.length === 0 &&
|
|
396
|
-
changes.deleted.length === 0) {
|
|
397
|
-
console.log('✅ 文件未变化,跳过索引重建');
|
|
398
|
-
this.isIndexBuilt = true;
|
|
399
|
-
return;
|
|
400
|
-
}
|
|
401
|
-
// 获取或创建集合
|
|
402
|
-
const collection = await this.getOrCreateCollection(client);
|
|
403
|
-
// 处理文件变化
|
|
404
|
-
await this.processFileChanges(collection, referencesDir, changes);
|
|
405
|
-
// 保存新的文件hash缓存
|
|
406
|
-
await this.saveFileHashCache(cacheFile, currentFileHashes);
|
|
407
|
-
// 验证索引
|
|
408
|
-
const count = await collection.count();
|
|
409
|
-
console.log(`✅ ChromaDB 索引更新完成,当前包含 ${count} 个文档`);
|
|
410
|
-
this.isIndexBuilt = true;
|
|
411
|
-
}
|
|
412
|
-
finally {
|
|
413
|
-
// 安全关闭服务器
|
|
414
|
-
await this.safeShutdownServer(serverInfo, shouldAutoShutdown);
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
async clearIndex() {
|
|
418
|
-
console.log('🗑️ 清除 ChromaDB 索引...');
|
|
419
|
-
// 准备ChromaDB环境
|
|
420
|
-
const { client, serverInfo, shouldAutoShutdown } = await this.prepareChromadb('clear-index', false);
|
|
421
|
-
try {
|
|
422
|
-
try {
|
|
423
|
-
await client.deleteCollection({
|
|
424
|
-
name: this.options.collectionName,
|
|
425
|
-
});
|
|
426
|
-
console.log('✅ ChromaDB 索引已清除');
|
|
427
|
-
}
|
|
428
|
-
catch (error) {
|
|
429
|
-
console.log('⚠️ ChromaDB 集合不存在或已清除');
|
|
430
|
-
}
|
|
431
|
-
this.isIndexBuilt = false;
|
|
432
|
-
}
|
|
433
|
-
finally {
|
|
434
|
-
// 安全关闭服务器
|
|
435
|
-
await this.safeShutdownServer(serverInfo, shouldAutoShutdown);
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
isBuilt() {
|
|
439
|
-
return this.isIndexBuilt;
|
|
440
|
-
}
|
|
441
|
-
async getStats() {
|
|
442
|
-
try {
|
|
443
|
-
// 准备ChromaDB环境
|
|
444
|
-
const { client, shouldAutoShutdown } = await this.prepareChromadb('search');
|
|
445
|
-
try {
|
|
446
|
-
const collection = await client.getCollection({
|
|
447
|
-
name: this.options.collectionName,
|
|
448
|
-
embeddingFunction: this.embeddingFunction,
|
|
449
|
-
});
|
|
450
|
-
const count = await collection.count();
|
|
451
|
-
return { totalDocuments: count };
|
|
452
|
-
}
|
|
453
|
-
finally {
|
|
454
|
-
// 安全关闭服务器
|
|
455
|
-
if (shouldAutoShutdown) {
|
|
456
|
-
await this.serverManager.stopServer({
|
|
457
|
-
skillDir: this.options.skillDir,
|
|
458
|
-
});
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
catch (error) {
|
|
463
|
-
console.log(`⚠️ 无法获取 ChromaDB 统计信息:`, error);
|
|
464
|
-
return { totalDocuments: 0 };
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
/**
|
|
468
|
-
* 获取运行中的服务器状态
|
|
469
|
-
*/
|
|
470
|
-
getServerStatus() {
|
|
471
|
-
const isRunning = this.serverManager.isServerRunning({
|
|
472
|
-
skillDir: this.options.skillDir,
|
|
473
|
-
});
|
|
474
|
-
return { isRunning };
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
//# sourceMappingURL=chromaSearchAdapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chromaSearchAdapter.js","sourceRoot":"","sources":["../../src/core/chromaSearchAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ChromaDB Server Manager
|
|
3
|
-
* Manages on-demand ChromaDB server startup and shutdown with process isolation
|
|
4
|
-
*/
|
|
5
|
-
import { ChildProcess } from 'node:child_process';
|
|
6
|
-
export interface ChromaServerConfig {
|
|
7
|
-
/** 技能目录路径 */
|
|
8
|
-
skillDir: string;
|
|
9
|
-
/** 临时目录名称 */
|
|
10
|
-
tempDirName?: string;
|
|
11
|
-
/** 端口号(可选,如果不指定会自动分配) */
|
|
12
|
-
port?: number;
|
|
13
|
-
/** 服务器启动超时时间(毫秒) */
|
|
14
|
-
startupTimeout?: number;
|
|
15
|
-
}
|
|
16
|
-
export interface ChromaServerInfo {
|
|
17
|
-
/** 端口号 */
|
|
18
|
-
port: number;
|
|
19
|
-
/** 数据目录路径 */
|
|
20
|
-
dataPath: string;
|
|
21
|
-
/** 进程实例 */
|
|
22
|
-
process: ChildProcess;
|
|
23
|
-
/** 配置信息 */
|
|
24
|
-
config: ChromaServerConfig;
|
|
25
|
-
}
|
|
26
|
-
export declare class ChromaServerManager {
|
|
27
|
-
private static instance;
|
|
28
|
-
private servers;
|
|
29
|
-
private chromaCliPath;
|
|
30
|
-
private constructor();
|
|
31
|
-
/**
|
|
32
|
-
* 获取单例实例
|
|
33
|
-
*/
|
|
34
|
-
static getInstance(): ChromaServerManager;
|
|
35
|
-
/**
|
|
36
|
-
* 初始化 ChromaDB CLI 路径
|
|
37
|
-
*/
|
|
38
|
-
private initChromaCliPath;
|
|
39
|
-
/**
|
|
40
|
-
* 生成服务器唯一标识(基于skill目录)
|
|
41
|
-
*/
|
|
42
|
-
private generateServerId;
|
|
43
|
-
/**
|
|
44
|
-
* 启动 ChromaDB 服务器(在独立进程中)
|
|
45
|
-
*/
|
|
46
|
-
startServer(config: ChromaServerConfig): Promise<ChromaServerInfo>;
|
|
47
|
-
/**
|
|
48
|
-
* 停止 ChromaDB 服务器
|
|
49
|
-
*/
|
|
50
|
-
stopServer(config: ChromaServerConfig): Promise<void>;
|
|
51
|
-
/**
|
|
52
|
-
* 停止所有服务器
|
|
53
|
-
*/
|
|
54
|
-
stopAllServers(): Promise<void>;
|
|
55
|
-
/**
|
|
56
|
-
* 获取服务器信息
|
|
57
|
-
*/
|
|
58
|
-
getServerInfo(config: ChromaServerConfig): ChromaServerInfo | null;
|
|
59
|
-
/**
|
|
60
|
-
* 检查服务器是否运行
|
|
61
|
-
*/
|
|
62
|
-
isServerRunning(config: ChromaServerConfig): boolean;
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=chromaServerManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chromaServerManager.d.ts","sourceRoot":"","sources":["../../src/core/chromaServerManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAS,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAOxD,MAAM,WAAW,kBAAkB;IACjC,aAAa;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oBAAoB;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW;IACX,OAAO,EAAE,YAAY,CAAA;IACrB,WAAW;IACX,MAAM,EAAE,kBAAkB,CAAA;CAC3B;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,OAAO,CAA2C;IAC1D,OAAO,CAAC,aAAa,CAAsB;IAE3C,OAAO;IAEP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,mBAAmB;IAOzC;;OAEG;YACW,iBAAiB;IA6B/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA2ExE;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC3D;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAcrC;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,IAAI;IAKlE;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO;CAIrD"}
|