skill-creator 1.0.0 → 1.1.1

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 +14 -5
  2. package/dist/cli.d.ts +1 -2
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +30 -29
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/init.js +2 -2
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/core/chromaSearch.d.ts +2 -2
  9. package/dist/core/chromaSearch.d.ts.map +1 -1
  10. package/dist/core/chromaSearch.js +11 -9
  11. package/dist/core/chromaSearch.js.map +1 -1
  12. package/dist/core/skillCreator.d.ts +2 -2
  13. package/dist/core/skillCreator.d.ts.map +1 -1
  14. package/dist/core/skillCreator.js +39 -116
  15. package/dist/core/skillCreator.js.map +1 -1
  16. package/dist/core/templateManager.d.ts +2 -1
  17. package/dist/core/templateManager.d.ts.map +1 -1
  18. package/dist/core/templateManager.js +19 -13
  19. package/dist/core/templateManager.js.map +1 -1
  20. package/dist/types/index.d.ts +1 -1
  21. package/dist/types/index.d.ts.map +1 -1
  22. package/package.json +1 -1
  23. package/templates/SKILL.md +193 -0
  24. package/templates/SKILL.zh-CN.md +193 -0
  25. package/templates/skill-creator.md +6 -4
  26. package/templates/skill-creator.zh-CN.md +9 -4
  27. package/dist/commands/initCc.d.ts +0 -5
  28. package/dist/commands/initCc.d.ts.map +0 -1
  29. package/dist/commands/initCc.js +0 -26
  30. package/dist/commands/initCc.js.map +0 -1
  31. package/dist/commands/updateContext7.d.ts +0 -5
  32. package/dist/commands/updateContext7.d.ts.map +0 -1
  33. package/dist/commands/updateContext7.js +0 -28
  34. package/dist/commands/updateContext7.js.map +0 -1
  35. package/dist/core/chromaLocalSearch.d.ts +0 -26
  36. package/dist/core/chromaLocalSearch.d.ts.map +0 -1
  37. package/dist/core/chromaLocalSearch.js +0 -212
  38. package/dist/core/chromaLocalSearch.js.map +0 -1
  39. package/dist/core/chromaLocalSimple.d.ts +0 -24
  40. package/dist/core/chromaLocalSimple.d.ts.map +0 -1
  41. package/dist/core/chromaLocalSimple.js +0 -216
  42. package/dist/core/chromaLocalSimple.js.map +0 -1
  43. package/dist/core/chromaSearchImproved.d.ts +0 -29
  44. package/dist/core/chromaSearchImproved.d.ts.map +0 -1
  45. package/dist/core/chromaSearchImproved.js +0 -259
  46. package/dist/core/chromaSearchImproved.js.map +0 -1
  47. package/dist/core/fuseSearch.d.ts +0 -25
  48. package/dist/core/fuseSearch.d.ts.map +0 -1
  49. package/dist/core/fuseSearch.js +0 -198
  50. package/dist/core/fuseSearch.js.map +0 -1
  51. package/dist/core/fuzzySearch.d.ts +0 -66
  52. package/dist/core/fuzzySearch.d.ts.map +0 -1
  53. package/dist/core/fuzzySearch.js +0 -271
  54. package/dist/core/fuzzySearch.js.map +0 -1
  55. package/dist/core/searchEngine.d.ts +0 -25
  56. package/dist/core/searchEngine.d.ts.map +0 -1
  57. package/dist/core/searchEngine.js +0 -198
  58. package/dist/core/searchEngine.js.map +0 -1
  59. package/dist/core/simpleLocalSearch.d.ts +0 -50
  60. package/dist/core/simpleLocalSearch.d.ts.map +0 -1
  61. package/dist/core/simpleLocalSearch.js +0 -406
  62. package/dist/core/simpleLocalSearch.js.map +0 -1
  63. package/dist/core/simpleSearch.d.ts +0 -21
  64. package/dist/core/simpleSearch.d.ts.map +0 -1
  65. package/dist/core/simpleSearch.js +0 -113
  66. package/dist/core/simpleSearch.js.map +0 -1
  67. package/dist/test/testFuzzy.d.ts +0 -3
  68. package/dist/test/testFuzzy.d.ts.map +0 -1
  69. package/dist/test/testFuzzy.js +0 -72
  70. package/dist/test/testFuzzy.js.map +0 -1
  71. package/dist/test-fuzzy.d.ts +0 -6
  72. package/dist/test-fuzzy.d.ts.map +0 -1
  73. package/dist/test-fuzzy.js +0 -65
  74. package/dist/test-fuzzy.js.map +0 -1
