skill-creator 0.0.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/README.md +148 -19
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +265 -260
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/addContent.d.ts +5 -0
  6. package/dist/commands/addContent.d.ts.map +1 -0
  7. package/dist/commands/addContent.js +74 -0
  8. package/dist/commands/addContent.js.map +1 -0
  9. package/dist/commands/buildIndex.d.ts +5 -0
  10. package/dist/commands/buildIndex.d.ts.map +1 -0
  11. package/dist/commands/buildIndex.js +17 -0
  12. package/dist/commands/buildIndex.js.map +1 -0
  13. package/dist/commands/downloadContext7.d.ts +5 -0
  14. package/dist/commands/downloadContext7.d.ts.map +1 -0
  15. package/dist/commands/downloadContext7.js +62 -0
  16. package/dist/commands/downloadContext7.js.map +1 -0
  17. package/dist/commands/init.d.ts +5 -0
  18. package/dist/commands/init.d.ts.map +1 -0
  19. package/dist/commands/init.js +89 -0
  20. package/dist/commands/init.js.map +1 -0
  21. package/dist/commands/initCc.d.ts +5 -0
  22. package/dist/commands/initCc.d.ts.map +1 -0
  23. package/dist/commands/initCc.js +26 -0
  24. package/dist/commands/initCc.js.map +1 -0
  25. package/dist/commands/listContent.d.ts +5 -0
  26. package/dist/commands/listContent.d.ts.map +1 -0
  27. package/dist/commands/listContent.js +35 -0
  28. package/dist/commands/listContent.js.map +1 -0
  29. package/dist/commands/searchContent.d.ts +5 -0
  30. package/dist/commands/searchContent.d.ts.map +1 -0
  31. package/dist/commands/searchContent.js +98 -0
  32. package/dist/commands/searchContent.js.map +1 -0
  33. package/dist/commands/shared.d.ts +23 -0
  34. package/dist/commands/shared.d.ts.map +1 -0
  35. package/dist/commands/shared.js +92 -0
  36. package/dist/commands/shared.js.map +1 -0
  37. package/dist/commands/updateContext7.d.ts +5 -0
  38. package/dist/commands/updateContext7.d.ts.map +1 -0
  39. package/dist/commands/updateContext7.js +28 -0
  40. package/dist/commands/updateContext7.js.map +1 -0
  41. package/dist/core/autoSearchAdapter.d.ts +42 -0
  42. package/dist/core/autoSearchAdapter.d.ts.map +1 -0
  43. package/dist/core/autoSearchAdapter.js +116 -0
  44. package/dist/core/autoSearchAdapter.js.map +1 -0
  45. package/dist/core/chromaLocalSearch.d.ts +26 -0
  46. package/dist/core/chromaLocalSearch.d.ts.map +1 -0
  47. package/dist/core/chromaLocalSearch.js +212 -0
  48. package/dist/core/chromaLocalSearch.js.map +1 -0
  49. package/dist/core/chromaLocalSimple.d.ts +24 -0
  50. package/dist/core/chromaLocalSimple.d.ts.map +1 -0
  51. package/dist/core/chromaLocalSimple.js +216 -0
  52. package/dist/core/chromaLocalSimple.js.map +1 -0
  53. package/dist/core/chromaSearchAdapter.d.ts +86 -0
  54. package/dist/core/chromaSearchAdapter.d.ts.map +1 -0
  55. package/dist/core/chromaSearchAdapter.js +477 -0
  56. package/dist/core/chromaSearchAdapter.js.map +1 -0
  57. package/dist/core/chromaSearchImproved.d.ts +29 -0
  58. package/dist/core/chromaSearchImproved.d.ts.map +1 -0
  59. package/dist/core/chromaSearchImproved.js +259 -0
  60. package/dist/core/chromaSearchImproved.js.map +1 -0
  61. package/dist/core/chromaServerManager.d.ts +64 -0
  62. package/dist/core/chromaServerManager.d.ts.map +1 -0
  63. package/dist/core/chromaServerManager.js +186 -0
  64. package/dist/core/chromaServerManager.js.map +1 -0
  65. package/dist/core/contentManager.d.ts +1 -0
  66. package/dist/core/contentManager.d.ts.map +1 -1
  67. package/dist/core/contentManager.js +75 -21
  68. package/dist/core/contentManager.js.map +1 -1
  69. package/dist/core/fuseSearch.d.ts +25 -0
  70. package/dist/core/fuseSearch.d.ts.map +1 -0
  71. package/dist/core/fuseSearch.js +198 -0
  72. package/dist/core/fuseSearch.js.map +1 -0
  73. package/dist/core/fuzzySearch.d.ts +66 -0
  74. package/dist/core/fuzzySearch.d.ts.map +1 -0
  75. package/dist/core/fuzzySearch.js +271 -0
  76. package/dist/core/fuzzySearch.js.map +1 -0
  77. package/dist/core/fuzzySearchAdapter.d.ts +33 -0
  78. package/dist/core/fuzzySearchAdapter.d.ts.map +1 -0
  79. package/dist/core/fuzzySearchAdapter.js +185 -0
  80. package/dist/core/fuzzySearchAdapter.js.map +1 -0
  81. package/dist/core/portUtils.d.ts +51 -0
  82. package/dist/core/portUtils.d.ts.map +1 -0
  83. package/dist/core/portUtils.js +120 -0
  84. package/dist/core/portUtils.js.map +1 -0
  85. package/dist/core/runScript.d.ts +1 -1
  86. package/dist/core/runScript.d.ts.map +1 -1
  87. package/dist/core/runScript.js +27 -210
  88. package/dist/core/runScript.js.map +1 -1
  89. package/dist/core/searchAdapter.d.ts +48 -0
  90. package/dist/core/searchAdapter.d.ts.map +1 -0
  91. package/dist/core/searchAdapter.js +6 -0
  92. package/dist/core/searchAdapter.js.map +1 -0
  93. package/dist/core/searchEngineFactory.d.ts +30 -0
  94. package/dist/core/searchEngineFactory.d.ts.map +1 -0
  95. package/dist/core/searchEngineFactory.js +41 -0
  96. package/dist/core/searchEngineFactory.js.map +1 -0
  97. package/dist/core/simpleLocalSearch.d.ts +50 -0
  98. package/dist/core/simpleLocalSearch.d.ts.map +1 -0
  99. package/dist/core/simpleLocalSearch.js +406 -0
  100. package/dist/core/simpleLocalSearch.js.map +1 -0
  101. package/dist/core/skillCreator.d.ts +0 -2
  102. package/dist/core/skillCreator.d.ts.map +1 -1
  103. package/dist/core/skillCreator.js +20 -92
  104. package/dist/core/skillCreator.js.map +1 -1
  105. package/dist/core/unifiedSearch.d.ts +57 -11
  106. package/dist/core/unifiedSearch.d.ts.map +1 -1
  107. package/dist/core/unifiedSearch.js +88 -29
  108. package/dist/core/unifiedSearch.js.map +1 -1
  109. package/dist/index.d.ts +4 -1
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +3 -1
  112. package/dist/index.js.map +1 -1
  113. package/dist/search_format/enhancedFormatter.d.ts +109 -0
  114. package/dist/search_format/enhancedFormatter.d.ts.map +1 -0
  115. package/dist/search_format/enhancedFormatter.js +262 -0
  116. package/dist/search_format/enhancedFormatter.js.map +1 -0
  117. package/dist/search_format/index.d.ts +10 -0
  118. package/dist/search_format/index.d.ts.map +1 -0
  119. package/dist/search_format/index.js +22 -0
  120. package/dist/search_format/index.js.map +1 -0
  121. package/dist/search_format/listFormatter.d.ts +16 -0
  122. package/dist/search_format/listFormatter.d.ts.map +1 -0
  123. package/dist/search_format/listFormatter.js +51 -0
  124. package/dist/search_format/listFormatter.js.map +1 -0
  125. package/dist/search_format/types.d.ts +69 -0
  126. package/dist/search_format/types.d.ts.map +1 -0
  127. package/dist/search_format/types.js +5 -0
  128. package/dist/search_format/types.js.map +1 -0
  129. package/dist/test/testFuzzy.d.ts +3 -0
  130. package/dist/test/testFuzzy.d.ts.map +1 -0
  131. package/dist/test/testFuzzy.js +72 -0
  132. package/dist/test/testFuzzy.js.map +1 -0
  133. package/dist/test-fuzzy.d.ts +6 -0
  134. package/dist/test-fuzzy.d.ts.map +1 -0
  135. package/dist/test-fuzzy.js +65 -0
  136. package/dist/test-fuzzy.js.map +1 -0
  137. package/dist/types/index.d.ts +5 -0
  138. package/dist/types/index.d.ts.map +1 -1
  139. package/dist/utils/package.d.ts +17 -0
  140. package/dist/utils/package.d.ts.map +1 -1
  141. package/dist/utils/package.js +51 -14
  142. package/dist/utils/package.js.map +1 -1
  143. package/package.json +9 -8
  144. package/templates/skill-creator.md +65 -153
  145. package/templates/skill-creator.zh-CN.md +93 -0
