feihong-code 0.2.3 → 0.6.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 (180) 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 +392 -0
  11. package/CODE_OF_CONDUCT.md +56 -56
  12. package/CONTRIBUTING.md +68 -68
  13. package/LICENSE +22 -22
  14. package/README.md +586 -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 +74 -18
  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 +319 -84
  23. package/dist/agent/experience.js.map +1 -1
  24. package/dist/agent/orchestrator.js +233 -71
  25. package/dist/agent/orchestrator.js.map +1 -1
  26. package/dist/agent/planner.js +30 -7
  27. package/dist/agent/planner.js.map +1 -1
  28. package/dist/agent/prompts.js +9 -0
  29. package/dist/agent/prompts.js.map +1 -1
  30. package/dist/agent/quality-gate.js +10 -4
  31. package/dist/agent/quality-gate.js.map +1 -1
  32. package/dist/agent/repo-context.js +181 -0
  33. package/dist/agent/repo-context.js.map +1 -0
  34. package/dist/agent/repo-reader.js +92 -99
  35. package/dist/agent/repo-reader.js.map +1 -1
  36. package/dist/agent/self-heal.js +80 -60
  37. package/dist/agent/self-heal.js.map +1 -1
  38. package/dist/agent/self-improver.js +65 -61
  39. package/dist/agent/self-improver.js.map +1 -1
  40. package/dist/agent/subagent-summary.js +31 -0
  41. package/dist/agent/subagent-summary.js.map +1 -0
  42. package/dist/agent/subagent.js +52 -2
  43. package/dist/agent/subagent.js.map +1 -1
  44. package/dist/agent/symbol-index.js +160 -0
  45. package/dist/agent/symbol-index.js.map +1 -0
  46. package/dist/agent/team.js +193 -0
  47. package/dist/agent/team.js.map +1 -0
  48. package/dist/cli/commands.js +124 -143
  49. package/dist/cli/commands.js.map +1 -1
  50. package/dist/cli/index.js +113 -106
  51. package/dist/cli/index.js.map +1 -1
  52. package/dist/cli/repl.js +82 -7
  53. package/dist/cli/repl.js.map +1 -1
  54. package/dist/cli/run.js +600 -95
  55. package/dist/cli/run.js.map +1 -1
  56. package/dist/cli/tui.js +145 -0
  57. package/dist/cli/tui.js.map +1 -0
  58. package/dist/cli/version.js +1 -1
  59. package/dist/enterprise/audit.js +145 -23
  60. package/dist/enterprise/audit.js.map +1 -1
  61. package/dist/enterprise/index.js +14 -11
  62. package/dist/enterprise/index.js.map +1 -1
  63. package/dist/enterprise/policy.js +22 -10
  64. package/dist/enterprise/policy.js.map +1 -1
  65. package/dist/harness/executor.js +127 -0
  66. package/dist/harness/executor.js.map +1 -0
  67. package/dist/harness/harness.js +87 -0
  68. package/dist/harness/harness.js.map +1 -0
  69. package/dist/harness/index.js +31 -0
  70. package/dist/harness/index.js.map +1 -0
  71. package/dist/harness/loader.js +138 -0
  72. package/dist/harness/loader.js.map +1 -0
  73. package/dist/harness/reporter.js +34 -0
  74. package/dist/harness/reporter.js.map +1 -0
  75. package/dist/harness/types.js +10 -0
  76. package/dist/harness/types.js.map +1 -0
  77. package/dist/harness/verifier.js +48 -0
  78. package/dist/harness/verifier.js.map +1 -0
  79. package/dist/hello.js +14 -0
  80. package/dist/hello.js.map +1 -0
  81. package/dist/memory/auto-summarize.js +208 -0
  82. package/dist/memory/auto-summarize.js.map +1 -0
  83. package/dist/memory/index.js +228 -0
  84. package/dist/memory/index.js.map +1 -0
  85. package/dist/models/model-router.js +100 -27
  86. package/dist/models/model-router.js.map +1 -1
  87. package/dist/models/model.dto.js +25 -3
  88. package/dist/models/model.dto.js.map +1 -1
  89. package/dist/models/providers/ollama.provider.js +12 -0
  90. package/dist/models/providers/ollama.provider.js.map +1 -1
  91. package/dist/models/providers/openai-compatible.provider.js +14 -1
  92. package/dist/models/providers/openai-compatible.provider.js.map +1 -1
  93. package/dist/plugins/plugin-loader.js +179 -0
  94. package/dist/plugins/plugin-loader.js.map +1 -0
  95. package/dist/runtime/event-log.js.map +1 -1
  96. package/dist/runtime/hooks.js +80 -0
  97. package/dist/runtime/hooks.js.map +1 -0
  98. package/dist/self-evolve/hook.js +60 -0
  99. package/dist/self-evolve/hook.js.map +1 -0
  100. package/dist/self-evolve/hook.ts +80 -0
  101. package/dist/self-evolve/manager.d.ts +8 -0
  102. package/dist/self-evolve/manager.js +401 -0
  103. package/dist/shared/config.js +35 -3
  104. package/dist/shared/config.js.map +1 -1
  105. package/dist/shared/errors.js +6 -2
  106. package/dist/shared/errors.js.map +1 -1
  107. package/dist/shared/i18n.js +535 -0
  108. package/dist/shared/i18n.js.map +1 -0
  109. package/dist/shared/secure-store.js +117 -0
  110. package/dist/shared/secure-store.js.map +1 -0
  111. package/dist/skills/grill.js +2 -1
  112. package/dist/skills/grill.js.map +1 -1
  113. package/dist/skills/self-heal.js +73 -0
  114. package/dist/skills/self-heal.js.map +1 -0
  115. package/dist/skills/skill-loader.js +131 -0
  116. package/dist/skills/skill-loader.js.map +1 -0
  117. package/dist/skills/skill-market.js +195 -0
  118. package/dist/skills/skill-market.js.map +1 -0
  119. package/dist/tools/analysis/code-analyzer.js +45 -18
  120. package/dist/tools/analysis/code-analyzer.js.map +1 -1
  121. package/dist/tools/index.js +5 -0
  122. package/dist/tools/index.js.map +1 -1
  123. package/dist/tools/mcp/index.js +84 -0
  124. package/dist/tools/mcp/index.js.map +1 -0
  125. package/dist/tools/mcp/mcp-client.js +194 -0
  126. package/dist/tools/mcp/mcp-client.js.map +1 -0
  127. package/dist/tools/sandbox.js +126 -0
  128. package/dist/tools/sandbox.js.map +1 -0
  129. package/dist/tools/shell/exec.js +72 -3
  130. package/dist/tools/shell/exec.js.map +1 -1
  131. package/dist/tools/shell/run-shell.tool.js +37 -7
  132. package/dist/tools/shell/run-shell.tool.js.map +1 -1
  133. package/dist/tools/skills/load-skill.tool.js +36 -0
  134. package/dist/tools/skills/load-skill.tool.js.map +1 -0
  135. package/dist/tools/tool.interface.js.map +1 -1
  136. package/dist/tools/tool.registry.js +69 -1
  137. package/dist/tools/tool.registry.js.map +1 -1
  138. package/dist/tools/web/web.tool.js +139 -0
  139. package/dist/tools/web/web.tool.js.map +1 -0
  140. package/dist/web/auth.js +178 -3
  141. package/dist/web/auth.js.map +1 -1
  142. package/dist/web/channels.js +171 -0
  143. package/dist/web/channels.js.map +1 -0
  144. package/dist/web/public/css/style.css +1546 -0
  145. package/dist/web/public/index.html +804 -37
  146. package/dist/web/public/js/api.js +309 -0
  147. package/dist/web/public/js/app.js +1472 -0
  148. package/dist/web/public/js/ui.js +832 -0
  149. package/dist/web/public/js/utils.js +170 -0
  150. package/dist/web/server.js +937 -11
  151. package/dist/web/server.js.map +1 -1
  152. package/dist/web/task-queue.js +470 -0
  153. package/dist/web/task-queue.js.map +1 -0
  154. package/dist/web/web-config.js +143 -0
  155. package/dist/web/web-config.js.map +1 -0
  156. package/docs/App/344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +299 -0
  157. package/docs/App/346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +554 -0
  158. package/docs/Deployment_Guide_EN.md +288 -0
  159. package/docs/SELF-EVOLVE-GUIDE.md +313 -0
  160. package/docs/Technical_Manual_EN.md +216 -0
  161. package/docs/User_Manual_EN.md +314 -0
  162. package/docs/error-codes.md +198 -0
  163. package/docs/screenshots/cli-demo.png +0 -0
  164. package/docs/screenshots/feature-comparison.png +0 -0
  165. package/docs/screenshots/web-console.png +0 -0
  166. package/docs/self-evolve-implementation.md +165 -0
  167. package/docs/self-evolve.md +166 -0
  168. package/docs//344/272/247/345/223/201/345/274/200/345/217/221/346/226/207/346/241/243.md +614 -614
  169. 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
  170. package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +318 -358
  171. 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
  172. package/docs//346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +216 -303
  173. package/docs//346/236/266/346/236/204/344/270/216API.md +238 -238
  174. package/docs//347/224/250/346/210/267/346/211/213/345/206/214.md +196 -196
  175. package/docs//351/203/250/347/275/262/346/214/207/345/215/227.md +165 -165
  176. package/docs//351/203/250/347/275/262/350/257/264/346/230/216/344/271/246.md +288 -0
  177. package/docs//351/205/215/347/275/256/345/217/202/350/200/203.md +127 -127
  178. package/docs//351/241/265/351/235/242/345/212/237/350/203/275/345/244/215/347/233/230/344/270/216/345/206/222/347/203/237/346/265/213/350/257/225/346/212/245/345/221/212.html +117 -0
  179. package/package.json +108 -109
  180. package/tool-schema.json +117 -46
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestVerifier = exports.FileExistsVerifier = void 0;
4
+ /**
5
+ * 飞虹 Code (Muse Code 参照复刻)
6
+ * 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
7
+ *
8
+ * harness 验证器(可插拔):判定执行产出是否满足通过条件。
9
+ * - HarnessVerifier 接口:文件存在 / 测试通过 / 自定义规则均可实现接入(异步,跑测试需要)
10
+ * - FileExistsVerifier:检查工作区是否生成了指定文件(当前 mock 闭环的通过标准)
11
+ * - TestVerifier:在工作区运行测试命令判定通过——实例带 FAIL_TO_PASS 时
12
+ * 优先以这些失败用例为测试目标(`npm test -- <用例>`),否则跑默认测试套件。
13
+ * 命令经 sanitizeManagedCommand 约束(仅包管理器脚本,防命令注入)。
14
+ */
15
+ const fs_1 = require("fs");
16
+ const path_1 = require("path");
17
+ const exec_1 = require("../tools/shell/exec");
18
+ /** 文件存在验证器:默认检查方案文件是否生成 */
19
+ class FileExistsVerifier {
20
+ file;
21
+ id = 'file-exists';
22
+ constructor(file = 'SOLUTION.md') {
23
+ this.file = file;
24
+ }
25
+ async verify(cwd, _instance) {
26
+ return (0, fs_1.existsSync)((0, path_1.join)(cwd, this.file));
27
+ }
28
+ }
29
+ exports.FileExistsVerifier = FileExistsVerifier;
30
+ /** 测试通过型验证器:在工作区运行测试,退出码 0 即通过 */
31
+ class TestVerifier {
32
+ opts;
33
+ id = 'test-run';
34
+ constructor(opts = {}) {
35
+ this.opts = opts;
36
+ }
37
+ async verify(cwd, instance) {
38
+ // 有 FAIL_TO_PASS 用例时优先跑这些用例(回归到「失败用例现在应通过」);否则跑默认套件
39
+ const defaultCmd = instance.FAIL_TO_PASS.length > 0 ? `npm test -- ${instance.FAIL_TO_PASS.join(' ')}` : 'npm test';
40
+ const cmd = (0, exec_1.sanitizeManagedCommand)(this.opts.testCommand, defaultCmd);
41
+ if (!cmd)
42
+ return false; // 命令未通过受管约束,判为不通过
43
+ const res = await (0, exec_1.runCommand)(cmd, cwd, this.opts.timeoutMs ?? 120000);
44
+ return res.code === 0;
45
+ }
46
+ }
47
+ exports.TestVerifier = TestVerifier;
48
+ //# sourceMappingURL=verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../src/harness/verifier.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;GAUG;AACH,2BAAgC;AAChC,+BAA4B;AAC5B,8CAAyE;AASzE,2BAA2B;AAC3B,MAAa,kBAAkB;IAGA;IAFpB,EAAE,GAAG,aAAa,CAAC;IAE5B,YAA6B,OAAe,aAAa;QAA5B,SAAI,GAAJ,IAAI,CAAwB;IAAG,CAAC;IAE7D,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,SAA0B;QAClD,OAAO,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,CAAC;CACF;AARD,gDAQC;AAED,kCAAkC;AAClC,MAAa,YAAY;IAIJ;IAHV,EAAE,GAAG,UAAU,CAAC;IAEzB,YACmB,OAAqD,EAAE;QAAvD,SAAI,GAAJ,IAAI,CAAmD;IACvE,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,QAAyB;QACjD,oDAAoD;QACpD,MAAM,UAAU,GACd,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;QACnG,MAAM,GAAG,GAAG,IAAA,6BAAsB,EAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACtE,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC,CAAC,kBAAkB;QAC1C,MAAM,GAAG,GAAG,MAAM,IAAA,iBAAU,EAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;QACtE,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC;IACxB,CAAC;CACF;AAhBD,oCAgBC"}
package/dist/hello.js ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hello = hello;
4
+ /**
5
+ * Hello world 示例
6
+ */
7
+ function hello(name) {
8
+ return `Hello, ${name}!`;
9
+ }
10
+ if (require.main === module) {
11
+ const name = process.argv[2] ?? 'World';
12
+ console.log(hello(name));
13
+ }
14
+ //# sourceMappingURL=hello.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hello.js","sourceRoot":"","sources":["../src/hello.ts"],"names":[],"mappings":";;AAGA,sBAEC;AALD;;GAEG;AACH,SAAgB,KAAK,CAAC,IAAY;IAChC,OAAO,UAAU,IAAI,GAAG,CAAC;AAC3B,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ /**
3
+ * 飞虹 Code - 自动记忆总结
4
+ * 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
5
+ *
6
+ * 功能:
7
+ * - 每天 00:00 自动触发记忆总结
8
+ * - 读取当天短期记忆,调用 AI 模型生成总结
9
+ * - 更新长期记忆文件
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getSummaryHistory = getSummaryHistory;
13
+ exports.summarizeMemory = summarizeMemory;
14
+ exports.scheduleDailySummary = scheduleDailySummary;
15
+ exports.runImmediateSummary = runImmediateSummary;
16
+ const child_process_1 = require("child_process");
17
+ const fs_1 = require("fs");
18
+ const path_1 = require("path");
19
+ const index_1 = require("./index");
20
+ const SUMMARY_HISTORY_FILE = 'summarize-history.json';
21
+ /**
22
+ * 保存总结历史
23
+ */
24
+ function saveSummaryHistory(config, history) {
25
+ const historyFile = (0, path_1.join)(config.shortTermDir, SUMMARY_HISTORY_FILE);
26
+ let historyList = [];
27
+ if ((0, fs_1.existsSync)(historyFile)) {
28
+ try {
29
+ historyList = JSON.parse((0, fs_1.readFileSync)(historyFile, 'utf-8'));
30
+ }
31
+ catch {
32
+ historyList = [];
33
+ }
34
+ }
35
+ historyList.unshift(history);
36
+ // 只保留最近 90 天
37
+ const cutoff = new Date();
38
+ cutoff.setDate(cutoff.getDate() - 90);
39
+ historyList = historyList.filter(h => new Date(h.timestamp) > cutoff);
40
+ (0, fs_1.writeFileSync)(historyFile, JSON.stringify(historyList, null, 2), 'utf-8');
41
+ }
42
+ /**
43
+ * 获取总结历史
44
+ */
45
+ function getSummaryHistory(config, _limit = 30) {
46
+ const historyFile = (0, path_1.join)(config.shortTermDir, SUMMARY_HISTORY_FILE);
47
+ if (!(0, fs_1.existsSync)(historyFile))
48
+ return [];
49
+ try {
50
+ return JSON.parse((0, fs_1.readFileSync)(historyFile, 'utf-8'));
51
+ }
52
+ catch {
53
+ return [];
54
+ }
55
+ }
56
+ /**
57
+ * 调用本地 AI 模型进行总结
58
+ * 使用 fhcode CLI 直接调用
59
+ */
60
+ async function summarizeWithAI(prompt) {
61
+ // 使用默认的 agnes-2.5-pro 模型
62
+ const modelCmd = `echo '${prompt.replace(/'/g, "'\"'\"'")}' | node dist/cli/index.js --model agnes-2.5-pro`;
63
+ try {
64
+ const result = (0, child_process_1.execSync)(modelCmd, {
65
+ encoding: 'utf-8',
66
+ timeout: 60000,
67
+ cwd: (0, path_1.join)(process.cwd(), '..'),
68
+ });
69
+ return result.trim();
70
+ }
71
+ catch (e) {
72
+ // 如果 CLI 失败,返回原始内容标记为需要手动处理
73
+ return `[AI调用失败] ${e.message}\n\n请手动总结以下内容:\n${prompt}`;
74
+ }
75
+ }
76
+ /**
77
+ * 解析 AI 输出为结构化摘要
78
+ */
79
+ function parseSummaryOutput(output) {
80
+ const addedNotes = (output.match(/### 新增条目/g) || []).length;
81
+ const updatedNotes = (output.match(/### 更新条目/g) || []).length;
82
+ // 简单解析:按 ### 分割
83
+ const sections = output.split(/###\s+/).filter(s => s.trim());
84
+ const newEntries = [];
85
+ for (const section of sections) {
86
+ const lines = section.trim().split('\n').filter(l => l.trim());
87
+ if (lines.length > 0) {
88
+ const category = lines[0].replace(/^[\*\-#]+\s*/, '').trim();
89
+ const content = lines.slice(1).join('\n').trim();
90
+ if (content.length > 10) {
91
+ newEntries.push({ category, content });
92
+ }
93
+ }
94
+ }
95
+ return { addedNotes, updatedNotes, newEntries };
96
+ }
97
+ /**
98
+ * 执行记忆总结
99
+ */
100
+ async function summarizeMemory(config, forceDate) {
101
+ const cfg = (0, index_1.getMemoryConfig)(config);
102
+ const date = forceDate || new Date().toISOString().split('T')[0];
103
+ try {
104
+ // 读取当天短期记忆
105
+ const shortTerm = (0, index_1.readShortTerm)(cfg, new Date(date));
106
+ if (!shortTerm || shortTerm.trim().length === 0) {
107
+ return {
108
+ success: true,
109
+ date,
110
+ addedNotes: 0,
111
+ updatedNotes: 0,
112
+ summary: '今日无记录',
113
+ };
114
+ }
115
+ // 生成总结提示词
116
+ const prompt = (0, index_1.generateSummaryPrompt)(cfg, date);
117
+ // 调用 AI 模型总结(这里使用占位实现,实际需要接入 LLM API)
118
+ // 由于 Web 环境限制,我们先使用规则总结
119
+ const aiOutput = await summarizeWithAI(prompt);
120
+ parseSummaryOutput(aiOutput);
121
+ // 提取关键信息(简化版:直接提取带 **的条目)
122
+ const lines = shortTerm.split('\n').filter(l => l.trim().startsWith('- **'));
123
+ let added = 0;
124
+ let updated = 0;
125
+ for (const line of lines) {
126
+ const match = line.match(/- \*\*(.+?)\*\*:\s*(.+)/);
127
+ if (match) {
128
+ const category = match[1].trim();
129
+ const content = match[2].trim();
130
+ if (content.length > 5) {
131
+ (0, index_1.appendLongTerm)(cfg, {
132
+ title: category,
133
+ summarizedFrom: date,
134
+ category: '技术修复',
135
+ content,
136
+ });
137
+ added++;
138
+ }
139
+ }
140
+ }
141
+ // 保存总结历史
142
+ saveSummaryHistory(cfg, {
143
+ date,
144
+ timestamp: new Date().toISOString(),
145
+ addedNotes: added,
146
+ updatedNotes: updated,
147
+ success: true,
148
+ });
149
+ return {
150
+ success: true,
151
+ date,
152
+ addedNotes: added,
153
+ updatedNotes: updated,
154
+ summary: `成功总结 ${added} 条记录`,
155
+ };
156
+ }
157
+ catch (e) {
158
+ // 保存失败记录
159
+ saveSummaryHistory(cfg, {
160
+ date,
161
+ timestamp: new Date().toISOString(),
162
+ addedNotes: 0,
163
+ updatedNotes: 0,
164
+ success: false,
165
+ error: e.message,
166
+ });
167
+ return {
168
+ success: false,
169
+ date,
170
+ addedNotes: 0,
171
+ updatedNotes: 0,
172
+ error: e.message,
173
+ };
174
+ }
175
+ }
176
+ /**
177
+ * 注册定时任务(每天 00:00 执行)
178
+ */
179
+ function scheduleDailySummary(config) {
180
+ const cfg = (0, index_1.getMemoryConfig)(config);
181
+ // 计算到明天 00:00 的毫秒数
182
+ const now = new Date();
183
+ const tomorrow = new Date(now);
184
+ tomorrow.setUTCDate(tomorrow.getUTCDate() + 1);
185
+ tomorrow.setUTCHours(0, 0, 0, 0);
186
+ const msUntilMidnight = tomorrow.getTime() - now.getTime();
187
+ // 设置定时器
188
+ setTimeout(async () => {
189
+ console.log('[记忆总结] 开始每日总结...');
190
+ const result = await summarizeMemory(cfg);
191
+ console.log(`[记忆总结] ${result.date}: ${result.summary || result.error}`);
192
+ // 每分钟检查一次,确保每天执行
193
+ setInterval(async () => {
194
+ const now = new Date();
195
+ if (now.getUTCHours() === 0 && now.getUTCMinutes() === 0) {
196
+ await summarizeMemory(cfg);
197
+ }
198
+ }, 60000); // 每分钟检查
199
+ }, msUntilMidnight);
200
+ console.log(`[记忆总结] 将在 ${msUntilMidnight / 1000 / 60} 分钟后执行首次总结`);
201
+ }
202
+ /**
203
+ * 立即执行一次总结(用于测试或手动触发)
204
+ */
205
+ async function runImmediateSummary(config) {
206
+ return summarizeMemory(config);
207
+ }
208
+ //# sourceMappingURL=auto-summarize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-summarize.js","sourceRoot":"","sources":["../../src/memory/auto-summarize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ /**
3
+ * 飞虹 Code - 记忆管理系统
4
+ * 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
5
+ *
6
+ * 记忆系统:
7
+ * - 短期记忆:每日工作日志,追加写入
8
+ * - 长期记忆:经过总结提炼的知识点,滚动更新
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.getMemoryConfig = getMemoryConfig;
12
+ exports.getShortTermPath = getShortTermPath;
13
+ exports.appendShortTerm = appendShortTerm;
14
+ exports.readShortTerm = readShortTerm;
15
+ exports.readAllShortTerm = readAllShortTerm;
16
+ exports.readLongTerm = readLongTerm;
17
+ exports.writeLongTerm = writeLongTerm;
18
+ exports.appendLongTerm = appendLongTerm;
19
+ exports.getMemoryStats = getMemoryStats;
20
+ exports.generateSummaryPrompt = generateSummaryPrompt;
21
+ exports.cleanupShortTerm = cleanupShortTerm;
22
+ const fs_1 = require("fs");
23
+ const path_1 = require("path");
24
+ const DEFAULT_CONFIG = {
25
+ shortTermDir: (0, path_1.join)(process.env.HOME || '', '.feihong-code', 'memory'),
26
+ longTermFile: (0, path_1.join)(process.env.HOME || '', '.feihong-code', 'memory', 'MEMORY.md'),
27
+ maxHistoryDays: 30,
28
+ summarizeThreshold: 5,
29
+ };
30
+ /**
31
+ * 获取或创建记忆配置
32
+ */
33
+ function getMemoryConfig(overrides) {
34
+ return { ...DEFAULT_CONFIG, ...overrides };
35
+ }
36
+ /**
37
+ * 获取当天短期记忆文件路径
38
+ */
39
+ function getShortTermPath(config, date) {
40
+ const d = date || new Date();
41
+ const dateStr = d.toISOString().split('T')[0]; // YYYY-MM-DD
42
+ return (0, path_1.join)(config.shortTermDir, `${dateStr}.md`);
43
+ }
44
+ /**
45
+ * 确保目录存在
46
+ */
47
+ function ensureDir(config) {
48
+ (0, fs_1.mkdirSync)(config.shortTermDir, { recursive: true });
49
+ if (!(0, fs_1.existsSync)(config.longTermFile)) {
50
+ (0, fs_1.writeFileSync)(config.longTermFile, '# 长期记忆\n\n## 项目概览\n\n暂无内容。\n', 'utf-8');
51
+ }
52
+ }
53
+ /**
54
+ * 追加短期记忆条目
55
+ */
56
+ function appendShortTerm(config, entry) {
57
+ ensureDir(config);
58
+ const path = getShortTermPath(config);
59
+ const timestamp = new Date().toISOString();
60
+ const content = `
61
+ ## ${entry.title} (${timestamp.split('T')[1]?.split('.')[0] || 'unknown'})
62
+
63
+ - **类型**: ${entry.type}
64
+ - **时间**: ${timestamp}
65
+
66
+ ${entry.content}
67
+ `;
68
+ (0, fs_1.appendFileSync)(path, content, 'utf-8');
69
+ return path;
70
+ }
71
+ /**
72
+ * 读取指定日期的短期记忆
73
+ */
74
+ function readShortTerm(config, date) {
75
+ const path = getShortTermPath(config, date);
76
+ if (!(0, fs_1.existsSync)(path))
77
+ return '';
78
+ return (0, fs_1.readFileSync)(path, 'utf-8');
79
+ }
80
+ /**
81
+ * 读取所有短期记忆(最近 N 天)
82
+ */
83
+ function readAllShortTerm(config) {
84
+ ensureDir(config);
85
+ const memories = new Map();
86
+ const now = new Date();
87
+ for (let i = 0; i < config.maxHistoryDays; i++) {
88
+ const d = new Date(now);
89
+ d.setDate(d.getDate() - i);
90
+ const dateStr = d.toISOString().split('T')[0];
91
+ const path = (0, path_1.join)(config.shortTermDir, `${dateStr}.md`);
92
+ if ((0, fs_1.existsSync)(path)) {
93
+ memories.set(dateStr, (0, fs_1.readFileSync)(path, 'utf-8'));
94
+ }
95
+ }
96
+ return memories;
97
+ }
98
+ /**
99
+ * 读取长期记忆
100
+ */
101
+ function readLongTerm(config) {
102
+ ensureDir(config);
103
+ if (!(0, fs_1.existsSync)(config.longTermFile))
104
+ return '';
105
+ return (0, fs_1.readFileSync)(config.longTermFile, 'utf-8');
106
+ }
107
+ /**
108
+ * 写入长期记忆
109
+ */
110
+ function writeLongTerm(config, content) {
111
+ ensureDir(config);
112
+ (0, fs_1.writeFileSync)(config.longTermFile, content, 'utf-8');
113
+ }
114
+ /**
115
+ * 追加长期记忆条目
116
+ */
117
+ function appendLongTerm(config, note) {
118
+ ensureDir(config);
119
+ const id = `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
120
+ const created = new Date().toISOString();
121
+ const content = `
122
+ ## ${note.category}: ${note.title}
123
+
124
+ - **来源**: ${note.summarizedFrom}
125
+ - **创建时间**: ${created}
126
+ - **ID**: ${id}
127
+
128
+ ${note.content}
129
+ `;
130
+ (0, fs_1.appendFileSync)(config.longTermFile, content, 'utf-8');
131
+ return id;
132
+ }
133
+ /**
134
+ * 获取记忆统计
135
+ */
136
+ function getMemoryStats(config) {
137
+ ensureDir(config);
138
+ // 统计短期记忆文件数
139
+ let shortTermFiles = 0;
140
+ if ((0, fs_1.existsSync)(config.shortTermDir)) {
141
+ const files = require('fs').readdirSync(config.shortTermDir);
142
+ shortTermFiles = files.filter((f) => f.endsWith('.md')).length;
143
+ }
144
+ // 统计长期记忆条目数
145
+ let longTermNotes = 0;
146
+ const longContent = readLongTerm(config);
147
+ longTermNotes = (longContent.match(/## /g) || []).length;
148
+ // 查找最后总结时间
149
+ let lastSummarize = null;
150
+ const match = longContent.match(/创建时间\*: (\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})/);
151
+ if (match) {
152
+ lastSummarize = match[1];
153
+ }
154
+ return {
155
+ shortTermFiles,
156
+ longTermNotes,
157
+ lastSummarize,
158
+ };
159
+ }
160
+ /**
161
+ * 生成记忆摘要模板(供 AI 总结使用)
162
+ */
163
+ function generateSummaryPrompt(config, date) {
164
+ const content = readShortTerm(config, new Date(date));
165
+ const longTerm = readLongTerm(config);
166
+ return `你是一位专业的技术记录员。请分析以下工作日志,提取关键信息并总结到长期记忆中。
167
+
168
+ ## 短期记忆 (${date})
169
+
170
+ \`\`\`
171
+ ${content || '(无记录)'}
172
+ \`\`\`
173
+
174
+ ## 现有长期记忆
175
+
176
+ \`\`\`
177
+ ${longTerm || '(无)'}
178
+ \`\`\`
179
+
180
+ ## 要求
181
+
182
+ 1. 提取今天的关键技术问题和解决方案
183
+ 2. 归纳用户偏好和习惯
184
+ 3. 记录项目进展和重要决策
185
+ 4. 如果有重复内容,合并到现有长期记忆中
186
+ 5. 保持简洁,每条记录不超过 5 行
187
+ 6. 使用 Markdown 格式
188
+
189
+ ## 输出格式
190
+
191
+ 请按以下格式输出总结(仅输出内容,不要其他说明):
192
+
193
+ ### 新增条目
194
+ (如果有新内容)
195
+
196
+ ### 更新条目
197
+ (如果有需要更新的现有内容)
198
+
199
+ ### 无变化
200
+ (如果没有需要更新的内容)
201
+ `;
202
+ }
203
+ /**
204
+ * 清理过期的短期记忆
205
+ */
206
+ function cleanupShortTerm(config) {
207
+ if (!(0, fs_1.existsSync)(config.shortTermDir))
208
+ return 0;
209
+ const now = new Date();
210
+ let deleted = 0;
211
+ const fs = require('fs');
212
+ const files = fs.readdirSync(config.shortTermDir);
213
+ for (const file of files) {
214
+ if (!file.endsWith('.md'))
215
+ continue;
216
+ const dateMatch = file.match(/^(\d{4}-\d{2}-\d{2})\.md$/);
217
+ if (!dateMatch)
218
+ continue;
219
+ const fileDate = new Date(dateMatch[1]);
220
+ const ageDays = (now.getTime() - fileDate.getTime()) / (1000 * 60 * 60 * 24);
221
+ if (ageDays > config.maxHistoryDays) {
222
+ fs.unlinkSync((0, path_1.join)(config.shortTermDir, file));
223
+ deleted++;
224
+ }
225
+ }
226
+ return deleted;
227
+ }
228
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"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"}