feihong-code 0.2.3 → 0.5.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 (152) hide show
  1. package/.github/FUNDING.yml +4 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +37 -37
  3. package/.github/ISSUE_TEMPLATE/config.yml +14 -14
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +28 -28
  5. package/.github/PULL_REQUEST_TEMPLATE.md +46 -46
  6. package/.github/SECURITY.md +67 -67
  7. package/.github/dependabot.yml +16 -0
  8. package/.github/workflows/ci.yml +1 -1
  9. package/AGENT-GUIDE.md +382 -237
  10. package/CHANGELOG.md +405 -73
  11. package/CODE_OF_CONDUCT.md +56 -56
  12. package/CONTRIBUTING.md +68 -68
  13. package/LICENSE +22 -22
  14. package/README.md +527 -522
  15. package/README.self-evolve.md +274 -0
  16. package/dist/agent/code-review.js +2 -0
  17. package/dist/agent/code-review.js.map +1 -1
  18. package/dist/agent/code-writer.js +70 -17
  19. package/dist/agent/code-writer.js.map +1 -1
  20. package/dist/agent/context-compactor.js +13 -4
  21. package/dist/agent/context-compactor.js.map +1 -1
  22. package/dist/agent/experience.js +262 -62
  23. package/dist/agent/experience.js.map +1 -1
  24. package/dist/agent/orchestrator.js +148 -68
  25. package/dist/agent/orchestrator.js.map +1 -1
  26. package/dist/agent/quality-gate.js +10 -4
  27. package/dist/agent/quality-gate.js.map +1 -1
  28. package/dist/agent/repo-context.js +181 -0
  29. package/dist/agent/repo-context.js.map +1 -0
  30. package/dist/agent/repo-reader.js +92 -99
  31. package/dist/agent/repo-reader.js.map +1 -1
  32. package/dist/agent/self-heal.js +38 -48
  33. package/dist/agent/self-heal.js.map +1 -1
  34. package/dist/agent/self-improver.js +65 -61
  35. package/dist/agent/self-improver.js.map +1 -1
  36. package/dist/agent/subagent-summary.js +31 -0
  37. package/dist/agent/subagent-summary.js.map +1 -0
  38. package/dist/agent/subagent.js +52 -2
  39. package/dist/agent/subagent.js.map +1 -1
  40. package/dist/agent/symbol-index.js +160 -0
  41. package/dist/agent/symbol-index.js.map +1 -0
  42. package/dist/agent/team.js +193 -0
  43. package/dist/agent/team.js.map +1 -0
  44. package/dist/cli/commands.js +124 -143
  45. package/dist/cli/commands.js.map +1 -1
  46. package/dist/cli/index.js +113 -106
  47. package/dist/cli/index.js.map +1 -1
  48. package/dist/cli/repl.js +82 -7
  49. package/dist/cli/repl.js.map +1 -1
  50. package/dist/cli/run.js +601 -95
  51. package/dist/cli/run.js.map +1 -1
  52. package/dist/cli/tui.js +145 -0
  53. package/dist/cli/tui.js.map +1 -0
  54. package/dist/cli/version.js +1 -1
  55. package/dist/enterprise/audit.js +75 -12
  56. package/dist/enterprise/audit.js.map +1 -1
  57. package/dist/enterprise/index.js +14 -11
  58. package/dist/enterprise/index.js.map +1 -1
  59. package/dist/enterprise/policy.js +22 -10
  60. package/dist/enterprise/policy.js.map +1 -1
  61. package/dist/harness/executor.js +127 -0
  62. package/dist/harness/executor.js.map +1 -0
  63. package/dist/harness/harness.js +87 -0
  64. package/dist/harness/harness.js.map +1 -0
  65. package/dist/harness/index.js +31 -0
  66. package/dist/harness/index.js.map +1 -0
  67. package/dist/harness/loader.js +138 -0
  68. package/dist/harness/loader.js.map +1 -0
  69. package/dist/harness/reporter.js +34 -0
  70. package/dist/harness/reporter.js.map +1 -0
  71. package/dist/harness/types.js +10 -0
  72. package/dist/harness/types.js.map +1 -0
  73. package/dist/harness/verifier.js +48 -0
  74. package/dist/harness/verifier.js.map +1 -0
  75. package/dist/hello.js +14 -0
  76. package/dist/hello.js.map +1 -0
  77. package/dist/memory/auto-summarize.js +208 -0
  78. package/dist/memory/auto-summarize.js.map +1 -0
  79. package/dist/memory/index.js +228 -0
  80. package/dist/memory/index.js.map +1 -0
  81. package/dist/models/model-router.js +23 -10
  82. package/dist/models/model-router.js.map +1 -1
  83. package/dist/plugins/plugin-loader.js +179 -0
  84. package/dist/plugins/plugin-loader.js.map +1 -0
  85. package/dist/runtime/event-log.js.map +1 -1
  86. package/dist/runtime/hooks.js +80 -0
  87. package/dist/runtime/hooks.js.map +1 -0
  88. package/dist/self-evolve/hook.js +60 -0
  89. package/dist/self-evolve/hook.js.map +1 -0
  90. package/dist/shared/config.js +35 -3
  91. package/dist/shared/config.js.map +1 -1
  92. package/dist/shared/i18n.js +535 -0
  93. package/dist/shared/i18n.js.map +1 -0
  94. package/dist/skills/grill.js +2 -1
  95. package/dist/skills/grill.js.map +1 -1
  96. package/dist/skills/self-heal.js +73 -0
  97. package/dist/skills/self-heal.js.map +1 -0
  98. package/dist/skills/skill-loader.js +131 -0
  99. package/dist/skills/skill-loader.js.map +1 -0
  100. package/dist/skills/skill-market.js +195 -0
  101. package/dist/skills/skill-market.js.map +1 -0
  102. package/dist/tools/analysis/code-analyzer.js +45 -18
  103. package/dist/tools/analysis/code-analyzer.js.map +1 -1
  104. package/dist/tools/index.js +5 -0
  105. package/dist/tools/index.js.map +1 -1
  106. package/dist/tools/mcp/index.js +84 -0
  107. package/dist/tools/mcp/index.js.map +1 -0
  108. package/dist/tools/mcp/mcp-client.js +172 -0
  109. package/dist/tools/mcp/mcp-client.js.map +1 -0
  110. package/dist/tools/sandbox.js +126 -0
  111. package/dist/tools/sandbox.js.map +1 -0
  112. package/dist/tools/shell/exec.js +25 -0
  113. package/dist/tools/shell/exec.js.map +1 -1
  114. package/dist/tools/shell/run-shell.tool.js +4 -1
  115. package/dist/tools/shell/run-shell.tool.js.map +1 -1
  116. package/dist/tools/skills/load-skill.tool.js +36 -0
  117. package/dist/tools/skills/load-skill.tool.js.map +1 -0
  118. package/dist/tools/tool.interface.js.map +1 -1
  119. package/dist/tools/tool.registry.js +37 -1
  120. package/dist/tools/tool.registry.js.map +1 -1
  121. package/dist/tools/web/web.tool.js +139 -0
  122. package/dist/tools/web/web.tool.js.map +1 -0
  123. package/dist/web/auth.js +42 -3
  124. package/dist/web/auth.js.map +1 -1
  125. package/dist/web/channels.js +171 -0
  126. package/dist/web/channels.js.map +1 -0
  127. package/dist/web/public/index.html +3253 -39
  128. package/dist/web/public/index.html.tmp +3117 -0
  129. package/dist/web/public/index_new.html +3196 -0
  130. package/dist/web/server.js +790 -11
  131. package/dist/web/server.js.map +1 -1
  132. package/dist/web/task-queue.js +352 -0
  133. package/dist/web/task-queue.js.map +1 -0
  134. package/dist/web/web-config.js +143 -0
  135. package/dist/web/web-config.js.map +1 -0
  136. package/docs/Deployment_Guide_EN.md +288 -0
  137. package/docs/Technical_Manual_EN.md +216 -0
  138. package/docs/User_Manual_EN.md +314 -0
  139. package/docs/self-evolve-implementation.md +165 -0
  140. package/docs/self-evolve.md +166 -0
  141. package/docs//344/272/247/345/223/201/345/274/200/345/217/221/346/226/207/346/241/243.md +614 -614
  142. package/docs//344/274/201/344/270/232/351/203/250/347/275/262/344/270/216/345/220/210/350/247/204.md +267 -267
  143. package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +318 -358
  144. package/docs//345/270/270/350/247/201/351/227/256/351/242/230/344/270/216/346/225/205/351/232/234/346/216/222/346/237/245.md +130 -130
  145. package/docs//346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +216 -303
  146. package/docs//346/236/266/346/236/204/344/270/216API.md +238 -238
  147. package/docs//347/224/250/346/210/267/346/211/213/345/206/214.md +196 -196
  148. package/docs//351/203/250/347/275/262/346/214/207/345/215/227.md +165 -165
  149. package/docs//351/203/250/347/275/262/350/257/264/346/230/216/344/271/246.md +288 -0
  150. package/docs//351/205/215/347/275/256/345/217/202/350/200/203.md +127 -127
  151. package/package.json +114 -109
  152. package/tool-schema.json +127 -127
