workerclaw 0.3.7 → 0.4.2

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 (67) hide show
  1. package/dist/agent/agent-engine.d.ts +32 -2
  2. package/dist/agent/agent-engine.d.ts.map +1 -1
  3. package/dist/agent/agent-engine.js +188 -8
  4. package/dist/agent/agent-engine.js.map +1 -1
  5. package/dist/cli/index.js +24 -1
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/cli/sections/experience.d.ts +10 -0
  8. package/dist/cli/sections/experience.d.ts.map +1 -0
  9. package/dist/cli/sections/experience.js +148 -0
  10. package/dist/cli/sections/experience.js.map +1 -0
  11. package/dist/core/config.d.ts +2 -0
  12. package/dist/core/config.d.ts.map +1 -1
  13. package/dist/core/config.js.map +1 -1
  14. package/dist/core/events.d.ts +19 -1
  15. package/dist/core/events.d.ts.map +1 -1
  16. package/dist/core/events.js +4 -0
  17. package/dist/core/events.js.map +1 -1
  18. package/dist/core/workerclaw.d.ts +7 -0
  19. package/dist/core/workerclaw.d.ts.map +1 -1
  20. package/dist/core/workerclaw.js +30 -0
  21. package/dist/core/workerclaw.js.map +1 -1
  22. package/dist/experience/encapsulator.d.ts +95 -0
  23. package/dist/experience/encapsulator.d.ts.map +1 -0
  24. package/dist/experience/encapsulator.js +239 -0
  25. package/dist/experience/encapsulator.js.map +1 -0
  26. package/dist/experience/hub-client.d.ts +32 -0
  27. package/dist/experience/hub-client.d.ts.map +1 -0
  28. package/dist/experience/hub-client.js +126 -0
  29. package/dist/experience/hub-client.js.map +1 -0
  30. package/dist/experience/index.d.ts +13 -0
  31. package/dist/experience/index.d.ts.map +1 -0
  32. package/dist/experience/index.js +30 -0
  33. package/dist/experience/index.js.map +1 -0
  34. package/dist/experience/local-store.d.ts +102 -0
  35. package/dist/experience/local-store.d.ts.map +1 -0
  36. package/dist/experience/local-store.js +321 -0
  37. package/dist/experience/local-store.js.map +1 -0
  38. package/dist/experience/manager.d.ts +71 -0
  39. package/dist/experience/manager.d.ts.map +1 -0
  40. package/dist/experience/manager.js +184 -0
  41. package/dist/experience/manager.js.map +1 -0
  42. package/dist/experience/search-engine.d.ts +80 -0
  43. package/dist/experience/search-engine.d.ts.map +1 -0
  44. package/dist/experience/search-engine.js +258 -0
  45. package/dist/experience/search-engine.js.map +1 -0
  46. package/dist/experience/signal-detector.d.ts +33 -0
  47. package/dist/experience/signal-detector.d.ts.map +1 -0
  48. package/dist/experience/signal-detector.js +182 -0
  49. package/dist/experience/signal-detector.js.map +1 -0
  50. package/dist/experience/types.d.ts +189 -0
  51. package/dist/experience/types.d.ts.map +1 -0
  52. package/dist/experience/types.js +7 -0
  53. package/dist/experience/types.js.map +1 -0
  54. package/dist/index.d.ts +3 -1
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +3 -1
  57. package/dist/index.js.map +1 -1
  58. package/dist/task/task-evaluator.d.ts.map +1 -1
  59. package/dist/task/task-evaluator.js +4 -1
  60. package/dist/task/task-evaluator.js.map +1 -1
  61. package/dist/task/task-manager.d.ts +14 -0
  62. package/dist/task/task-manager.d.ts.map +1 -1
  63. package/dist/task/task-manager.js +127 -5
  64. package/dist/task/task-manager.js.map +1 -1
  65. package/dist/types/task.d.ts +2 -0
  66. package/dist/types/task.d.ts.map +1 -1
  67. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-engine.d.ts","sourceRoot":"","sources":["../../src/experience/search-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,SAAS,CAAgC;gBAErC,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,gBAAgB,EAAE,SAAS,CAAC,EAAE,eAAe;IAW9F;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAI3C;;OAEG;IACG,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IA8BjF;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAY3E;;;OAGG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAUjF;;OAEG;YACW,aAAa;IAwB3B;;OAEG;IACH,OAAO,CAAC,WAAW;IAyBnB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAqC5B;;OAEG;YACW,SAAS;IAcvB;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqBpB;;OAEG;YACW,YAAY;IAiB1B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,iBAAiB,IAAI,cAAc;IAInC;;OAEG;IACH,QAAQ,IAAI,oBAAoB;CAGjC"}