@@ -0,0 +1,259 @@
1
+ /**
2
+ * 优化后的 ChromaDB-based search engine with local file storage support
3
+ */
4
+ import { join } from 'node:path';
5
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
6
+ import { glob } from 'glob';
7
+ import { createHash } from 'node:crypto';
8
+ export class ChromaSearchEngine {
9
+ client = null;
10
+ collection = null;
11
+ options;
12
+ embeddingFunction = null;
13
+ mode = 'http';
14
+ constructor(options) {
15
+ this.options = {
16
+ mode: 'auto',
17
+ ...options
18
+ };
19
+ }
20
+ async initializeEmbeddingFunction() {
21
+ if (!this.embeddingFunction) {
22
+ const { DefaultEmbeddingFunction } = await import('@chroma-core/default-embed');
23
+ this.embeddingFunction = new DefaultEmbeddingFunction();
24
+ }
25
+ }
26
+ async initializeClient() {
27
+ await this.initializeEmbeddingFunction();
28
+ const { ChromaClient } = await import('chromadb');
29
+ // 尝试 HTTP 模式(优先)
30
+ if (this.options.mode === 'http' || this.options.mode === 'auto') {
31
+ try {
32
+ console.log('🔗 尝试 HTTP 模式: http://localhost:8000');
33
+ this.client = new ChromaClient({
34
+ path: 'http://localhost:8000',
35
+ });
36
+ // 测试连接
37
+ await this.client.heartbeat();
38
+ this.mode = 'http';
39
+ console.log('✅ HTTP 模式连接成功');
40
+ return true;
41
+ }
42
+ catch (httpError) {
43
+ console.log('❌ HTTP 模式连接失败:', httpError.message);
44
+ if (this.options.mode === 'http') {
45
+ return false;
46
+ }
47
+ }
48
+ }
49
+ // 尝试本地文件存储模式
50
+ if (!this.client && (this.options.mode === 'local' || this.options.mode === 'auto')) {
51
+ try {
52
+ console.log('🔧 尝试本地文件存储模式:', this.options.dbPath);
53
+ // 确保目录存在
54
+ if (!existsSync(this.options.dbPath)) {
55
+ mkdirSync(this.options.dbPath, { recursive: true });
56
+ }
57
+ this.client = new ChromaClient({
58
+ path: this.options.dbPath
59
+ });
60
+ // 初始化客户端
61
+ await this.client.init();
62
+ this.mode = 'local';
63
+ console.log('✅ 本地文件存储模式初始化成功');
64
+ return true;
65
+ }
66
+ catch (localError) {
67
+ console.log('❌ 本地文件存储模式失败:', localError.message);
68
+ return false;
69
+ }
70
+ }
71
+ console.log('❌ 所有 ChromaDB 模式都失败');
72
+ return false;
73
+ }
74
+ async getCollection() {
75
+ if (!this.client) {
76
+ return false;
77
+ }
78
+ try {
79
+ this.collection = await this.client.getOrCreateCollection({
80
+ name: this.options.collectionName,
81
+ embeddingFunction: this.embeddingFunction,
82
+ });
83
+ console.log('✅ Collection 创建/获取成功');
84
+ return true;
85
+ }
86
+ catch (collectionError) {
87
+ console.log('❌ Collection 操作失败:', collectionError.message);
88
+ return false;
89
+ }
90
+ }
91
+ async initializeIfNeeded() {
92
+ if (!this.client || !this.collection) {
93
+ const clientOk = await this.initializeClient();
94
+ if (!clientOk) {
95
+ return false;
96
+ }
97
+ const collectionOk = await this.getCollection();
98
+ if (!collectionOk) {
99
+ return false;
100
+ }
101
+ }
102
+ return true;
103
+ }
104
+ async buildIndex(referencesDir, hashFile) {
105
+ try {
106
+ if (!await this.initializeIfNeeded()) {
107
+ throw new Error('ChromaDB 初始化失败');
108
+ }
109
+ // Get all markdown files
110
+ const files = await glob('**/*.md', { cwd: referencesDir });
111
+ if (files.length === 0) {
112
+ console.log('ℹ️ 没有找到文档文件来建立索引');
113
+ return;
114
+ }
115
+ // Calculate current hash
116
+ const fileContents = files.map(file => {
117
+ const content = readFileSync(join(referencesDir, file), 'utf-8');
118
+ return `${file}:${content}`;
119
+ });
120
+ const h = createHash('sha256');
121
+ h.update(fileContents.join('\n'));
122
+ const currentHash = h.digest('hex');
123
+ // Check if we need to rebuild
124
+ if (existsSync(hashFile)) {
125
+ const lastHash = readFileSync(hashFile, 'utf-8');
126
+ if (lastHash === currentHash) {
127
+ console.log('ℹ️ 索引是最新的');
128
+ return;
129
+ }
130
+ }
131
+ console.log(`🔄 正在索引 ${files.length} 个文档 (模式: ${this.mode})...`);
132
+ // Clear existing data
133
+ try {
134
+ await this.collection.delete();
135
+ }
136
+ catch (deleteError) {
137
+ console.log('⚠️ 清理现有数据时出错:', deleteError.message);
138
+ }
139
+ // Process and add documents
140
+ const documents = [];
141
+ const metadatas = [];
142
+ const ids = [];
143
+ for (const file of files) {
144
+ const content = readFileSync(join(referencesDir, file), 'utf-8');
145
+ const sections = this.splitIntoSections(content);
146
+ for (let i = 0; i < sections.length; i++) {
147
+ const section = sections[i];
148
+ const docId = `${file.replace(/[^a-zA-Z0-9._-]/g, '_')}_${i}`;
149
+ documents.push(section.content);
150
+ metadatas.push({
151
+ source: file,
152
+ section: i,
153
+ title: section.title || `Section ${i + 1}`,
154
+ totalSections: sections.length,
155
+ mode: this.mode
156
+ });
157
+ ids.push(docId);
158
+ }
159
+ }
160
+ if (documents.length > 0) {
161
+ await this.collection.add({
162
+ ids,
163
+ documents,
164
+ metadatas
165
+ });
166
+ console.log(`✅ 成功索引 ${documents.length} 个文档片段`);
167
+ }
168
+ // Save hash
169
+ writeFileSync(hashFile, currentHash);
170
+ console.log('✅ 索引哈希已保存');
171
+ }
172
+ catch (error) {
173
+ console.log('❌ 索引构建失败:', error.message);
174
+ throw error;
175
+ }
176
+ }
177
+ async search(query, topK = 5, where) {
178
+ try {
179
+ if (!await this.initializeIfNeeded()) {
180
+ throw new Error('ChromaDB 不可用');
181
+ }
182
+ const results = await this.collection.query({
183
+ queryTexts: [query],
184
+ nResults: topK,
185
+ where: where
186
+ });
187
+ return results.ids.map((id, index) => ({
188
+ id,
189
+ title: results.metadatas[index]?.title || `Document ${index + 1}`,
190
+ content: results.documents[index],
191
+ source: results.metadatas[index]?.source || 'unknown',
192
+ score: results.distances[index],
193
+ metadata: {
194
+ ...results.metadatas[index],
195
+ distance: results.distances[index],
196
+ embeddingDimension: results.embeddings?.[0]?.length || 0,
197
+ searchEngine: 'chroma',
198
+ mode: this.mode
199
+ }
200
+ }));
201
+ }
202
+ catch (error) {
203
+ console.log('❌ ChromaDB 搜索失败:', error.message);
204
+ throw error;
205
+ }
206
+ }
207
+ async searchByPriority(query, topK = 5) {
208
+ return this.search(query, topK);
209
+ }
210
+ async getStats() {
211
+ try {
212
+ if (!await this.initializeIfNeeded()) {
213
+ return { totalDocuments: 0 };
214
+ }
215
+ const count = await this.collection.count();
216
+ return { totalDocuments: count };
217
+ }
218
+ catch (error) {
219
+ console.log('❌ 获取统计信息失败:', error.message);
220
+ return { totalDocuments: 0 };
221
+ }
222
+ }
223
+ splitIntoSections(content) {
224
+ const lines = content.split('\n');
225
+ const sections = [];
226
+ let currentSection = { title: '', content: [] };
227
+ for (const line of lines) {
228
+ const trimmedLine = line.trim();
229
+ // Check if line is a header (starts with #)
230
+ if (trimmedLine.startsWith('#')) {
231
+ // Save previous section if it has content
232
+ if (currentSection.content.length > 0) {
233
+ sections.push({
234
+ title: currentSection.title,
235
+ content: currentSection.content.join('\n').trim()
236
+ });
237
+ }
238
+ // Start new section
239
+ const title = trimmedLine.replace(/^#+\s*/, '').trim();
240
+ currentSection = { title, content: [] };
241
+ if (title) {
242
+ currentSection.content.push(line); // Include the header line
243
+ }
244
+ }
245
+ else {
246
+ currentSection.content.push(line);
247
+ }
248
+ }
249
+ // Add the last section if it has content
250
+ if (currentSection.content.length > 0) {
251
+ sections.push({
252
+ title: currentSection.title,
253
+ content: currentSection.content.join('\n').trim()
254
+ });
255
+ }
256
+ return sections;
257
+ }
258
+ }
259
+ //# sourceMappingURL=chromaSearchImproved.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chromaSearchImproved.js","sourceRoot":"","sources":["../../src/core/chromaSearchImproved.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * ChromaDB Server Manager
3
+ * Manages on-demand ChromaDB server startup and shutdown with process isolation
4
+ */
5
+ import { spawn } from 'node:child_process';
6
+ import { createHash } from 'node:crypto';
7
+ import { existsSync, mkdirSync } from 'node:fs';
8
+ import { join, dirname } from 'node:path';
9
+ import { findAvailablePort, waitForService } from './portUtils.js';
10
+ export class ChromaServerManager {
11
+ static instance = null;
12
+ servers = new Map();
13
+ chromaCliPath = null;
14
+ constructor() { }
15
+ /**
16
+ * 获取单例实例
17
+ */
18
+ static getInstance() {
19
+ if (!ChromaServerManager.instance) {
20
+ ChromaServerManager.instance = new ChromaServerManager();
21
+ }
22
+ return ChromaServerManager.instance;
23
+ }
24
+ /**
25
+ * 初始化 ChromaDB CLI 路径
26
+ */
27
+ async initChromaCliPath() {
28
+ if (this.chromaCliPath)
29
+ return this.chromaCliPath;
30
+ try {
31
+ // 首先尝试从当前项目目录查找
32
+ let projectDir = process.cwd();
33
+ // 如果我们在 skill 目录中,需要向上查找找到包含 node_modules 的项目根目录
34
+ while (!existsSync(join(projectDir, 'node_modules', 'chromadb')) && projectDir !== '/') {
35
+ projectDir = dirname(projectDir);
36
+ }
37
+ const nodeModulesPath = join(projectDir, 'node_modules');
38
+ const chromaDir = join(nodeModulesPath, 'chromadb');
39
+ const cliPath = join(chromaDir, 'dist', 'cli.mjs');
40
+ if (existsSync(cliPath)) {
41
+ console.log(`✅ Found ChromaDB CLI: ${cliPath}`);
42
+ return (this.chromaCliPath = cliPath);
43
+ }
44
+ else {
45
+ throw new Error(`ChromaDB CLI not found at ${cliPath}`);
46
+ }
47
+ }
48
+ catch (error) {
49
+ throw new Error(`Failed to locate ChromaDB CLI: ${error instanceof Error ? error.message : String(error)}`);
50
+ }
51
+ }
52
+ /**
53
+ * 生成服务器唯一标识(基于skill目录)
54
+ */
55
+ generateServerId(config) {
56
+ // 简化ID生成,直接使用skill目录的hash
57
+ const hash = createHash('md5');
58
+ hash.update(config.skillDir);
59
+ return hash.digest('hex').substring(0, 12);
60
+ }
61
+ /**
62
+ * 启动 ChromaDB 服务器(在独立进程中)
63
+ */
64
+ async startServer(config) {
65
+ const chromaCliPath = await this.initChromaCliPath();
66
+ const serverId = this.generateServerId(config);
67
+ // 检查服务器是否已经运行
68
+ if (this.servers.has(serverId)) {
69
+ const existingServer = this.servers.get(serverId);
70
+ if (existingServer.process && !existingServer.process.killed) {
71
+ console.log(`📡 ChromaDB 服务器已在运行 (端口: ${existingServer.port})`);
72
+ return existingServer;
73
+ }
74
+ else {
75
+ // 清理死进程
76
+ this.servers.delete(serverId);
77
+ }
78
+ }
79
+ console.log('🚀 启动 ChromaDB 服务器...');
80
+ // 分配端口
81
+ const port = config.port || (await findAvailablePort());
82
+ // 创建持久化目录:assets/chromadb
83
+ const chromaDir = join(config.skillDir, 'chromadb');
84
+ if (!existsSync(chromaDir)) {
85
+ mkdirSync(chromaDir, { recursive: true });
86
+ }
87
+ console.log(`🔧 启动命令: chroma run --path ./chromadb --port ${port} --host localhost`);
88
+ console.log(`📁 数据目录: ${chromaDir}`);
89
+ console.log(`🌐 服务端口: ${port}`);
90
+ console.log(`🔄 工作目录: ${config.skillDir}`);
91
+ // 启动进程 - 从项目根目录启动以确保能找到依赖
92
+ const subprocess = spawn(process.argv[0], [chromaCliPath, 'run', '--port', port.toString()], {
93
+ stdio: 'ignore',
94
+ detached: true,
95
+ cwd: chromaDir,
96
+ });
97
+ subprocess.unref();
98
+ subprocess.on('error', (error) => {
99
+ console.log('❌ ChromaDB 进程错误:', error.message);
100
+ });
101
+ subprocess.on('exit', (code, signal) => {
102
+ console.log(`🔚 ChromaDB 进程退出 (code: ${code}, signal: ${signal})`);
103
+ this.servers.delete(serverId);
104
+ });
105
+ // 等待服务器启动
106
+ const startupTimeout = config.startupTimeout || 15000;
107
+ console.log(`⏳ 等待 ChromaDB 服务器启动 (超时: ${startupTimeout}ms)...`);
108
+ const isStarted = await waitForService(port, startupTimeout);
109
+ if (!isStarted) {
110
+ subprocess.kill('SIGTERM');
111
+ throw new Error(`ChromaDB 服务器启动超时 (端口: ${port})`);
112
+ }
113
+ console.log(`✅ ChromaDB 服务器启动成功 (端口: ${port})`);
114
+ // 保存服务器信息
115
+ const serverInfo = {
116
+ port,
117
+ dataPath: chromaDir,
118
+ process: subprocess,
119
+ config,
120
+ };
121
+ this.servers.set(serverId, serverInfo);
122
+ return serverInfo;
123
+ }
124
+ /**
125
+ * 停止 ChromaDB 服务器
126
+ */
127
+ async stopServer(config) {
128
+ const serverId = this.generateServerId(config);
129
+ const serverInfo = this.servers.get(serverId);
130
+ if (!serverInfo) {
131
+ console.log('⚠️ ChromaDB 服务器未运行');
132
+ return;
133
+ }
134
+ console.log(`🛑 停止 ChromaDB 服务器 (端口: ${serverInfo.port})...`);
135
+ try {
136
+ // 尝试优雅关闭
137
+ serverInfo.process.kill('SIGTERM');
138
+ // 等待进程结束
139
+ const timeout = setTimeout(() => {
140
+ if (!serverInfo.process.killed) {
141
+ console.log('⚡ 强制终止 ChromaDB 进程...');
142
+ serverInfo.process.kill('SIGKILL');
143
+ }
144
+ }, 5000);
145
+ serverInfo.process.on('exit', () => {
146
+ clearTimeout(timeout);
147
+ });
148
+ this.servers.delete(serverId);
149
+ console.log('✅ ChromaDB 服务器已停止');
150
+ }
151
+ catch (error) {
152
+ console.error('❌ 停止 ChromaDB 服务器时出错:', error);
153
+ }
154
+ }
155
+ /**
156
+ * 停止所有服务器
157
+ */
158
+ async stopAllServers() {
159
+ const stopPromises = Array.from(this.servers.values()).map(async (serverInfo) => {
160
+ try {
161
+ serverInfo.process.kill('SIGTERM');
162
+ }
163
+ catch (error) {
164
+ console.error(`停止服务器时出错 (端口: ${serverInfo.port}):`, error);
165
+ }
166
+ });
167
+ await Promise.all(stopPromises);
168
+ this.servers.clear();
169
+ console.log('✅ 所有 ChromaDB 服务器已停止');
170
+ }
171
+ /**
172
+ * 获取服务器信息
173
+ */
174
+ getServerInfo(config) {
175
+ const serverId = this.generateServerId(config);
176
+ return this.servers.get(serverId) || null;
177
+ }
178
+ /**
179
+ * 检查服务器是否运行
180
+ */
181
+ isServerRunning(config) {
182
+ const serverInfo = this.getServerInfo(config);
183
+ return serverInfo !== null && serverInfo.process && !serverInfo.process.killed;
184
+ }
185
+ }
186
+ //# sourceMappingURL=chromaServerManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chromaServerManager.js","sourceRoot":"","sources":["../../src/core/chromaServerManager.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ export declare class ContentManager {
19
19
  title: string;
20
20
  content: string;
21
21
  force?: boolean;
22
+ forceAppend?: boolean;
22
23
  autoUpdate?: boolean;
23
24
  }): Promise<AddContentResult>;