@@ -1,29 +1,105 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeExperienceId = normalizeExperienceId;
3
4
  exports.extractExperience = extractExperience;
4
5
  exports.saveExperience = saveExperience;
6
+ exports.upsertExperience = upsertExperience;
5
7
  exports.loadExperiences = loadExperiences;
8
+ exports.retrieveRelevantExperiences = retrieveRelevantExperiences;
6
9
  exports.updateExperienceUsage = updateExperienceUsage;
10
+ exports.extractFixPattern = extractFixPattern;
7
11
  exports.generateExperiencePrompt = generateExperiencePrompt;
8
12
  exports.listExperiences = listExperiences;
9
13
  /**
10
14
  * 飞虹 Code (Muse Code 参照复刻)
11
15
  * 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
12
16
  *
13
- * 经验学习(Experience Learning):
14
- * - 会话完成后自动提取经验(成功模式、失败教训、高效工具调用序列)
15
- * - 存储到 FH_HOME/experiences/*.jsonl
16
- * - 下次任务开始时加载相关经验注入 system prompt
17
+ * 经验学习(Experience Learning)— 强化学习式经验系统:
18
+ * - 会话完成后自动提取经验(成功模式、失败教训、高效工具调用序列、自愈修复经验)
19
+ * - 存储到 FH_HOME/experiences/*.jsonl,并以「稳定 id + upsert 合并」实现强化学习
20
+ * (同一模式被多次验证会累积 sessionCount 与成功率权重,而非无限追加重复记录)
21
+ * - 下次任务开始时用 retrieveRelevantExperiences 做加权检索(标签重叠 + 新鲜度 + 成功率)
22
+ * 注入 system prompt,形成「执行 → 反思 → 回流 → 更强执行」的闭环
17
23
  */