@@ -0,0 +1,258 @@
1
+ /**
2
+ * 经验搜索引擎 (v2 - 本地+Hub联合 + TF-IDF语义搜索)
3
+ *
4
+ * 搜索策略:
5
+ * 1. 本地经验池:TF-IDF 关键词匹配
6
+ * 2. Hub 远程:如果有本地结果不足,补充搜索 Hub
7
+ * 3. 结果合并去重,按综合评分排序
8
+ */
9
+ import { createLogger } from '../core/logger.js';
10
+ import { SignalDetector } from './signal-detector.js';
11
+ export class ExperienceSearchEngine {
12
+ logger;
13
+ store;
14
+ signalDetector;
15
+ config;
16
+ hubClient = null;
17
+ constructor(store, config, hubClient) {
18
+ this.logger = createLogger('ExperienceEngine');
19
+ this.store = store;
20
+ this.signalDetector = new SignalDetector();
21
+ this.config = config;
22
+ if (hubClient) {
23
+ this.hubClient = hubClient;
24
+ }
25
+ }
26
+ /**
27
+ * 设置 Hub 客户端
28
+ */
29
+ setHubClient(client) {
30
+ this.hubClient = client;
31
+ }
32
+ /**
33
+ * 错误发生时自动搜索匹配经验
34
+ */
35
+ async searchByError(errorMessage) {
36
+ if (!this.config.autoSearch.enabled)
37
+ return null;
38
+ // 1. 检测信号
39
+ const detected = this.signalDetector.detect(errorMessage);
40
+ if (!detected.shouldSearch)
41
+ return null;
42
+ // 2. 联合搜索(本地 + Hub)
43
+ const allResults = await this.unifiedSearch(detected.signals, 3);
44
+ if (allResults.length > 0) {
45
+ const best = allResults[0];
46
+ if (best.matchScore >= this.config.autoSearch.minConfidence) {
47
+ this.logger.info(`经验命中 [${best.gene.gene_id.slice(0, 12)}...]`, {
48
+ matchScore: best.matchScore,
49
+ summary: best.gene.summary,
50
+ source: best.source,
51
+ });
52
+ return best;
53
+ }
54
+ }
55
+ this.logger.debug(`无匹配经验`, {
56
+ signals: detected.signals.slice(0, 3),
57
+ patternName: detected.patternName,
58
+ });
59
+ return null;
60
+ }
61
+ /**
62
+ * 按信号手动搜索
63
+ */
64
+ async searchBySignals(signals) {
65
+ const results = await this.unifiedSearch(signals, 10);
66
+ this.logger.info(`经验搜索完成`, {
67
+ signals: signals.slice(0, 3),
68
+ localHits: results.filter(r => r.source === 'local').length,
69
+ hubHits: results.filter(r => r.source === 'hub').length,
70
+ });
71
+ return results;
72
+ }
73
+ /**
74
+ * 语义搜索:基于 TF-IDF 的问题匹配
75
+ * 输入自然语言问题,提取关键词后搜索
76
+ */
77
+ async semanticSearch(query, limit = 5) {
78
+ const keywords = this.extractKeywords(query);
79
+ if (keywords.length === 0)
80
+ return [];
81
+ this.logger.debug(`语义搜索`, { query: query.slice(0, 50), keywords });
82
+ return this.unifiedSearch(keywords, limit);
83
+ }
84
+ // ==================== 内部方法 ====================
85
+ /**
86
+ * 联合搜索:本地 + Hub
87
+ */
88
+ async unifiedSearch(signals, limit) {
89
+ // 1. 搜索本地经验池(TF-IDF)
90
+ const localResults = this.searchLocal(signals);
91
+ // 2. 如果本地结果不足且 Hub 启用,补充搜索 Hub
92
+ let hubResults = [];
93
+ if (this.hubClient && this.config.hub.enabled && localResults.length < limit) {
94
+ try {
95
+ hubResults = await this.searchHub(signals, limit);
96
+ }
97
+ catch {
98
+ // Hub 搜索失败不影响本地结果
99
+ }
100
+ }
101
+ // 3. 合并去重(以 gene_id 去重,本地优先)
102
+ const merged = this.mergeResults(localResults, hubResults);
103
+ // 4. 按综合评分排序
104
+ return merged.slice(0, limit);
105
+ }
106
+ /**
107
+ * 本地搜索(增强版 TF-IDF 匹配)
108
+ */
109
+ searchLocal(signals) {
110
+ const rawResults = this.store.searchBySignals(signals);
111
+ // 增强:对 summary 和 description 进行额外匹配
112
+ for (const gene of this.store.getAllGenes()) {
113
+ // 跳过已有的
114
+ if (rawResults.some(r => r.gene.gene_id === gene.gene_id))
115
+ continue;
116
+ const score = this.computeEnhancedScore(gene, signals);
117
+ if (score >= 0.3) {
118
+ const capsule = this.store.getBestCapsule(gene.gene_id);
119
+ if (capsule) {
120
+ rawResults.push({
121
+ gene,
122
+ capsule,
123
+ matchScore: score,
124
+ source: 'local',
125
+ });
126
+ }
127
+ }
128
+ }
129
+ return rawResults.sort((a, b) => b.matchScore - a.matchScore);
130
+ }
131
+ /**
132
+ * 增强 TF-IDF 匹配分数计算
133
+ * 除了信号匹配外,还考虑 summary、description、tags 的关键词密度
134
+ */
135
+ computeEnhancedScore(gene, querySignals) {
136
+ // 基础信号匹配分
137
+ let baseScore = 0;
138
+ const geneSignalsLower = gene.signals.map(s => s.toLowerCase());
139
+ const queryLower = querySignals.map(s => s.toLowerCase());
140
+ let matchedSignals = 0;
141
+ for (const qs of queryLower) {
142
+ for (const gs of geneSignalsLower) {
143
+ if (gs.includes(qs) || qs.includes(gs)) {
144
+ matchedSignals++;
145
+ break;
146
+ }
147
+ }
148
+ }
149
+ if (geneSignalsLower.length > 0) {
150
+ baseScore = matchedSignals / geneSignalsLower.length;
151
+ }
152
+ // TF(词频): 关键词在 summary/description 中的密度
153
+ const textBlob = [
154
+ gene.summary,
155
+ gene.description || '',
156
+ ...gene.tags,
157
+ ...gene.strategy.map(s => s.action),
158
+ ].join(' ').toLowerCase();
159
+ let tfHits = 0;
160
+ for (const qs of queryLower) {
161
+ if (textBlob.includes(qs))
162
+ tfHits++;
163
+ }
164
+ const tfScore = queryLower.length > 0 ? tfHits / queryLower.length : 0;
165
+ // 综合分:信号 60% + 文本密度 40%
166
+ return baseScore * 0.6 + tfScore * 0.4;
167
+ }
168
+ /**
169
+ * Hub 搜索
170
+ */
171
+ async searchHub(signals, limit) {
172
+ if (!this.hubClient)
173
+ return [];
174
+ const response = await this.hubClient.searchGenes(signals, limit);
175
+ if (!response || !response.results)
176
+ return [];
177
+ return response.results.map(item => ({
178
+ gene: item.gene,
179
+ capsule: item.capsule,
180
+ matchScore: this.hubMatchToScore(item.gdi, item.matchScore),
181
+ source: 'hub',
182
+ }));
183
+ }
184
+ /**
185
+ * 将 Hub 返回的 GDI + matchScore 转为统一评分
186
+ */
187
+ hubMatchToScore(gdi, matchScore) {
188
+ // Hub 的 matchScore 如果有就用,否则基于 GDI 估算
189
+ if (matchScore !== undefined) {
190
+ return matchScore;
191
+ }
192
+ // GDI 综合分作为匹配度参考(打折,因为不是精确匹配)
193
+ return (gdi?.overall || 0.5) * 0.8;
194
+ }
195
+ /**
196
+ * 合并本地和 Hub 结果(去重,本地优先)
197
+ */
198
+ mergeResults(local, hub) {
199
+ const localGeneIds = new Set(local.map(r => r.gene.gene_id));
200
+ const merged = [...local];
201
+ for (const hubResult of hub) {
202
+ // 去重:如果本地已有同 gene_id,跳过 Hub 版本
203
+ if (localGeneIds.has(hubResult.gene.gene_id))
204
+ continue;
205
+ // 同时保存 Hub 基因到本地缓存(供后续离线使用)
206
+ this.cacheHubGene(hubResult).catch(() => { });
207
+ merged.push(hubResult);
208
+ }
209
+ return merged.sort((a, b) => b.matchScore - a.matchScore);
210
+ }
211
+ /**
212
+ * 缓存 Hub 基因到本地(异步,不阻塞)
213
+ */
214
+ async cacheHubGene(result) {
215
+ try {
216
+ // 检查本地是否已有
217
+ if (this.store.getGene(result.gene.gene_id))
218
+ return;
219
+ // 保存基因和胶囊到本地
220
+ await this.store.saveGene(result.gene);
221
+ if (result.capsule) {
222
+ await this.store.saveCapsule(result.capsule);
223
+ }
224
+ this.logger.debug(`Hub 基因已缓存 [${result.gene.gene_id.slice(0, 12)}...]`);
225
+ }
226
+ catch {
227
+ // 缓存失败不影响搜索结果
228
+ }
229
+ }
230
+ /**
231
+ * 从自然语言查询中提取关键词
232
+ * 简单实现:分词 + 过滤停用词 + 取长度>=2的词
233
+ */
234
+ extractKeywords(query) {
235
+ // 按常见分隔符分词
236
+ const words = query
237
+ .toLowerCase()
238
+ .split(/[\s,,。.!!??;;::、\-\(\)()\[\]【】\/\\|]+/)
239
+ .filter(w => w.length >= 2)
240
+ // 过滤常见停用词
241
+ .filter(w => !['the', 'is', 'at', 'of', 'on', 'in', 'to', 'for', 'and', 'or', 'not', 'but', 'with', 'this', 'that', 'from', 'are', 'was', 'were', 'been', 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could', 'should', 'may', 'might', 'can', 'what', 'how', 'why', 'when', 'where', 'which', 'who', '的', '了', '在', '是', '我', '有', '和', '就', '不', '人', '都', '一', '一个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着', '没有', '看', '好', '自己', '这'].includes(w));
242
+ // 去重
243
+ return [...new Set(words)].slice(0, 8);
244
+ }
245
+ /**
246
+ * 获取信号检测器(供封装器使用)
247
+ */
248
+ getSignalDetector() {
249
+ return this.signalDetector;
250
+ }
251
+ /**
252
+ * 获取存储实例
253
+ */
254
+ getStore() {
255
+ return this.store;
256
+ }
257
+ }
258
+ //# sourceMappingURL=search-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-engine.js","sourceRoot":"","sources":["../../src/experience/search-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAOtD,MAAM,OAAO,sBAAsB;IACzB,MAAM,CAAS;IACf,KAAK,CAAuB;IAC5B,cAAc,CAAiB;IAC/B,MAAM,CAAmB;IACzB,SAAS,GAA2B,IAAI,CAAC;IAEjD,YAAY,KAA2B,EAAE,MAAwB,EAAE,SAA2B;QAC5F,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAuB;QAClC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,YAAoB;QACtC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAEjD,UAAU;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAExC,oBAAoB;QACpB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEjE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;gBAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE;oBAC9D,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;oBAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;YACzB,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACrC,WAAW,EAAE,QAAQ,CAAC,WAAW;SAClC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,OAAiB;QACrC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE;YACzB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5B,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM;YAC3D,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,MAAM;SACxD,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAErC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,iDAAiD;IAEjD;;OAEG;IACK,KAAK,CAAC,aAAa,CACzB,OAAiB,EACjB,KAAa;QAEb,qBAAqB;QACrB,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE/C,+BAA+B;QAC/B,IAAI,UAAU,GAA6B,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC7E,IAAI,CAAC;gBACH,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;YAAC,MAAM,CAAC;gBACP,kBAAkB;YACpB,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAE3D,aAAa;QACb,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,OAAiB;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAEvD,oCAAoC;QACpC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YAC5C,QAAQ;YACR,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC;gBAAE,SAAS;YAEpE,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACvD,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;gBACjB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxD,IAAI,OAAO,EAAE,CAAC;oBACZ,UAAU,CAAC,IAAI,CAAC;wBACd,IAAI;wBACJ,OAAO;wBACP,UAAU,EAAE,KAAK;wBACjB,MAAM,EAAE,OAAO;qBAChB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IAChE,CAAC;IAED;;;OAGG;IACK,oBAAoB,CAAC,IAAgB,EAAE,YAAsB;QACnE,UAAU;QACV,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAE1D,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,KAAK,MAAM,EAAE,IAAI,gBAAgB,EAAE,CAAC;gBAClC,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;oBACvC,cAAc,EAAE,CAAC;oBACjB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,SAAS,GAAG,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC;QACvD,CAAC;QAED,wCAAwC;QACxC,MAAM,QAAQ,GAAG;YACf,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,WAAW,IAAI,EAAE;YACtB,GAAG,IAAI,CAAC,IAAI;YACZ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;SACpC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAE1B,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAAE,MAAM,EAAE,CAAC;QACtC,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvE,wBAAwB;QACxB,OAAO,SAAS,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS,CAAC,OAAiB,EAAE,KAAa;QACtD,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAE/B,MAAM,QAAQ,GAA6B,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5F,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAE9C,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC;YAC3D,MAAM,EAAE,KAAc;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,GAAiB,EAAE,UAAmB;QAC5D,qCAAqC;QACrC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,8BAA8B;QAC9B,OAAO,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;IACrC,CAAC;IAED;;OAEG;IACK,YAAY,CAClB,KAA+B,EAC/B,GAA6B;QAE7B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAE7D,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QAE1B,KAAK,MAAM,SAAS,IAAI,GAAG,EAAE,CAAC;YAC5B,+BAA+B;YAC/B,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,SAAS;YAEvD,4BAA4B;YAC5B,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAE7C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,MAA8B;QACvD,IAAI,CAAC;YACH,WAAW;YACX,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO;YAEpD,aAAa;YACb,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,eAAe,CAAC,KAAa;QACnC,WAAW;QACX,MAAM,KAAK,GAAG,KAAK;aAChB,WAAW,EAAE;aACb,KAAK,CAAC,uCAAuC,CAAC;aAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YAC3B,UAAU;aACT,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAErd,KAAK;QACL,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * 错误信号检测器
3
+ *
4
+ * 自动检测错误信息中的可搜索信号
5
+ * 在 AgentEngine 遇到错误时触发经验搜索
6
+ */
7
+ export interface DetectedSignal {
8
+ /** 检测到的信号模式名称 */
9
+ patternName: string;
10
+ /** 提取的信号关键词列表 */
11
+ signals: string[];
12
+ /** 原始错误信息 */
13
+ originalError: string;
14
+ /** 是否应该触发经验搜索 */
15
+ shouldSearch: boolean;
16
+ }
17
+ export declare class SignalDetector {
18
+ private logger;
19
+ constructor();
20
+ /**
21
+ * 从错误信息中检测信号
22
+ */
23
+ detect(errorMessage: string): DetectedSignal;
24
+ /**
25
+ * 提取通用信号(无精确匹配时的兜底)
26
+ */
27
+ private extractGenericSignals;
28
+ /**
29
+ * 获取所有已注册的信号模式名称
30
+ */
31
+ getRegisteredPatterns(): string[];
32
+ }
33
+ //# sourceMappingURL=signal-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-detector.d.ts","sourceRoot":"","sources":["../../src/experience/signal-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuHH,MAAM,WAAW,cAAc;IAC7B,iBAAiB;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB;IACjB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;;IAMvB;;OAEG;IACH,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc;IAgD5C;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE;CAGlC"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * 错误信号检测器
3
+ *
4
+ * 自动检测错误信息中的可搜索信号
5
+ * 在 AgentEngine 遇到错误时触发经验搜索
6
+ */
7
+ import { createLogger } from '../core/logger.js';
8
+ const SIGNAL_PATTERNS = [
9
+ // === 任务执行错误 ===
10
+ {
11
+ name: 'module_not_found',
12
+ pattern: /Cannot find module ['"]([^'"]+)['"]/i,
13
+ extractSignals: (m) => ['Cannot find module', m[1], 'MODULE_NOT_FOUND'],
14
+ },
15
+ {
16
+ name: 'socket_hang_up',
17
+ pattern: /socket hang up/i,
18
+ extractSignals: () => ['socket hang up', 'ECONNRESET', 'WebSocket'],
19
+ },
20
+ {
21
+ name: 'econnrefused',
22
+ pattern: /ECONNREFUSED/i,
23
+ extractSignals: () => ['ECONNREFUSED', 'connection refused'],
24
+ },
25
+ {
26
+ name: 'etimedout',
27
+ pattern: /ETIMEDOUT/i,
28
+ extractSignals: () => ['ETIMEDOUT', 'connection timeout'],
29
+ },
30
+ {
31
+ name: 'enotfound',
32
+ pattern: /ENOTFOUND/i,
33
+ extractSignals: (m) => ['ENOTFOUND', 'getaddrinfo'],
34
+ },
35
+ {
36
+ name: 'permission_denied',
37
+ pattern: /permission denied|EACCES/i,
38
+ extractSignals: () => ['permission denied', 'EACCES'],
39
+ },
40
+ // === LLM 错误 ===
41
+ {
42
+ name: 'llm_400',
43
+ pattern: /LLM API 错误 \(400\)[:\s]*(.*)/i,
44
+ extractSignals: (m) => ['LLM 400', 'Bad Request', ...(m[1] ? [m[1].slice(0, 100)] : [])],
45
+ },
46
+ {
47
+ name: 'llm_429',
48
+ pattern: /429.*Too Many|rate.?limit/i,
49
+ extractSignals: () => ['429', 'rate limit', 'Too Many Requests'],
50
+ },
51
+ {
52
+ name: 'context_length',
53
+ pattern: /context length|token limit|max.?tokens/i,
54
+ extractSignals: () => ['context length', 'token limit'],
55
+ },
56
+ {
57
+ name: 'model_not_found',
58
+ pattern: /model not found|does not exist/i,
59
+ extractSignals: () => ['model not found'],
60
+ },
61
+ // === 平台 API 错误 ===
62
+ {
63
+ name: 'http_status',
64
+ pattern: /HTTP (?:状态|status) ?(\d{3})|status: (\d{3})|HTTP\/\d\.\d (\d{3})/i,
65
+ extractSignals: (m) => {
66
+ const code = m[1] || m[2] || m[3];
67
+ return [`HTTP ${code}`, `status ${code}`];
68
+ },
69
+ },
70
+ {
71
+ name: 'api_error',
72
+ pattern: /API.?错误|API.?ERROR|接口.*失败|请求失败/i,
73
+ extractSignals: () => ['API error'],
74
+ },
75
+ // === 构建错误 ===
76
+ {
77
+ name: 'tsc_error',
78
+ pattern: /tsc error|typescript error|compilation error/i,
79
+ extractSignals: () => ['tsc error', 'TypeScript compilation'],
80
+ },
81
+ {
82
+ name: 'build_failed',
83
+ pattern: /build failed|npm ERR!/i,
84
+ extractSignals: () => ['build failed'],
85
+ },
86
+ // === vLLM 特定 ===
87
+ {
88
+ name: 'vllm_validation',
89
+ pattern: /validation error|Field required/i,
90
+ extractSignals: () => ['validation error', 'Field required'],
91
+ },
92
+ // === 通用错误 ===
93
+ {
94
+ name: 'timeout',
95
+ pattern: /timeout|超时/i,
96
+ extractSignals: () => ['timeout'],
97
+ },
98
+ {
99
+ name: 'memory',
100
+ pattern: /heap out of memory|OMEM|allocation failure/i,
101
+ extractSignals: () => ['out of memory', 'heap OOM'],
102
+ },
103
+ ];
104
+ export class SignalDetector {
105
+ logger;
106
+ constructor() {
107
+ this.logger = createLogger('SignalDetector');
108
+ }
109
+ /**
110
+ * 从错误信息中检测信号
111
+ */
112
+ detect(errorMessage) {
113
+ if (!errorMessage || typeof errorMessage !== 'string') {
114
+ return {
115
+ patternName: 'none',
116
+ signals: [],
117
+ originalError: errorMessage || '',
118
+ shouldSearch: false,
119
+ };
120
+ }
121
+ const allSignals = [];
122
+ let matchedPattern = null;
123
+ for (const sp of SIGNAL_PATTERNS) {
124
+ const match = errorMessage.match(sp.pattern);
125
+ if (match) {
126
+ matchedPattern = sp;
127
+ const extracted = sp.extractSignals(match);
128
+ allSignals.push(...extracted);
129
+ break; // 取第一个匹配的模式
130
+ }
131
+ }
132
+ // 如果没有精确匹配,提取有意义的短语作为通用信号
133
+ if (!matchedPattern) {
134
+ const genericSignals = this.extractGenericSignals(errorMessage);
135
+ allSignals.push(...genericSignals);
136
+ }
137
+ // 去重
138
+ const uniqueSignals = [...new Set(allSignals.map(s => s.trim()).filter(s => s.length > 0))];
139
+ const result = {
140
+ patternName: matchedPattern?.name || 'generic',
141
+ signals: uniqueSignals,
142
+ originalError: errorMessage,
143
+ shouldSearch: uniqueSignals.length >= 1,
144
+ };
145
+ if (result.shouldSearch) {
146
+ this.logger.debug(`检测到信号 [${result.patternName}]`, {
147
+ signals: uniqueSignals.slice(0, 5),
148
+ });
149
+ }
150
+ return result;
151
+ }
152
+ /**
153
+ * 提取通用信号(无精确匹配时的兜底)
154
+ */
155
+ extractGenericSignals(errorMessage) {
156
+ const signals = [];
157
+ // 提取常见错误代码
158
+ const errorCodeMatch = errorMessage.match(/\b(ERR[A-Z_]+|E[A-Z]+)\b/);
159
+ if (errorCodeMatch) {
160
+ signals.push(errorCodeMatch[1]);
161
+ }
162
+ // 提取 HTTP 状态码
163
+ const httpMatch = errorMessage.match(/\b([45]\d{2})\b/);
164
+ if (httpMatch) {
165
+ signals.push(`HTTP ${httpMatch[1]}`);
166
+ }
167
+ // 提取引号中的错误消息
168
+ const quotedMatch = errorMessage.match(/['"]([^'"]{5,60})['"]/);
169
+ if (quotedMatch) {
170
+ signals.push(quotedMatch[1]);
171
+ }
172
+ // 限制信号数量
173
+ return signals.slice(0, 5);
174
+ }
175
+ /**
176
+ * 获取所有已注册的信号模式名称
177
+ */
178
+ getRegisteredPatterns() {
179
+ return SIGNAL_PATTERNS.map(sp => sp.name);
180
+ }
181
+ }
182
+ //# sourceMappingURL=signal-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-detector.js","sourceRoot":"","sources":["../../src/experience/signal-detector.ts"],"names":[],"mappings":"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"}