@@ -1,26 +0,0 @@
1
- /**
2
- * Non-interactive init command to install skill-creator as subagent in user directory
3
- */
4
- import { homedir } from 'node:os';
5
- import { join } from 'node:path';
6
- import { mkdirSync, writeFileSync } from 'node:fs';
7
- export async function initCc(args) {
8
- const { default: gradient } = await import('gradient-string');
9
- console.log(gradient('blue', 'cyan')('\n🚀 Installing skill-creator as subagent...'));
10
- const targetDir = join(homedir(), '.claude', 'agents', 'skill-creator');
11
- // Create directories
12
- mkdirSync(targetDir, { recursive: true });
13
- // Create subagent manifest
14
- const manifest = {
15
- name: 'skill-creator',
16
- version: '2.0.0',
17
- description: 'Claude Code skill creation agent',
18
- main: process.cwd(),
19
- commands: ['search', 'get-name', 'download-context7', 'addSkill'],
20
- };
21
- writeFileSync(join(targetDir, 'manifest.json'), JSON.stringify(manifest, null, 2));
22
- console.log(gradient('green', 'cyan')('\n✅ Skill-creator subagent installed successfully!'));
23
- console.log(`📍 Location: ${targetDir}`);
24
- console.log('💡 This makes skill-creator available in all Claude Code sessions');
25
- }
26
- //# sourceMappingURL=initCc.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"initCc.js","sourceRoot":"","sources":["../../src/commands/initCc.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAElD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAA;IAE7D,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAA;IAErF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAA;IAEvE,qBAAqB;IACrB,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEzC,2BAA2B;IAC3B,MAAM,QAAQ,GAAG;QACf,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,kCAAkC;QAC/C,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE;QACnB,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,UAAU,CAAC;KAClE,CAAA;IAED,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAElF,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,oDAAoD,CAAC,CAAC,CAAA;IAC5F,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAA;IACxC,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAA;AAClF,CAAC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Update Context7 documentation command
3
- */
4
- export declare function updateContext7(args: string[]): Promise<void>;
5
- //# sourceMappingURL=updateContext7.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"updateContext7.d.ts","sourceRoot":"","sources":["../../src/commands/updateContext7.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BlE"}
@@ -1,28 +0,0 @@
1
- /**
2
- * Update Context7 documentation command
3
- */
4
- import { join } from 'node:path';
5
- import { loadSkillConfig, parseArgs, createSearchEngine } from './shared.js';
6
- export async function updateContext7(args) {
7
- const config = loadSkillConfig();
8
- const searchEngine = await createSearchEngine(config);
9
- const { ContentManager } = await import('../core/contentManager.js');
10
- const contentManager = new ContentManager({
11
- searchEngine,
12
- referencesDir: join(process.cwd(), 'assets', 'references'),
13
- });
14
- // Parse arguments
15
- const options = parseArgs(args, [
16
- { name: 'force', type: 'boolean' },
17
- { name: 'project-id', type: 'string' },
18
- ]);
19
- const projectId = options['project-id'] || config.context7LibraryId;
20
- if (!projectId) {
21
- console.error('❌ No Context7 project ID provided');
22
- console.error(' Use --project-id <id> or set context7LibraryId in config.json');
23
- process.exit(1);
24
- }
25
- const result = await contentManager.updateFromContext7(projectId, options.force);
26
- console.log(result.message);
27
- }
28
- //# sourceMappingURL=updateContext7.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"updateContext7.js","sourceRoot":"","sources":["../../src/commands/updateContext7.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAE5E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc;IACjD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAErD,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAA;IAEpE,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC;QACxC,YAAY;QACZ,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC;KAC3D,CAAC,CAAA;IAEF,kBAAkB;IAClB,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE;QAC9B,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;QAClC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE;KACvC,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,iBAAiB,CAAA;IACnE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;QAClD,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAA;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IAEhF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAC7B,CAAC"}
@@ -1,26 +0,0 @@
1
- /**
2
- * 纯本地模式的 ChromaDB 搜索引擎
3
- * 专为 skill-creator 的嵌入式架构设计
4
- */
5
- import type { SearchResult } from './searchAdapter.js';
6
- export interface ChromaLocalOptions {
7
- dbPath: string;
8
- collectionName: string;
9
- }
10
- export declare class ChromaLocalSearchEngine {
11
- private client;
12
- private collection;
13
- private options;
14
- private embeddingFunction;
15
- constructor(options: ChromaLocalOptions);
16
- private initialize;
17
- buildIndex(referencesDir: string, hashFile: string): Promise<void>;
18
- search(query: string, topK?: number, where?: Record<string, unknown>): Promise<SearchResult[]>;
19
- searchByPriority(query: string, topK?: number): Promise<SearchResult[]>;
20
- getStats(): Promise<{
21
- totalDocuments: number;
22
- }>;
23
- private calculateDirectoryHash;
24
- private loadDocumentsFromDirectory;
25
- }
26
- //# sourceMappingURL=chromaLocalSearch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chromaLocalSearch.d.ts","sourceRoot":"","sources":["../../src/core/chromaLocalSearch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,oBAAoB,CAAA;AA0BrE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;CACvB;AAsBD,qBAAa,uBAAuB;IAClC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,iBAAiB,CAAoB;gBAEjC,OAAO,EAAE,kBAAkB;YAKzB,UAAU;IAmClB,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsElE,MAAM,CACV,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,MAAU,EAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,YAAY,EAAE,CAAC;IAuDpB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAI1E,QAAQ,IAAI,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;YAqBvC,sBAAsB;YAQtB,0BAA0B;CAQzC"}
@@ -1,212 +0,0 @@
1
- /**
2
- * 纯本地模式的 ChromaDB 搜索引擎
3
- * 专为 skill-creator 的嵌入式架构设计
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 ChromaLocalSearchEngine {
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
- // 创建本地模式的 ChromaDB 客户端
42
- // 使用 in-memory 模式,然后通过文件系统持久化
43
- this.client = new ChromaClient({
44
- path: 'http://localhost:8000', // 临时使用 HTTP,但会启动本地服务器
45
- });
46
- // 获取或创建集合
47
- try {
48
- // 尝试获取集合,使用我们的嵌入函数
49
- this.collection = await this.client.getCollection({
50
- name: this.options.collectionName,
51
- embeddingFunction: this.embeddingFunction,
52
- });
53
- }
54
- catch (error) {
55
- // 集合不存在,创建新的
56
- this.collection = await this.client.createCollection({
57
- name: this.options.collectionName,
58
- embeddingFunction: this.embeddingFunction,
59
- });
60
- }
61
- return true;
62
- }
63
- catch (error) {
64
- console.log('❌ 初始化本地 ChromaDB 失败:', error instanceof Error ? error.message : String(error));
65
- return false;
66
- }
67
- }
68
- async buildIndex(referencesDir, hashFile) {
69
- const initialized = await this.initialize();
70
- if (!initialized) {
71
- throw new Error('无法初始化 ChromaDB 本地模式');
72
- }
73
- try {
74
- // 计算文件哈希
75
- const currentHash = await this.calculateDirectoryHash(referencesDir);
76
- // 检查是否需要重建索引
77
- let needsRebuild = true;
78
- try {
79
- const savedHash = await readFile(hashFile, 'utf8');
80
- if (savedHash === currentHash) {
81
- console.log('📦 文件未变化,跳过重建索引');
82
- needsRebuild = false;
83
- }
84
- }
85
- catch (error) {
86
- // 哈希文件不存在,需要重建
87
- }
88
- if (!needsRebuild)
89
- return;
90
- console.log('🔧 构建本地 ChromaDB 索引...');
91
- // 清空现有集合
92
- try {
93
- if (this.collection) {
94
- await this.collection.delete();
95
- }
96
- }
97
- catch (error) {
98
- // 集合为空或不存在,忽略错误
99
- }
100
- // 读取并处理文档
101
- const documents = await this.loadDocumentsFromDirectory(referencesDir);
102
- if (documents.length === 0) {
103
- console.log('⚠️ 没有找到文档');
104
- return;
105
- }
106
- // 分批添加文档到 ChromaDB
107
- if (this.collection) {
108
- const batchSize = 10;
109
- for (let i = 0; i < documents.length; i += batchSize) {
110
- const batch = documents.slice(i, i + batchSize);
111
- const ids = batch.map((doc) => doc.id);
112
- const contents = batch.map((doc) => doc.content);
113
- const metadatas = batch.map((doc) => doc.metadata);
114
- await this.collection.add({
115
- ids,
116
- documents: contents,
117
- metadatas: metadatas,
118
- });
119
- }
120
- }
121
- // 保存哈希值
122
- await writeFile(hashFile, currentHash);
123
- console.log(`✅ 构建完成,共处理 ${documents.length} 个文档`);
124
- }
125
- catch (error) {
126
- console.log('❌ 构建索引失败:', error instanceof Error ? error.message : String(error));
127
- throw error;
128
- }
129
- }
130
- async search(query, topK = 5, where) {
131
- const initialized = await this.initialize();
132
- if (!initialized) {
133
- throw new Error('无法初始化 ChromaDB 本地模式');
134
- }
135
- try {
136
- if (!this.collection) {
137
- throw new Error('ChromaDB 集合未初始化');
138
- }
139
- // 构建查询条件
140
- const queryOptions = {
141
- queryTexts: [query],
142
- nResults: topK,
143
- };
144
- if (where) {
145
- queryOptions.where = where;
146
- }
147
- const results = await this.collection.query(queryOptions);
148
- // 转换结果格式
149
- const searchResults = [];
150
- if (results.ids[0] && results.documents[0] && results.metadatas[0]) {
151
- for (let i = 0; i < results.ids[0].length; i++) {
152
- const metadata = results.metadatas[0][i];
153
- searchResults.push({
154
- id: results.ids[0][i],
155
- source: 'context7', // ChromaDB 主要用于 context7 文档
156
- file_path: metadata.filePath || metadata.file_path || 'unknown',
157
- title: metadata.title || '未知文档',
158
- content: results.documents[0][i] || '',
159
- score: results.distances?.[0]?.[i] ? 1 - results.distances[0][i] : 1,
160
- metadata: {
161
- ...metadata,
162
- originalSource: metadata.originalSource,
163
- searchEngine: 'chroma-local',
164
- embeddingDimension: 1536,
165
- similarity: results.distances?.[0]?.[i] || 0,
166
- indexedAt: new Date().toISOString(),
167
- },
168
- });
169
- }
170
- }
171
- return searchResults;
172
- }
173
- catch (error) {
174
- console.log('❌ 本地搜索失败:', error instanceof Error ? error.message : String(error));
175
- throw error;
176
- }
177
- }
178
- async searchByPriority(query, topK = 5) {
179
- return this.search(query, topK);
180
- }
181
- async getStats() {
182
- const initialized = await this.initialize();
183
- if (!initialized) {
184
- return { totalDocuments: 0 };
185
- }
186
- try {
187
- if (!this.collection) {
188
- return { totalDocuments: 0 };
189
- }
190
- const count = await this.collection.count();
191
- return { totalDocuments: count };
192
- }
193
- catch (error) {
194
- console.log('❌ 获取本地统计信息失败:', error instanceof Error ? error.message : String(error));
195
- return { totalDocuments: 0 };
196
- }
197
- }
198
- async calculateDirectoryHash(dirPath) {
199
- const hash = createHash('md5');
200
- // 简化版本:基于目录结构和文件大小计算哈希
201
- // 在实际应用中,这里可以实现更复杂的哈希算法
202
- hash.update(dirPath + Date.now());
203
- return hash.digest('hex');
204
- }
205
- async loadDocumentsFromDirectory(dirPath) {
206
- const documents = [];
207
- // 简化版本:这里应该递归读取目录中的所有文件
208
- // 为了演示,我们假设有一些文件
209
- return documents;
210
- }
211
- }
212
- //# sourceMappingURL=chromaLocalSearch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chromaLocalSearch.js","sourceRoot":"","sources":["../../src/core/chromaLocalSearch.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- /**
2
- * 简化的 ChromaDB 本地搜索引擎
3
- * 根据 Context7 文档实现最简单的用法
4
- */
5
- import type { SearchResult } from './searchAdapter.js';
6
- export interface ChromaLocalSimpleOptions {
7
- collectionName: string;
8
- }
9
- export declare class ChromaLocalSimpleEngine {
10
- private client;
11
- private collection;
12
- private options;
13
- private embeddingFunction;
14
- constructor(options: ChromaLocalSimpleOptions);
15
- private initialize;
16
- buildIndex(referencesDir: string, hashFile: string): Promise<void>;
17
- search(query: string, topK?: number, where?: Record<string, unknown>): Promise<SearchResult[]>;
18
- searchByPriority(query: string, topK?: number): Promise<SearchResult[]>;
19
- getStats(): Promise<{
20
- totalDocuments: number;
21
- }>;
22
- private calculateDirectoryHash;
23
- }
24
- //# sourceMappingURL=chromaLocalSimple.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chromaLocalSimple.d.ts","sourceRoot":"","sources":["../../src/core/chromaLocalSimple.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,oBAAoB,CAAA;AAyBrE,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,MAAM,CAAA;CACvB;AAUD,qBAAa,uBAAuB;IAClC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,iBAAiB,CAAoB;gBAEjC,OAAO,EAAE,wBAAwB;YAK/B,UAAU;IAiClB,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0FlE,MAAM,CACV,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,MAAU,EAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,YAAY,EAAE,CAAC;IAkDpB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAI1E,QAAQ,IAAI,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;YAkBvC,sBAAsB;CAKrC"}
@@ -1,216 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"chromaLocalSimple.js","sourceRoot":"","sources":["../../src/core/chromaLocalSimple.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAkC,MAAM,UAAU,CAAA;AAEvE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC;;GAEG;AACH,MAAM,uBAAuB;IAC3B,KAAK,CAAC,QAAQ,CAAC,KAAe;QAC5B,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACtB,kBAAkB;YAClB,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC5D,MAAM,MAAM,GAAa,EAAE,CAAA;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAA;YACpD,CAAC;YACD,4BAA4B;YAC5B,OAAO,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAChB,CAAC;YACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AAcD,MAAM,OAAO,uBAAuB;IAC1B,MAAM,GAAwB,IAAI,CAAA;IAClC,UAAU,GAAsB,IAAI,CAAA;IACpC,OAAO,CAA0B;IACjC,iBAAiB,CAAoB;IAE7C,YAAY,OAAiC;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,iBAAiB,GAAG,IAAI,uBAAuB,EAAE,CAAA;IACxD,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QAE5B,IAAI,CAAC;YACH,kBAAkB;YAClB,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,EAAE,CAAA;YAEhC,UAAU;YACV,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;oBAChD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;oBACjC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;iBAC1C,CAAC,CAAA;gBACF,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;YACzD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,aAAa;gBACb,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;oBACnD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;oBACjC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;iBAC1C,CAAC,CAAA;gBACF,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;YACxD,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CACT,oBAAoB,EACpB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAA;YACD,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,aAAqB,EAAE,QAAgB;QACtD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QAC3C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACnC,CAAC;QAED,IAAI,CAAC;YACH,SAAS;YACT,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAA;YAEpE,aAAa;YACb,IAAI,YAAY,GAAG,IAAI,CAAA;YACvB,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;gBAClD,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;oBAC9B,YAAY,GAAG,KAAK,CAAA;gBACtB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,eAAe;YACjB,CAAC;YAED,IAAI,CAAC,YAAY;gBAAE,OAAM;YAEzB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;YAEnC,SAAS;YACT,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAA;gBAChC,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,YAAY;YACd,CAAC;YAED,SAAS;YACT,MAAM,SAAS,GAAG;gBAChB;oBACE,EAAE,EAAE,MAAM;oBACV,OAAO,EAAE,mDAAmD;oBAC5D,QAAQ,EAAE;wBACR,KAAK,EAAE,eAAe;wBACtB,MAAM,EAAE,UAAU;wBAClB,QAAQ,EAAE,sBAAsB;qBACjC;iBACF;gBACD;oBACE,EAAE,EAAE,MAAM;oBACV,OAAO,EAAE,kDAAkD;oBAC3D,QAAQ,EAAE;wBACR,KAAK,EAAE,UAAU;wBACjB,MAAM,EAAE,UAAU;wBAClB,QAAQ,EAAE,gBAAgB;qBAC3B;iBACF;gBACD;oBACE,EAAE,EAAE,MAAM;oBACV,OAAO,EAAE,sDAAsD;oBAC/D,QAAQ,EAAE;wBACR,KAAK,EAAE,gBAAgB;wBACvB,MAAM,EAAE,UAAU;wBAClB,QAAQ,EAAE,kBAAkB;qBAC7B;iBACF;aACF,CAAA;YAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;gBACzB,OAAM;YACR,CAAC;YAED,UAAU;YACV,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBACxB,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;oBAC5C,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAgD;iBAC7F,CAAC,CAAA;YACJ,CAAC;YAED,QAAQ;YACR,MAAM,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;YAEtC,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,CAAC,MAAM,MAAM,CAAC,CAAA;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YAChF,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CACV,KAAa,EACb,OAAe,CAAC,EAChB,KAA+B;QAE/B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QAC3C,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACnC,CAAC;QAED,IAAI,CAAC;YACH,SAAS;YACT,MAAM,YAAY,GAAQ;gBACxB,UAAU,EAAE,CAAC,KAAK,CAAC;gBACnB,QAAQ,EAAE,IAAI;aACf,CAAA;YAED,IAAI,KAAK,EAAE,CAAC;gBACV,YAAY,CAAC,KAAK,GAAG,KAAK,CAAA;YAC5B,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;YAEzD,SAAS;YACT,MAAM,aAAa,GAAmB,EAAE,CAAA;YAExC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAqB,CAAA;oBAC5D,aAAa,CAAC,IAAI,CAAC;wBACjB,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACrB,MAAM,EAAE,UAAU;wBAClB,SAAS,EAAE,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,IAAI,SAAS;wBAC/D,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,MAAM;wBAC/B,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;wBACtC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACpE,QAAQ,EAAE;4BACR,GAAG,QAAQ;4BACX,YAAY,EAAE,qBAAqB;4BACnC,kBAAkB,EAAE,IAAI;4BACxB,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;4BAC5C,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;yBACpC;qBACF,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YAED,OAAO,aAAa,CAAA;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YAC9E,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAAa,EAAE,OAAe,CAAC;QACpD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QAC3C,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrC,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,CAAA;QAC9B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;YAC3C,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,CAAA;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CACT,aAAa,EACb,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAA;YACD,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,CAAA;QAC9B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,OAAe;QAClD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;QAC9B,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;CACF"}
@@ -1,29 +0,0 @@
1
- /**
2
- * 优化后的 ChromaDB-based search engine with local file storage support
3
- */
4
- import type { SearchResult } from '../types/index.js';
5
- export interface ChromaSearchOptions {
6
- dbPath: string;
7
- collectionName: string;
8
- mode?: 'http' | 'local' | 'auto';
9
- }
10
- export declare class ChromaSearchEngine {
11
- private client;
12
- private collection;
13
- private options;
14
- private embeddingFunction;
15
- private mode;
16
- constructor(options: ChromaSearchOptions);
17
- private initializeEmbeddingFunction;
18
- private initializeClient;
19
- private getCollection;
20
- private initializeIfNeeded;
21
- buildIndex(referencesDir: string, hashFile: string): Promise<void>;
22
- search(query: string, topK?: number, where?: Record<string, any>): Promise<SearchResult[]>;
23
- searchByPriority(query: string, topK?: number): Promise<SearchResult[]>;
24
- getStats(): Promise<{
25
- totalDocuments: number;
26
- }>;
27
- private splitIntoSections;
28
- }
29
- //# sourceMappingURL=chromaSearchImproved.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chromaSearchImproved.d.ts","sourceRoot":"","sources":["../../src/core/chromaSearchImproved.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;CACjC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,iBAAiB,CAAwC;IACjE,OAAO,CAAC,IAAI,CAA2B;gBAE3B,OAAO,EAAE,mBAAmB;YAO1B,2BAA2B;YAO3B,gBAAgB;YAyDhB,aAAa;YAkBb,kBAAkB;IAgB1B,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqFlE,MAAM,CACV,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,MAAU,EAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,OAAO,CAAC,YAAY,EAAE,CAAC;IAiCpB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAI1E,QAAQ,IAAI,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IAarD,OAAO,CAAC,iBAAiB;CAuC1B"}