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.
- package/README.md +14 -5
- package/dist/cli.d.ts +1 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +30 -29
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.js +2 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/core/chromaSearch.d.ts +2 -2
- package/dist/core/chromaSearch.d.ts.map +1 -1
- package/dist/core/chromaSearch.js +11 -9
- package/dist/core/chromaSearch.js.map +1 -1
- package/dist/core/skillCreator.d.ts +2 -2
- package/dist/core/skillCreator.d.ts.map +1 -1
- package/dist/core/skillCreator.js +39 -116
- package/dist/core/skillCreator.js.map +1 -1
- package/dist/core/templateManager.d.ts +2 -1
- package/dist/core/templateManager.d.ts.map +1 -1
- package/dist/core/templateManager.js +19 -13
- package/dist/core/templateManager.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/SKILL.md +193 -0
- package/templates/SKILL.zh-CN.md +193 -0
- package/templates/skill-creator.md +6 -4
- package/templates/skill-creator.zh-CN.md +9 -4
- package/dist/commands/initCc.d.ts +0 -5
- package/dist/commands/initCc.d.ts.map +0 -1
- package/dist/commands/initCc.js +0 -26
- package/dist/commands/initCc.js.map +0 -1
- package/dist/commands/updateContext7.d.ts +0 -5
- package/dist/commands/updateContext7.d.ts.map +0 -1
- package/dist/commands/updateContext7.js +0 -28
- package/dist/commands/updateContext7.js.map +0 -1
- package/dist/core/chromaLocalSearch.d.ts +0 -26
- package/dist/core/chromaLocalSearch.d.ts.map +0 -1
- package/dist/core/chromaLocalSearch.js +0 -212
- package/dist/core/chromaLocalSearch.js.map +0 -1
- package/dist/core/chromaLocalSimple.d.ts +0 -24
- package/dist/core/chromaLocalSimple.d.ts.map +0 -1
- package/dist/core/chromaLocalSimple.js +0 -216
- package/dist/core/chromaLocalSimple.js.map +0 -1
- package/dist/core/chromaSearchImproved.d.ts +0 -29
- package/dist/core/chromaSearchImproved.d.ts.map +0 -1
- package/dist/core/chromaSearchImproved.js +0 -259
- package/dist/core/chromaSearchImproved.js.map +0 -1
- package/dist/core/fuseSearch.d.ts +0 -25
- package/dist/core/fuseSearch.d.ts.map +0 -1
- package/dist/core/fuseSearch.js +0 -198
- package/dist/core/fuseSearch.js.map +0 -1
- package/dist/core/fuzzySearch.d.ts +0 -66
- package/dist/core/fuzzySearch.d.ts.map +0 -1
- package/dist/core/fuzzySearch.js +0 -271
- package/dist/core/fuzzySearch.js.map +0 -1
- package/dist/core/searchEngine.d.ts +0 -25
- package/dist/core/searchEngine.d.ts.map +0 -1
- package/dist/core/searchEngine.js +0 -198
- package/dist/core/searchEngine.js.map +0 -1
- package/dist/core/simpleLocalSearch.d.ts +0 -50
- package/dist/core/simpleLocalSearch.d.ts.map +0 -1
- package/dist/core/simpleLocalSearch.js +0 -406
- package/dist/core/simpleLocalSearch.js.map +0 -1
- package/dist/core/simpleSearch.d.ts +0 -21
- package/dist/core/simpleSearch.d.ts.map +0 -1
- package/dist/core/simpleSearch.js +0 -113
- package/dist/core/simpleSearch.js.map +0 -1
- package/dist/test/testFuzzy.d.ts +0 -3
- package/dist/test/testFuzzy.d.ts.map +0 -1
- package/dist/test/testFuzzy.js +0 -72
- package/dist/test/testFuzzy.js.map +0 -1
- package/dist/test-fuzzy.d.ts +0 -6
- package/dist/test-fuzzy.d.ts.map +0 -1
- package/dist/test-fuzzy.js +0 -65
- package/dist/test-fuzzy.js.map +0 -1
|
@@ -1,406 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 简化的本地搜索引擎
|
|
3
|
-
* 模拟 ChromaDB 的本地存储功能,但完全基于文件系统
|
|
4
|
-
* 专为 skill-creator 的嵌入式架构设计
|
|
5
|
-
*/
|
|
6
|
-
import { readFile, writeFile, mkdir, readdir } from 'node:fs/promises';
|
|
7
|
-
import { join, dirname, extname } from 'node:path';
|
|
8
|
-
import { createHash } from 'node:crypto';
|
|
9
|
-
/**
|
|
10
|
-
* 简单的嵌入函数,基于文本哈希生成固定长度向量
|
|
11
|
-
*/
|
|
12
|
-
class SimpleEmbeddingFunction {
|
|
13
|
-
async generate(texts) {
|
|
14
|
-
return texts.map((text) => {
|
|
15
|
-
// 基于文本内容生成简单的嵌入向量
|
|
16
|
-
const hash = createHash('sha256').update(text).digest('hex');
|
|
17
|
-
const vector = [];
|
|
18
|
-
for (let i = 0; i < hash.length; i += 2) {
|
|
19
|
-
vector.push(parseInt(hash.substr(i, 2), 16) / 255);
|
|
20
|
-
}
|
|
21
|
-
// 确保向量长度为1536(标准OpenAI嵌入维度)
|
|
22
|
-
while (vector.length < 1536) {
|
|
23
|
-
vector.push(0);
|
|
24
|
-
}
|
|
25
|
-
return vector.slice(0, 1536);
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* 计算余弦相似度
|
|
31
|
-
*/
|
|
32
|
-
function cosineSimilarity(a, b) {
|
|
33
|
-
if (a.length !== b.length)
|
|
34
|
-
return 0;
|
|
35
|
-
let dotProduct = 0;
|
|
36
|
-
let normA = 0;
|
|
37
|
-
let normB = 0;
|
|
38
|
-
for (let i = 0; i < a.length; i++) {
|
|
39
|
-
dotProduct += a[i] * b[i];
|
|
40
|
-
normA += a[i] * a[i];
|
|
41
|
-
normB += b[i] * b[i];
|
|
42
|
-
}
|
|
43
|
-
normA = Math.sqrt(normA);
|
|
44
|
-
normB = Math.sqrt(normB);
|
|
45
|
-
if (normA === 0 || normB === 0)
|
|
46
|
-
return 0;
|
|
47
|
-
return dotProduct / (normA * normB);
|
|
48
|
-
}
|
|
49
|
-
export class SimpleLocalSearchEngine {
|
|
50
|
-
options;
|
|
51
|
-
embeddingFunction;
|
|
52
|
-
collectionData = null;
|
|
53
|
-
dataFile;
|
|
54
|
-
constructor(options) {
|
|
55
|
-
this.options = options;
|
|
56
|
-
this.embeddingFunction = new SimpleEmbeddingFunction();
|
|
57
|
-
this.dataFile = join(options.dbPath, `${options.collectionName}.json`);
|
|
58
|
-
}
|
|
59
|
-
async ensureDirectory() {
|
|
60
|
-
try {
|
|
61
|
-
await mkdir(dirname(this.dataFile), { recursive: true });
|
|
62
|
-
}
|
|
63
|
-
catch (error) {
|
|
64
|
-
// 目录已存在,忽略错误
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
async loadCollection() {
|
|
68
|
-
try {
|
|
69
|
-
const data = await readFile(this.dataFile, 'utf8');
|
|
70
|
-
this.collectionData = JSON.parse(data);
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
// 文件不存在或损坏,创建新的集合
|
|
74
|
-
this.collectionData = {
|
|
75
|
-
documents: [],
|
|
76
|
-
lastIndex: 0,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
async saveCollection() {
|
|
81
|
-
if (this.collectionData) {
|
|
82
|
-
await writeFile(this.dataFile, JSON.stringify(this.collectionData, null, 2));
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
async initialize() {
|
|
86
|
-
try {
|
|
87
|
-
await this.ensureDirectory();
|
|
88
|
-
await this.loadCollection();
|
|
89
|
-
return true;
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
console.log('❌ 初始化本地搜索引擎失败:', error instanceof Error ? error.message : String(error));
|
|
93
|
-
return false;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
async buildIndex(referencesDir, hashFile) {
|
|
97
|
-
const initialized = await this.initialize();
|
|
98
|
-
if (!initialized) {
|
|
99
|
-
throw new Error('无法初始化本地搜索引擎');
|
|
100
|
-
}
|
|
101
|
-
try {
|
|
102
|
-
// 计算文件哈希
|
|
103
|
-
const currentHash = await this.calculateDirectoryHash(referencesDir);
|
|
104
|
-
// 检查是否需要重建索引
|
|
105
|
-
let needsRebuild = true;
|
|
106
|
-
try {
|
|
107
|
-
const savedHash = await readFile(hashFile, 'utf8');
|
|
108
|
-
if (savedHash === currentHash) {
|
|
109
|
-
console.log('📦 文件未变化,跳过重建索引');
|
|
110
|
-
needsRebuild = false;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
catch (error) {
|
|
114
|
-
// 哈希文件不存在,需要重建
|
|
115
|
-
}
|
|
116
|
-
if (!needsRebuild)
|
|
117
|
-
return;
|
|
118
|
-
console.log('🔧 构建本地搜索索引...');
|
|
119
|
-
// 清空现有集合
|
|
120
|
-
if (this.collectionData) {
|
|
121
|
-
this.collectionData.documents = [];
|
|
122
|
-
this.collectionData.lastIndex = 0;
|
|
123
|
-
}
|
|
124
|
-
// 读取并处理文档
|
|
125
|
-
const documents = await this.loadDocumentsFromDirectory(referencesDir);
|
|
126
|
-
if (documents.length === 0) {
|
|
127
|
-
console.log('⚠️ 没有找到文档');
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
// 添加文档到集合
|
|
131
|
-
if (this.collectionData) {
|
|
132
|
-
for (const doc of documents) {
|
|
133
|
-
this.collectionData.documents.push(doc);
|
|
134
|
-
this.collectionData.lastIndex++;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
// 保存数据
|
|
138
|
-
await this.saveCollection();
|
|
139
|
-
await writeFile(hashFile, currentHash);
|
|
140
|
-
console.log(`✅ 构建完成,共处理 ${documents.length} 个文档`);
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
console.log('❌ 构建索引失败:', error instanceof Error ? error.message : String(error));
|
|
144
|
-
throw error;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
async search(query, topK = 5, where) {
|
|
148
|
-
const initialized = await this.initialize();
|
|
149
|
-
if (!initialized || !this.collectionData) {
|
|
150
|
-
throw new Error('无法初始化本地搜索引擎');
|
|
151
|
-
}
|
|
152
|
-
try {
|
|
153
|
-
// 生成查询嵌入
|
|
154
|
-
const queryEmbeddings = await this.embeddingFunction.generate([query]);
|
|
155
|
-
const queryEmbedding = queryEmbeddings[0];
|
|
156
|
-
// 计算相似度
|
|
157
|
-
const scoredDocuments = this.collectionData.documents.map((doc) => ({
|
|
158
|
-
doc,
|
|
159
|
-
score: cosineSimilarity(queryEmbedding, doc.embedding),
|
|
160
|
-
}));
|
|
161
|
-
// 过滤和排序
|
|
162
|
-
let filteredDocs = scoredDocs;
|
|
163
|
-
if (where) {
|
|
164
|
-
// 简单的 where 过滤实现
|
|
165
|
-
filteredDocs = scoredDocs.filter(({ doc }) => {
|
|
166
|
-
for (const [key, value] of Object.entries(where)) {
|
|
167
|
-
if (doc.metadata[key] !== value) {
|
|
168
|
-
return false;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
return true;
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
// 按相似度排序
|
|
175
|
-
filteredDocs.sort((a, b) => b.score - a.score);
|
|
176
|
-
// 转换为 SearchResult 格式
|
|
177
|
-
const searchResults = filteredDocs.slice(0, topK).map(({ doc, score }) => ({
|
|
178
|
-
id: doc.id,
|
|
179
|
-
source: 'context7', // 本地搜索主要用于 context7 文档
|
|
180
|
-
file_path: doc.metadata.filePath || doc.metadata.file_path || 'unknown',
|
|
181
|
-
title: doc.metadata.title || '未知文档',
|
|
182
|
-
content: doc.content,
|
|
183
|
-
score,
|
|
184
|
-
metadata: {
|
|
185
|
-
...doc.metadata,
|
|
186
|
-
searchEngine: 'simple-local',
|
|
187
|
-
embeddingDimension: 1536,
|
|
188
|
-
similarity: score,
|
|
189
|
-
indexedAt: new Date().toISOString(),
|
|
190
|
-
},
|
|
191
|
-
}));
|
|
192
|
-
return searchResults;
|
|
193
|
-
}
|
|
194
|
-
catch (error) {
|
|
195
|
-
console.log('❌ 本地搜索失败:', error instanceof Error ? error.message : String(error));
|
|
196
|
-
throw error;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
async searchByPriority(query, topK = 5) {
|
|
200
|
-
return this.search(query, topK);
|
|
201
|
-
}
|
|
202
|
-
async getStats() {
|
|
203
|
-
const initialized = await this.initialize();
|
|
204
|
-
if (!initialized || !this.collectionData) {
|
|
205
|
-
return { totalDocuments: 0 };
|
|
206
|
-
}
|
|
207
|
-
try {
|
|
208
|
-
return { totalDocuments: this.collectionData.documents.length };
|
|
209
|
-
}
|
|
210
|
-
catch (error) {
|
|
211
|
-
console.log('❌ 获取本地统计信息失败:', error instanceof Error ? error.message : String(error));
|
|
212
|
-
return { totalDocuments: 0 };
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
async calculateDirectoryHash(dirPath) {
|
|
216
|
-
const hash = createHash('md5');
|
|
217
|
-
hash.update(dirPath + Date.now());
|
|
218
|
-
return hash.digest('hex');
|
|
219
|
-
}
|
|
220
|
-
async loadDocumentsFromDirectory(dirPath) {
|
|
221
|
-
const documents = [];
|
|
222
|
-
try {
|
|
223
|
-
// 递归读取目录中的所有文件
|
|
224
|
-
const files = await this.getAllFiles(dirPath);
|
|
225
|
-
const supportedExtensions = [
|
|
226
|
-
'.md',
|
|
227
|
-
'.txt',
|
|
228
|
-
'.js',
|
|
229
|
-
'.ts',
|
|
230
|
-
'.jsx',
|
|
231
|
-
'.tsx',
|
|
232
|
-
'.py',
|
|
233
|
-
'.java',
|
|
234
|
-
'.cpp',
|
|
235
|
-
'.c',
|
|
236
|
-
'.go',
|
|
237
|
-
'.rs',
|
|
238
|
-
];
|
|
239
|
-
// 过滤支持的文件类型
|
|
240
|
-
const validFiles = files.filter((file) => supportedExtensions.includes(extname(file).toLowerCase()));
|
|
241
|
-
if (validFiles.length === 0) {
|
|
242
|
-
console.log('⚠️ 没有找到支持的文档文件');
|
|
243
|
-
return documents;
|
|
244
|
-
}
|
|
245
|
-
console.log(`📄 找到 ${validFiles.length} 个文档文件`);
|
|
246
|
-
// 读取文件内容并生成文档
|
|
247
|
-
const contents = [];
|
|
248
|
-
const metadatas = [];
|
|
249
|
-
for (const filePath of validFiles) {
|
|
250
|
-
try {
|
|
251
|
-
const content = await readFile(filePath, 'utf8');
|
|
252
|
-
if (content.trim().length > 0) {
|
|
253
|
-
contents.push(content);
|
|
254
|
-
const relativePath = filePath.replace(dirPath, '').replace(/^\//, '');
|
|
255
|
-
const title = this.extractTitleFromContent(content) || this.generateTitleFromPath(relativePath);
|
|
256
|
-
metadatas.push({
|
|
257
|
-
title,
|
|
258
|
-
filePath: relativePath,
|
|
259
|
-
originalSource: 'filesystem',
|
|
260
|
-
size: content.length,
|
|
261
|
-
extension: extname(filePath).toLowerCase(),
|
|
262
|
-
indexedAt: new Date().toISOString(),
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
catch (error) {
|
|
267
|
-
console.log(`⚠️ 无法读取文件 ${filePath}:`, error instanceof Error ? error.message : String(error));
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
if (contents.length === 0) {
|
|
271
|
-
console.log('⚠️ 没有找到有效的文档内容');
|
|
272
|
-
return documents;
|
|
273
|
-
}
|
|
274
|
-
// 生成嵌入向量
|
|
275
|
-
console.log('🔢 生成文档嵌入向量...');
|
|
276
|
-
const embeddings = await this.embeddingFunction.generate(contents);
|
|
277
|
-
// 创建完整的文档对象
|
|
278
|
-
const loadedDocs = contents.map((content, index) => ({
|
|
279
|
-
id: this.generateDocumentId(metadatas[index].filePath),
|
|
280
|
-
content,
|
|
281
|
-
metadata: metadatas[index],
|
|
282
|
-
embedding: embeddings[index],
|
|
283
|
-
}));
|
|
284
|
-
documents.push(...loadedDocs);
|
|
285
|
-
console.log(`✅ 成功加载 ${documents.length} 个文档`);
|
|
286
|
-
}
|
|
287
|
-
catch (error) {
|
|
288
|
-
console.log('❌ 加载文档失败:', error instanceof Error ? error.message : String(error));
|
|
289
|
-
// 回退到示例文档
|
|
290
|
-
console.log('🔄 使用示例文档作为回退');
|
|
291
|
-
const fallbackDocs = await this.createSampleDocuments();
|
|
292
|
-
documents.push(...fallbackDocs);
|
|
293
|
-
}
|
|
294
|
-
return documents;
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* 递归获取目录中的所有文件
|
|
298
|
-
*/
|
|
299
|
-
async getAllFiles(dirPath) {
|
|
300
|
-
const files = [];
|
|
301
|
-
try {
|
|
302
|
-
const entries = await readdir(dirPath, { withFileTypes: true });
|
|
303
|
-
for (const entry of entries) {
|
|
304
|
-
const fullPath = join(dirPath, entry.name);
|
|
305
|
-
if (entry.isDirectory()) {
|
|
306
|
-
// 递归处理子目录
|
|
307
|
-
const subFiles = await this.getAllFiles(fullPath);
|
|
308
|
-
files.push(...subFiles);
|
|
309
|
-
}
|
|
310
|
-
else if (entry.isFile()) {
|
|
311
|
-
// 添加文件
|
|
312
|
-
files.push(fullPath);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
catch (error) {
|
|
317
|
-
console.log(`⚠️ 无法读取目录 ${dirPath}:`, error instanceof Error ? error.message : String(error));
|
|
318
|
-
}
|
|
319
|
-
return files;
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* 从内容中提取标题
|
|
323
|
-
*/
|
|
324
|
-
extractTitleFromContent(content) {
|
|
325
|
-
const lines = content.split('\n');
|
|
326
|
-
// 查找第一个 Markdown 标题
|
|
327
|
-
for (const line of lines) {
|
|
328
|
-
const trimmedLine = line.trim();
|
|
329
|
-
if (trimmedLine.startsWith('# ')) {
|
|
330
|
-
return trimmedLine.replace(/^#\s+/, '').trim();
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
// 查找文件开头的注释或字符串字面量
|
|
334
|
-
const firstLine = lines[0]?.trim();
|
|
335
|
-
if (firstLine &&
|
|
336
|
-
(firstLine.startsWith('//') || firstLine.startsWith('#') || firstLine.startsWith('/*'))) {
|
|
337
|
-
return firstLine
|
|
338
|
-
.replace(/^(\/\/|#|\/\*)\s*/, '')
|
|
339
|
-
.replace(/\s*\*?\/?$/, '')
|
|
340
|
-
.trim();
|
|
341
|
-
}
|
|
342
|
-
return null;
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* 从文件路径生成标题
|
|
346
|
-
*/
|
|
347
|
-
generateTitleFromPath(filePath) {
|
|
348
|
-
const fileName = filePath.split('/').pop() || filePath;
|
|
349
|
-
const nameWithoutExt = fileName.replace(/\.[^/.]+$/, '');
|
|
350
|
-
return nameWithoutExt.replace(/[-_]/g, ' ').replace(/\b\w/g, (l) => l.toUpperCase());
|
|
351
|
-
}
|
|
352
|
-
/**
|
|
353
|
-
* 生成文档ID
|
|
354
|
-
*/
|
|
355
|
-
generateDocumentId(filePath) {
|
|
356
|
-
const hash = createHash('md5').update(filePath).digest('hex').substring(0, 8);
|
|
357
|
-
const sanitizedPath = filePath.replace(/[^a-zA-Z0-9]/g, '_').substring(0, 50);
|
|
358
|
-
return `${sanitizedPath}_${hash}`;
|
|
359
|
-
}
|
|
360
|
-
/**
|
|
361
|
-
* 创建示例文档(回退方案)
|
|
362
|
-
*/
|
|
363
|
-
async createSampleDocuments() {
|
|
364
|
-
const sampleContents = [
|
|
365
|
-
'TypeScript 是 JavaScript 的超集,添加了静态类型支持。接口定义了对象的形状契约。',
|
|
366
|
-
'React 是一个用于构建用户界面的 JavaScript 库,组件是 React 的核心概念。',
|
|
367
|
-
'Node.js 允许在服务器端运行 JavaScript 代码,模块系统是 Node.js 的重要特性。',
|
|
368
|
-
];
|
|
369
|
-
const sampleMetadatas = [
|
|
370
|
-
{
|
|
371
|
-
title: 'TypeScript 基础',
|
|
372
|
-
filePath: 'typescript-basics.md',
|
|
373
|
-
originalSource: 'sample',
|
|
374
|
-
size: sampleContents[0].length,
|
|
375
|
-
extension: '.md',
|
|
376
|
-
indexedAt: new Date().toISOString(),
|
|
377
|
-
},
|
|
378
|
-
{
|
|
379
|
-
title: 'React 介绍',
|
|
380
|
-
filePath: 'react-intro.md',
|
|
381
|
-
originalSource: 'sample',
|
|
382
|
-
size: sampleContents[1].length,
|
|
383
|
-
extension: '.md',
|
|
384
|
-
indexedAt: new Date().toISOString(),
|
|
385
|
-
},
|
|
386
|
-
{
|
|
387
|
-
title: 'Node.js 服务器端开发',
|
|
388
|
-
filePath: 'nodejs-server.md',
|
|
389
|
-
originalSource: 'sample',
|
|
390
|
-
size: sampleContents[2].length,
|
|
391
|
-
extension: '.md',
|
|
392
|
-
indexedAt: new Date().toISOString(),
|
|
393
|
-
},
|
|
394
|
-
];
|
|
395
|
-
// 生成嵌入向量
|
|
396
|
-
const embeddings = await this.embeddingFunction.generate(sampleContents);
|
|
397
|
-
// 创建完整的文档对象
|
|
398
|
-
return sampleContents.map((content, index) => ({
|
|
399
|
-
id: `sample_${index + 1}`,
|
|
400
|
-
content,
|
|
401
|
-
metadata: sampleMetadatas[index],
|
|
402
|
-
embedding: embeddings[index],
|
|
403
|
-
}));
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
//# sourceMappingURL=simpleLocalSearch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"simpleLocalSearch.js","sourceRoot":"","sources":["../../src/core/simpleLocalSearch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Simple search engine implementation (without ChromaDB)
|
|
3
|
-
*/
|
|
4
|
-
import type { SearchResult } from '../types/index.js';
|
|
5
|
-
export interface SimpleSearchOptions {
|
|
6
|
-
referencesDir: string;
|
|
7
|
-
collectionName: string;
|
|
8
|
-
}
|
|
9
|
-
export declare class SimpleSearchEngine {
|
|
10
|
-
private options;
|
|
11
|
-
private documents;
|
|
12
|
-
constructor(options: SimpleSearchOptions);
|
|
13
|
-
buildIndex(referencesDir: string, hashFile: string): Promise<void>;
|
|
14
|
-
search(query: string, topK?: number, where?: Record<string, any>): Promise<SearchResult[]>;
|
|
15
|
-
searchByPriority(query: string, topK?: number): Promise<SearchResult[]>;
|
|
16
|
-
getStats(): Promise<{
|
|
17
|
-
totalDocuments: number;
|
|
18
|
-
}>;
|
|
19
|
-
private splitIntoSections;
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=simpleSearch.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"simpleSearch.d.ts","sourceRoot":"","sources":["../../src/core/simpleSearch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,SAAS,CAOV;gBAEK,OAAO,EAAE,mBAAmB;IAIlC,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4ClE,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;IAqCpB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAY1E,QAAQ,IAAI,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IAIrD,OAAO,CAAC,iBAAiB;CA2B1B"}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Simple search engine implementation (without ChromaDB)
|
|
3
|
-
*/
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { readFileSync } from 'node:fs';
|
|
6
|
-
import { glob } from 'glob';
|
|
7
|
-
export class SimpleSearchEngine {
|
|
8
|
-
options;
|
|
9
|
-
documents = [];
|
|
10
|
-
constructor(options) {
|
|
11
|
-
this.options = options;
|
|
12
|
-
}
|
|
13
|
-
async buildIndex(referencesDir, hashFile) {
|
|
14
|
-
console.log('Building simple search index...');
|
|
15
|
-
// Get all markdown files
|
|
16
|
-
const files = await glob('**/*.md', { cwd: referencesDir });
|
|
17
|
-
if (files.length === 0) {
|
|
18
|
-
console.log('No documentation files found to index');
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
console.log(`Indexing ${files.length} documents...`);
|
|
22
|
-
// Load all documents
|
|
23
|
-
this.documents = [];
|
|
24
|
-
for (const file of files) {
|
|
25
|
-
const content = readFileSync(join(referencesDir, file), 'utf-8');
|
|
26
|
-
const sections = this.splitIntoSections(content);
|
|
27
|
-
for (let i = 0; i < sections.length; i++) {
|
|
28
|
-
const section = sections[i];
|
|
29
|
-
const source = file.includes('context7/') ? 'context7' : 'user';
|
|
30
|
-
this.documents.push({
|
|
31
|
-
id: `${file}_${i}`,
|
|
32
|
-
title: section.title,
|
|
33
|
-
content: section.content,
|
|
34
|
-
source,
|
|
35
|
-
file_path: file,
|
|
36
|
-
metadata: {
|
|
37
|
-
source,
|
|
38
|
-
file_path: file,
|
|
39
|
-
section_index: i,
|
|
40
|
-
title: section.title,
|
|
41
|
-
priority: source === 'user' ? 10 : 1,
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
console.log(`✅ Indexed ${this.documents.length} sections from ${files.length} files`);
|
|
47
|
-
}
|
|
48
|
-
async search(query, topK = 5, where) {
|
|
49
|
-
let results = this.documents;
|
|
50
|
-
// Filter by source if specified
|
|
51
|
-
if (where?.source) {
|
|
52
|
-
results = results.filter(doc => doc.source === where.source);
|
|
53
|
-
}
|
|
54
|
-
// Simple text matching search
|
|
55
|
-
const queryTerms = query.toLowerCase().split(/\s+/);
|
|
56
|
-
const scoredResults = results.map(doc => {
|
|
57
|
-
const content = doc.content.toLowerCase();
|
|
58
|
-
const title = doc.title.toLowerCase();
|
|
59
|
-
let score = 0;
|
|
60
|
-
for (const term of queryTerms) {
|
|
61
|
-
if (title.includes(term)) {
|
|
62
|
-
score += 10; // Title matches are worth more
|
|
63
|
-
}
|
|
64
|
-
if (content.includes(term)) {
|
|
65
|
-
score += 1;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return {
|
|
69
|
-
...doc,
|
|
70
|
-
score: score / queryTerms.length // Normalize score
|
|
71
|
-
};
|
|
72
|
-
});
|
|
73
|
-
// Sort by score and take top K
|
|
74
|
-
return scoredResults
|
|
75
|
-
.filter(r => r.score > 0)
|
|
76
|
-
.sort((a, b) => b.score - a.score)
|
|
77
|
-
.slice(0, topK);
|
|
78
|
-
}
|
|
79
|
-
async searchByPriority(query, topK = 5) {
|
|
80
|
-
// First try user content, then context7
|
|
81
|
-
const userResults = await this.search(query, topK, { source: 'user' });
|
|
82
|
-
const contextResults = await this.search(query, topK - userResults.length, { source: 'context7' });
|
|
83
|
-
return [...userResults, ...contextResults].slice(0, topK);
|
|
84
|
-
}
|
|
85
|
-
async getStats() {
|
|
86
|
-
return { totalDocuments: this.documents.length };
|
|
87
|
-
}
|
|
88
|
-
splitIntoSections(content) {
|
|
89
|
-
const sections = [];
|
|
90
|
-
const lines = content.split('\n');
|
|
91
|
-
let currentSection = { title: 'Introduction', content: '' };
|
|
92
|
-
for (const line of lines) {
|
|
93
|
-
const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
|
|
94
|
-
if (headingMatch) {
|
|
95
|
-
if (currentSection.content.trim()) {
|
|
96
|
-
sections.push({ ...currentSection });
|
|
97
|
-
}
|
|
98
|
-
currentSection = {
|
|
99
|
-
title: headingMatch[2],
|
|
100
|
-
content: '',
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
currentSection.content += line + '\n';
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
if (currentSection.content.trim()) {
|
|
108
|
-
sections.push(currentSection);
|
|
109
|
-
}
|
|
110
|
-
return sections.filter(s => s.content.trim().length > 50);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
//# sourceMappingURL=simpleSearch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"simpleSearch.js","sourceRoot":"","sources":["../../src/core/simpleSearch.ts"],"names":[],"mappings":"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"}
|
package/dist/test/testFuzzy.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testFuzzy.d.ts","sourceRoot":"","sources":["../../src/test/testFuzzy.ts"],"names":[],"mappings":""}
|
package/dist/test/testFuzzy.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
import uFuzzy from '@leeoniya/ufuzzy';
|
|
3
|
-
/**
|
|
4
|
-
* Test script to verify uFuzzy behavior and debug issues
|
|
5
|
-
*/
|
|
6
|
-
function testBasicFuzzySearch() {
|
|
7
|
-
console.log('🧪 Testing basic uFuzzy behavior...\n');
|
|
8
|
-
const haystack = ['My Note', 'My Love', 'Another Document', 'Love Story'];
|
|
9
|
-
const needle = 'love';
|
|
10
|
-
console.log(`Haystack: ${JSON.stringify(haystack)}`);
|
|
11
|
-
console.log(`Needle: "${needle}"\n`);
|
|
12
|
-
const fuzzy = new uFuzzy({ unicode: true });
|
|
13
|
-
// Step 1: Filter
|
|
14
|
-
console.log('Step 1: Filter candidates');
|
|
15
|
-
const idxs = fuzzy.filter(haystack, needle);
|
|
16
|
-
console.log(`Filtered indices: ${JSON.stringify(idxs)}`);
|
|
17
|
-
if (!idxs || idxs.length === 0) {
|
|
18
|
-
console.log('No matches found by filter\n');
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
// Step 2: Info
|
|
22
|
-
console.log('\nStep 2: Get detailed info');
|
|
23
|
-
const info = fuzzy.info(idxs, haystack, needle);
|
|
24
|
-
console.log(`Info: ${JSON.stringify(info, null, 2)}`);
|
|
25
|
-
// Step 3: Sort
|
|
26
|
-
console.log('\nStep 3: Sort results');
|
|
27
|
-
const order = fuzzy.sort(info, haystack, needle);
|
|
28
|
-
console.log(`Order: ${JSON.stringify(order)}`);
|
|
29
|
-
// Step 4: Map back to original indices
|
|
30
|
-
console.log('\nStep 4: Map back to original indices');
|
|
31
|
-
const resultIndices = order.map((sortedIdx) => {
|
|
32
|
-
const originalIdx = info.idx[sortedIdx];
|
|
33
|
-
return idxs[originalIdx];
|
|
34
|
-
});
|
|
35
|
-
console.log(`Final result indices: ${JSON.stringify(resultIndices)}`);
|
|
36
|
-
// Show actual matched strings
|
|
37
|
-
console.log('\nMatched strings:');
|
|
38
|
-
resultIndices.forEach(idx => {
|
|
39
|
-
console.log(` [${idx}] "${haystack[idx]}"`);
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
function testOurWrapper() {
|
|
43
|
-
console.log('\n\n🔧 Testing our wrapper function...\n');
|
|
44
|
-
const haystack = ['My Note', 'My Love', 'Another Document', 'Love Story'];
|
|
45
|
-
const needle = 'love';
|
|
46
|
-
function fuzzySearch(haystack, needle) {
|
|
47
|
-
const fuzzy = new uFuzzy({ unicode: true });
|
|
48
|
-
const idxs = fuzzy.filter(haystack, needle);
|
|
49
|
-
if (!idxs || idxs.length === 0)
|
|
50
|
-
return [];
|
|
51
|
-
const info = fuzzy.info(idxs, haystack, needle);
|
|
52
|
-
const order = fuzzy.sort(info, haystack, needle);
|
|
53
|
-
return order.map((sortedIdx) => idxs[info.idx[sortedIdx]]);
|
|
54
|
-
}
|
|
55
|
-
const result = fuzzySearch(haystack, needle);
|
|
56
|
-
console.log(`fuzzySearch(${JSON.stringify(haystack)}, "${needle}")`);
|
|
57
|
-
console.log(`Result: ${JSON.stringify(result)}`);
|
|
58
|
-
// Test with exact match
|
|
59
|
-
const exactResult = fuzzySearch(haystack, 'My Love');
|
|
60
|
-
console.log(`\nfuzzySearch(${JSON.stringify(haystack)}, "My Love")`);
|
|
61
|
-
console.log(`Result: ${JSON.stringify(exactResult)}`);
|
|
62
|
-
// Test with partial match
|
|
63
|
-
const partialResult = fuzzySearch(haystack, 'Note');
|
|
64
|
-
console.log(`\nfuzzySearch(${JSON.stringify(haystack)}, "Note")`);
|
|
65
|
-
console.log(`Result: ${JSON.stringify(partialResult)}`);
|
|
66
|
-
}
|
|
67
|
-
// Run tests
|
|
68
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
69
|
-
testBasicFuzzySearch();
|
|
70
|
-
testOurWrapper();
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=testFuzzy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testFuzzy.js","sourceRoot":"","sources":["../../src/test/testFuzzy.ts"],"names":[],"mappings":"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"}
|