18
24
  const promises_1 = require("fs/promises");
19
25
  const fs_1 = require("fs");
20
26
  const path_1 = require("path");
21
27
  const logger_1 = require("../shared/logger");
22
- /** 从会话历史中提取经验 */
28
+ const self_heal_1 = require("./self-heal");
29
+ /** 稳定短哈希(用于经验去重 id) */
30
+ function shortHash(s) {
31
+ let h = 5381;
32
+ for (let i = 0; i < s.length; i++)
33
+ h = ((h << 5) + h + s.charCodeAt(i)) | 0;
34
+ return (h >>> 0).toString(36);
35
+ }
36
+ /** 由类型 + 归一化键生成稳定 id(跨 run 一致,支撑去重与 usage 追踪) */
37
+ function normalizeExperienceId(type, key) {
38
+ return `exp-${shortHash(`${type}:${key}`)}`;
39
+ }
40
+ const EXTRACTORS = [
41
+ {
42
+ // 经验 1: 高效工具调用模式(成功序列)
43
+ key: 'tool-efficiency',
44
+ extract: ({ toolCalls, mkMeta }) => {
45
+ if (toolCalls.length < 3)
46
+ return null;
47
+ const successfulCalls = toolCalls.filter((tc) => tc.success);
48
+ if (successfulCalls.length < 2)
49
+ return null;
50
+ const pattern = successfulCalls.map((tc) => tc.name).join(' → ');
51
+ return {
52
+ id: normalizeExperienceId('tool-efficiency', pattern),
53
+ type: 'tool-efficiency',
54
+ title: `成功工具序列: ${pattern}`,
55
+ content: `在本次任务中,以下工具调用序列成功完成目标:\n${pattern}\n\n建议未来类似任务优先复用此序列,可减少试错轮次。`,
56
+ metadata: mkMeta(successfulCalls.length / toolCalls.length, successfulCalls.map((tc) => tc.name)),
57
+ };
58
+ },
59
+ },
60
+ {
61
+ // 经验 2: 错误模式与规避(用 classifyError 精确归类)
62
+ key: 'error-pattern',
63
+ extract: ({ errors, mkMeta }) => {
64
+ if (errors.length === 0)
65
+ return null;
66
+ const categories = new Set();
67
+ for (const e of errors) {
68
+ const analysis = (0, self_heal_1.classifyError)(e.content || '', e.content || '');
69
+ categories.add(analysis?.category ?? 'unknown');
70
+ }
71
+ const uniqueErrors = [...categories];
72
+ return {
73
+ id: normalizeExperienceId('error-pattern', uniqueErrors.join(',')),
74
+ type: 'error-pattern',
75
+ title: `常见错误模式: ${uniqueErrors.join(', ')}`,
76
+ content: `本次任务遇到以下错误类型:\n${uniqueErrors.map((e) => `- ${e}`).join('\n')}\n\n规避建议: 提前校验前置条件(路径/权限/依赖),增加超时重试与最小改动原则,避免同类错误重复发生。`,
77
+ metadata: mkMeta(0, uniqueErrors),
78
+ };
79
+ },
80
+ },
81
+ {
82
+ // 经验 3: 干净成功模式(无错误且工具调用高效)
83
+ key: 'clean-success',
84
+ extract: ({ toolCalls, errors, mkMeta }) => {
85
+ if (errors.length > 0)
86
+ return null;
87
+ if (toolCalls.filter((tc) => tc.success).length < 2)
88
+ return null;
89
+ return {
90
+ id: normalizeExperienceId('success-pattern', 'clean-run'),
91
+ type: 'success-pattern',
92
+ title: '干净高效执行(无错误通过)',
93
+ content: '本次任务在较少轮次内一次性通过,说明目标拆解与工具使用策略有效。未来可优先沿用「先勘察→小步编辑→就地验证」的节奏。',
94
+ metadata: mkMeta(1.0, ['clean-run', 'efficiency']),
95
+ };
96
+ },
97
+ },
98
+ ];
23
99
  function extractExperience(messages, runId) {
24
100
  const experiences = [];
25
101
  const toolCalls = [];
26
- // 提取工具调用序列
102
+ // 提取工具调用序列及成败
27
103
  for (const msg of messages) {
28
104
  if (msg.role === 'assistant' && msg.toolCalls) {
29
105
  for (const tc of msg.toolCalls) {
@@ -37,64 +113,96 @@ function extractExperience(messages, runId) {
37
113
  }
38
114
  }
39
115
  }
40
- // 经验 1: 高效工具调用模式
41
- if (toolCalls.length >= 3) {
42
- const successfulCalls = toolCalls.filter((tc) => tc.success);
43
- if (successfulCalls.length >= 2) {
44
- const pattern = successfulCalls.map((tc) => tc.name).join(' → ');
45
- experiences.push({
46
- id: `exp-${runId}-tools`,
47
- type: 'tool-efficiency',
48
- title: `成功工具序列: ${pattern}`,
49
- content: `在本次任务中,以下工具调用序列成功完成目标:\n${pattern}\n\n建议未来类似任务可参考此序列。`,
50
- metadata: {
51
- sessionCount: 1,
52
- successRate: successfulCalls.length / toolCalls.length,
53
- tags: successfulCalls.map((tc) => tc.name),
54
- createdAt: new Date().toISOString(),
55
- lastUsedAt: new Date().toISOString(),
56
- },
57
- });
58
- }
59
- }
60
- // 经验 2: 错误模式与规避
116
+ const now = new Date().toISOString();
117
+ const mkMeta = (successRate, tags) => ({
118
+ sessionCount: 1,
119
+ successRate,
120
+ tags,
121
+ createdAt: now,
122
+ lastUsedAt: now,
123
+ });
61
124
  const errors = messages.filter((m) => m.role === 'tool' && (m.content || '').startsWith('错误:'));
62
- if (errors.length > 0) {
63
- const errorTypes = errors.map((e) => {
64
- const content = e.content || '';
65
- if (content.includes('路径') || content.includes('path'))
66
- return 'path-error';
67
- if (content.includes('超时') || content.includes('timeout'))
68
- return 'timeout';
69
- if (content.includes('权限') || content.includes('permission'))
70
- return 'permission';
71
- return 'unknown';
72
- });
73
- const uniqueErrors = [...new Set(errorTypes)];
74
- experiences.push({
75
- id: `exp-${runId}-errors`,
76
- type: 'error-pattern',
77
- title: `常见错误模式: ${uniqueErrors.join(', ')}`,
78
- content: `本次任务遇到以下错误类型:\n${uniqueErrors.map((e) => `- ${e}`).join('\n')}\n\n规避建议: 检查文件路径、增加超时重试、确认权限设置。`,
79
- metadata: {
80
- sessionCount: 1,
81
- successRate: 0,
82
- tags: uniqueErrors,
83
- createdAt: new Date().toISOString(),
84
- lastUsedAt: new Date().toISOString(),
85
- },
86
- });
125
+ const ctx = { toolCalls, errors, mkMeta, now };
126
+ // 表驱动:依次运行提取器,命中的经验入列(行为与原三段 if 完全一致)
127
+ for (const ex of EXTRACTORS) {
128
+ const exp = ex.extract(ctx);
129
+ if (exp)
130
+ experiences.push(exp);
87
131
  }
132
+ // runId 仅用于审计留痕,不影响稳定 id
133
+ void runId;
88
134
  return experiences;
89
135
  }
90
- /** 保存经验到文件 */
136
+ /** 追加保存一条经验(新建场景) */
91
137
  async function saveExperience(experienceDir, experience) {
92
138
  await (0, promises_1.mkdir)(experienceDir, { recursive: true });
93
139
  const file = (0, path_1.join)(experienceDir, 'experiences.jsonl');
94
140
  await (0, promises_1.appendFile)(file, JSON.stringify(experience) + '\n', 'utf8');
95
141
  logger_1.logger.info('experience saved', { id: experience.id, type: experience.type });
96
142
  }
97
- /** 加载相关经验(基于任务关键词) */
143
+ /**
144
+ * upsertExperience:强化学习式合并写入。
145
+ * - 若同 id 经验已存在:sessionCount+1、成功率按次数加权平均、标签合并、刷新 lastUsedAt
146
+ * - 否则新增
147
+ * 这样同一模式被多次验证会「越用越可信」,且不会无限膨胀出重复记录。
148
+ */
149
+ async function upsertExperience(experienceDir, experience) {
150
+ const file = (0, path_1.join)(experienceDir, 'experiences.jsonl');
151
+ if (!(0, fs_1.existsSync)(file)) {
152
+ await saveExperience(experienceDir, experience);
153
+ return;
154
+ }
155
+ try {
156
+ const content = await (0, promises_1.readFile)(file, 'utf8');
157
+ const lines = content.split('\n').filter(Boolean);
158
+ let merged = false;
159
+ const out = [];
160
+ for (const line of lines) {
161
+ try {
162
+ const e = JSON.parse(line);
163
+ if (e.id === experience.id) {
164
+ const prev = e.metadata.sessionCount;
165
+ const mergedExp = {
166
+ ...e,
167
+ content: experience.content.length >= e.content.length ? experience.content : e.content,
168
+ metadata: {
169
+ sessionCount: prev + 1,
170
+ successRate: (e.metadata.successRate * prev + experience.metadata.successRate) / (prev + 1),
171
+ tags: [...new Set([...e.metadata.tags, ...experience.metadata.tags])],
172
+ createdAt: e.metadata.createdAt,
173
+ lastUsedAt: new Date().toISOString(),
174
+ },
175
+ };
176
+ out.push(JSON.stringify(mergedExp));
177
+ merged = true;
178
+ }
179
+ else {
180
+ out.push(line);
181
+ }
182
+ }
183
+ catch {
184
+ out.push(line);
185
+ }
186
+ }
187
+ if (!merged)
188
+ out.push(JSON.stringify(experience));
189
+ await (0, promises_1.writeFile)(file, out.join('\n') + '\n', 'utf8');
190
+ logger_1.logger.info('experience upserted', { id: experience.id, merged, type: experience.type });
191
+ }
192
+ catch {
193
+ await saveExperience(experienceDir, experience);
194
+ }
195
+ }
196
+ /** 关键词分词的轻量实现(用于检索打分) */
197
+ function tokenize(s) {
198
+ return s
199
+ .toLowerCase()
200
+ .replace(/[^\p{L}\p{N}\s]/gu, ' ')
201
+ .split(/\s+/)
202
+ .filter((w) => w.length >= 3)
203
+ .map((w) => w.replace(/[es]$/, ''));
204
+ }
205
+ /** 加载相关经验(基于任务关键词,兼容旧路径) */
98
206
  async function loadExperiences(experienceDir, keywords) {
99
207
  const file = (0, path_1.join)(experienceDir, 'experiences.jsonl');
100
208
  if (!(0, fs_1.existsSync)(file))
@@ -106,13 +214,11 @@ async function loadExperiences(experienceDir, keywords) {
106
214
  for (const line of lines) {
107
215
  try {
108
216
  const exp = JSON.parse(line);
109
- // 匹配关键词
110
217
  const matched = keywords.some((kw) => exp.title.includes(kw) ||
111
218
  exp.content.includes(kw) ||
112
219
  exp.metadata.tags.some((tag) => tag.includes(kw)));
113
- if (matched) {
220
+ if (matched)
114
221
  experiences.push(exp);
115
- }
116
222
  }
117
223
  catch {
118
224
  // 跳过损坏的经验记录
@@ -127,7 +233,51 @@ async function loadExperiences(experienceDir, keywords) {
127
233
  return [];
128
234
  }
129
235
  }
130
- /** 更新经验使用统计 */
236
+ async function retrieveRelevantExperiences(experienceDir, goal, opts = {}) {
237
+ const limit = opts.limit ?? 5;
238
+ const file = (0, path_1.join)(experienceDir, 'experiences.jsonl');
239
+ if (!(0, fs_1.existsSync)(file))
240
+ return [];
241
+ const tokens = tokenize(goal);
242
+ const goalLower = goal.toLowerCase();
243
+ try {
244
+ const content = await (0, promises_1.readFile)(file, 'utf8');
245
+ const lines = content.trim().split('\n').filter(Boolean);
246
+ const scored = [];
247
+ for (const line of lines) {
248
+ try {
249
+ const exp = JSON.parse(line);
250
+ let score = exp.metadata.successRate * 2; // 基础权重
251
+ // 标签重叠
252
+ const tagOverlap = exp.metadata.tags.filter((t) => tokens.includes(t.toLowerCase())).length;
253
+ score += tagOverlap * 3;
254
+ // 标题/内容子串命中
255
+ if (goalLower &&
256
+ (exp.title.toLowerCase().includes(goalLower) || exp.content.toLowerCase().includes(goalLower))) {
257
+ score += 2;
258
+ }
259
+ // token 命中
260
+ for (const tk of tokens) {
261
+ if (exp.content.toLowerCase().includes(tk) || exp.title.toLowerCase().includes(tk))
262
+ score += 0.5;
263
+ }
264
+ // 新鲜度衰减(约 20 天线性衰减到 0)
265
+ const ageDays = (Date.now() - new Date(exp.metadata.lastUsedAt).getTime()) / 86_400_000;
266
+ score += Math.max(0, 1.5 - ageDays / 20);
267
+ scored.push({ exp, score });
268
+ }
269
+ catch {
270
+ // 跳过损坏记录
271
+ }
272
+ }
273
+ scored.sort((a, b) => b.score - a.score);
274
+ return scored.slice(0, limit).map((s) => s.exp);
275
+ }
276
+ catch {
277
+ return [];
278
+ }
279
+ }
280
+ /** 更新经验使用统计(bump 被加载/使用的经验,强化其权重) */
131
281
  async function updateExperienceUsage(experienceDir, experienceId) {
132
282
  const file = (0, path_1.join)(experienceDir, 'experiences.jsonl');
133
283
  if (!(0, fs_1.existsSync)(file))
@@ -160,13 +310,63 @@ async function updateExperienceUsage(experienceDir, experienceId) {
160
310
  // 静默失败
161
311
  }
162
312
  }
163
- /** 生成经验注入的系统提示 */
313
+ /**
314
+ * extractFixPattern:从「自愈成功」的会话中提取可复用修复经验。
315
+ * 触发条件:会话中出现「错误:」工具消息,且后续助手消息表明已修复/通过验证。
316
+ * 仅产出一条高价值经验,避免噪声;orchestrator 在 selfHealed 时调用。
317
+ */
318
+ function extractFixPattern(messages) {
319
+ let errorMsg = null;
320
+ let resolved = false;
321
+ for (const m of messages) {
322
+ if (m.role === 'tool' && (m.content || '').startsWith('错误:')) {
323
+ if (!errorMsg)
324
+ errorMsg = m.content;
325
+ }
326
+ if (m.role === 'assistant' &&
327
+ /修复|已修复|解决|resolved|fixed|通过验证|验证通过|成功/i.test(m.content || '')) {
328
+ resolved = true;
329
+ }
330
+ }
331
+ if (!errorMsg || !resolved)
332
+ return null;
333
+ const analysis = (0, self_heal_1.classifyError)(errorMsg, errorMsg);
334
+ const category = analysis?.category ?? 'unknown';
335
+ const key = `fix-pattern:${category}`;
336
+ const now = new Date().toISOString();
337
+ return {
338
+ id: normalizeExperienceId('success-pattern', key),
339
+ type: 'success-pattern',
340
+ title: `自愈修复经验: ${category}`,
341
+ content: `历史上遇到过「${category}」类错误,通过多轮自我修复(读错误→定位根因→就地修复→重跑验证)最终解决。` +
342
+ `未来遇到同类错误应直接采用该闭环,避免重复试错。`,
343
+ metadata: {
344
+ sessionCount: 1,
345
+ successRate: 1.0,
346
+ tags: [category, 'self-heal', 'fix'],
347
+ createdAt: now,
348
+ lastUsedAt: now,
349
+ },
350
+ };
351
+ }
352
+ /** 生成经验注入的系统提示(分组:成功模式优先、失败模式警示) */
164
353
  function generateExperiencePrompt(experiences) {
165
354
  if (experiences.length === 0)
166
355
  return '';
167
- const parts = ['📚 历史经验参考'];
168
- for (const exp of experiences) {
169
- parts.push(`\n**${exp.title}** (${exp.type}):\n${exp.content.slice(0, 300)}`);
356
+ const success = experiences.filter((e) => e.type === 'success-pattern' || e.type === 'tool-efficiency');
357
+ const errors = experiences.filter((e) => e.type === 'error-pattern');
358
+ const parts = [
359
+ '📚 历史经验参考(系统已从既往任务中强化学习,请优先参考成功经验、主动规避失败模式)',
360
+ ];
361
+ if (success.length) {
362
+ parts.push('\n## ✅ 可复用成功模式');
363
+ for (const exp of success)
364
+ parts.push(`- **${exp.title}**: ${exp.content.slice(0, 200)}`);
365
+ }
366
+ if (errors.length) {
367
+ parts.push('\n## ⚠️ 应避免的失败模式');
368
+ for (const exp of errors)
369
+ parts.push(`- **${exp.title}**: ${exp.content.slice(0, 200)}`);
170
370
  }
171
371
  return parts.join('\n');
172
372
  }
@@ -1 +1 @@
1
- {"version":3,"file":"experience.js","sourceRoot":"","sources":["../../src/agent/experience.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"experience.js","sourceRoot":"","sources":["../../src/agent/experience.ts"],"names":[],"mappings":"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"}