24
25
  getContentStats(): ContentStats;
@@ -1 +1 @@
1
- {"version":3,"file":"contentManager.d.ts","sourceRoot":"","sources":["../../src/core/contentManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE;QACZ,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;KAClE,CAAA;IACD,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,EAAE,CAAY;gBAEV,OAAO,EAAE,qBAAqB;IAOpC,kBAAkB,CACtB,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,oBAAoB,CAAC;IAmD1B,cAAc,CAAC,OAAO,EAAE;QAC5B,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqE7B,eAAe,IAAI,YAAY;IAyB/B,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,EAAE;YA0C1C,mBAAmB;YAWnB,aAAa;IAkB3B,OAAO,CAAC,eAAe;IAkDvB,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,oBAAoB;YAqBd,kBAAkB;IAShC,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,WAAW;YAaL,cAAc;CAM7B"}
1
+ {"version":3,"file":"contentManager.d.ts","sourceRoot":"","sources":["../../src/core/contentManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE;QACZ,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;KAClE,CAAA;IACD,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,EAAE,CAAY;gBAEV,OAAO,EAAE,qBAAqB;IAOpC,kBAAkB,CACtB,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,oBAAoB,CAAC;IAmD1B,cAAc,CAAC,OAAO,EAAE;QAC5B,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA+G7B,eAAe,IAAI,YAAY;IAqB/B,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,EAAE;YA0C1C,mBAAmB;YAWnB,aAAa;IAkB3B,OAAO,CAAC,eAAe;IAkDvB,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,oBAAoB;IA2B5B,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,oBAAoB;YAmBd,kBAAkB;IAShC,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,WAAW;YAaL,cAAc;CAM7B"}