shipmyagent 1.0.239 → 1.0.243

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 (107) hide show
  1. package/bin/main/context/context-agent/components/RuntimeOrchestrator.d.ts.map +1 -1
  2. package/bin/main/context/context-agent/components/RuntimeOrchestrator.js +10 -4
  3. package/bin/main/context/context-agent/components/RuntimeOrchestrator.js.map +1 -1
  4. package/bin/main/context/manager/RequestContext.d.ts.map +1 -1
  5. package/bin/main/context/manager/RequestContext.js +29 -0
  6. package/bin/main/context/manager/RequestContext.js.map +1 -1
  7. package/bin/main/context/manager/RuntimeState.d.ts.map +1 -1
  8. package/bin/main/context/manager/RuntimeState.js +0 -5
  9. package/bin/main/context/manager/RuntimeState.js.map +1 -1
  10. package/bin/main/prompts/system/SystemDomain.d.ts.map +1 -1
  11. package/bin/main/prompts/system/SystemDomain.js +1 -10
  12. package/bin/main/prompts/system/SystemDomain.js.map +1 -1
  13. package/bin/main/prompts/system/assets/core.prompt.txt +5 -1
  14. package/bin/main/prompts/system/assets/service.prompt.txt +3 -2
  15. package/bin/main/server/commands/Start.js +2 -2
  16. package/bin/main/server/constants/Ship.d.ts.map +1 -1
  17. package/bin/main/server/constants/Ship.js +2 -0
  18. package/bin/main/server/constants/Ship.js.map +1 -1
  19. package/bin/main/server/constants/ShipSchema.d.ts.map +1 -1
  20. package/bin/main/server/constants/ShipSchema.js +2 -0
  21. package/bin/main/server/constants/ShipSchema.js.map +1 -1
  22. package/bin/main/server/daemon/CliArgs.js +5 -5
  23. package/bin/main/server/daemon/CliArgs.js.map +1 -1
  24. package/bin/main/server/env/Paths.d.ts.map +1 -1
  25. package/bin/main/server/env/Paths.js +34 -0
  26. package/bin/main/server/env/Paths.js.map +1 -1
  27. package/bin/main/service/Services.d.ts.map +1 -1
  28. package/bin/main/service/Services.js +2 -0
  29. package/bin/main/service/Services.js.map +1 -1
  30. package/bin/main/tools/shell/Tool.d.ts.map +1 -1
  31. package/bin/main/tools/shell/Tool.js +199 -12
  32. package/bin/main/tools/shell/Tool.js.map +1 -1
  33. package/bin/main/types/ShipConfig.d.ts.map +1 -1
  34. package/bin/services/chat/channels/qq/QQ.d.ts.map +1 -1
  35. package/bin/services/chat/channels/qq/QQ.js +172 -149
  36. package/bin/services/chat/channels/qq/QQ.js.map +1 -1
  37. package/bin/services/chat/channels/qq/VoiceInput.d.ts.map +1 -1
  38. package/bin/services/chat/channels/qq/VoiceInput.js +66 -16
  39. package/bin/services/chat/channels/qq/VoiceInput.js.map +1 -1
  40. package/bin/services/chat/runtime/ChatQueueWorker.d.ts.map +1 -1
  41. package/bin/services/chat/runtime/ChatQueueWorker.js +92 -17
  42. package/bin/services/chat/runtime/ChatQueueWorker.js.map +1 -1
  43. package/bin/services/memory/Action.d.ts.map +1 -0
  44. package/bin/services/memory/Action.js +151 -0
  45. package/bin/services/memory/Action.js.map +1 -0
  46. package/bin/services/memory/Index.d.ts.map +1 -0
  47. package/bin/services/memory/Index.js +258 -0
  48. package/bin/services/memory/Index.js.map +1 -0
  49. package/bin/services/memory/runtime/Flush.d.ts.map +1 -0
  50. package/bin/services/memory/runtime/Flush.js +63 -0
  51. package/bin/services/memory/runtime/Flush.js.map +1 -0
  52. package/bin/services/memory/runtime/Indexer.d.ts.map +1 -0
  53. package/bin/services/memory/runtime/Indexer.js +344 -0
  54. package/bin/services/memory/runtime/Indexer.js.map +1 -0
  55. package/bin/services/memory/runtime/Search.d.ts.map +1 -0
  56. package/bin/services/memory/runtime/Search.js +65 -0
  57. package/bin/services/memory/runtime/Search.js.map +1 -0
  58. package/bin/services/memory/runtime/Store.d.ts.map +1 -0
  59. package/bin/services/memory/runtime/Store.js +265 -0
  60. package/bin/services/memory/runtime/Store.js.map +1 -0
  61. package/bin/services/memory/runtime/SystemProvider.d.ts.map +1 -1
  62. package/bin/services/memory/runtime/SystemProvider.js +28 -43
  63. package/bin/services/memory/runtime/SystemProvider.js.map +1 -1
  64. package/bin/services/memory/runtime/Writer.d.ts.map +1 -0
  65. package/bin/services/memory/runtime/Writer.js +141 -0
  66. package/bin/services/memory/runtime/Writer.js.map +1 -0
  67. package/bin/services/memory/types/Memory.d.ts.map +1 -1
  68. package/bin/services/memory/types/Memory.js +7 -0
  69. package/bin/services/memory/types/Memory.js.map +1 -1
  70. package/bin/services/skills/Index.d.ts.map +1 -1
  71. package/bin/services/skills/Index.js +40 -10
  72. package/bin/services/skills/Index.js.map +1 -1
  73. package/bin/services/skills/PROMPT.txt +10 -6
  74. package/bin/services/skills/runtime/Prompt.d.ts.map +1 -1
  75. package/bin/services/skills/runtime/Prompt.js +39 -37
  76. package/bin/services/skills/runtime/Prompt.js.map +1 -1
  77. package/bin/services/skills/runtime/SystemProvider.js +1 -1
  78. package/bin/services/task/Action.d.ts.map +1 -1
  79. package/bin/services/task/Action.js +0 -4
  80. package/bin/services/task/Action.js.map +1 -1
  81. package/bin/services/task/Index.js +2 -2
  82. package/bin/services/task/PROMPT.txt +4 -5
  83. package/bin/services/task/Scheduler.d.ts.map +1 -1
  84. package/bin/services/task/Scheduler.js +0 -8
  85. package/bin/services/task/Scheduler.js.map +1 -1
  86. package/bin/services/task/runtime/Runner.d.ts.map +1 -1
  87. package/bin/services/task/runtime/Runner.js +0 -65
  88. package/bin/services/task/runtime/Runner.js.map +1 -1
  89. package/bin/services/task/types/Task.d.ts.map +1 -1
  90. package/bin/services/task/types/TaskCommand.d.ts.map +1 -1
  91. package/package.json +1 -1
  92. package/src/main/prompts/system/assets/core.prompt.txt +5 -1
  93. package/src/main/prompts/system/assets/service.prompt.txt +3 -2
  94. package/src/services/README.md +1 -1
  95. package/src/services/skills/PROMPT.txt +10 -6
  96. package/src/services/task/PROMPT.txt +4 -5
  97. package/test/chat/chat-queue-worker-burst-merge.test.mjs +165 -0
  98. package/test/chat/qq-voice-input.test.mjs +22 -0
  99. package/bin/services/memory/runtime/Extractor.d.ts.map +0 -1
  100. package/bin/services/memory/runtime/Extractor.js +0 -229
  101. package/bin/services/memory/runtime/Extractor.js.map +0 -1
  102. package/bin/services/memory/runtime/Manager.d.ts.map +0 -1
  103. package/bin/services/memory/runtime/Manager.js +0 -156
  104. package/bin/services/memory/runtime/Manager.js.map +0 -1
  105. package/bin/services/memory/runtime/Service.d.ts.map +0 -1
  106. package/bin/services/memory/runtime/Service.js +0 -145
  107. package/bin/services/memory/runtime/Service.js.map +0 -1
@@ -1,229 +0,0 @@
1
- import { generateText, isTextUIPart, } from "ai";
2
- import { getLogger } from "../../../utils/logger/Logger.js";
3
- function toUiParts(message) {
4
- return Array.isArray(message?.parts) ? message.parts : [];
5
- }
6
- /**
7
- * 剥离入站消息里的 `<info>...</info>` 元信息块。
8
- *
9
- * 关键点(中文)
10
- * - chat ingress 会在 user 文本顶部注入 `<info>`,用于路由与权限判断。
11
- * - memory 提取只需要用户可见正文;移除 `<info>` 可显著减少无效字符占用。
12
- */
13
- function stripIngressInfoBlock(raw) {
14
- const source = String(raw ?? "");
15
- if (!source)
16
- return "";
17
- const normalized = source.replace(/\r\n/g, "\n");
18
- const matched = normalized.match(/^<info>\n[\s\S]*?\n<\/info>(?:\n\n?([\s\S]*))?$/);
19
- if (!matched)
20
- return normalized;
21
- return String(matched[1] ?? "").trim();
22
- }
23
- /**
24
- * 从上下文消息中提取记忆摘要。
25
- *
26
- * 关键点(中文)
27
- * - LLM 处理较重,建议异步触发
28
- * - context/messages 通过 context 显式注入
29
- */
30
- export async function extractMemoryFromContextMessages(params) {
31
- const { context: runtime, contextId, entryRange, model } = params;
32
- const [startIndex, endIndex] = entryRange;
33
- const logger = getLogger(runtime.rootPath, "info");
34
- try {
35
- const serviceContext = runtime.context;
36
- const contextPersistor = serviceContext.getPersistor(contextId);
37
- const messages = await contextPersistor.slice(startIndex, endIndex);
38
- const messagesText = (() => {
39
- const lines = [];
40
- for (const message of messages) {
41
- if (!message || typeof message !== "object")
42
- continue;
43
- const role = message.role === "user" ? "User" : "Assistant";
44
- const parts = toUiParts(message);
45
- const rawText = parts
46
- .filter(isTextUIPart)
47
- .map((part) => String(part.text ?? ""))
48
- .join("\n")
49
- .trim();
50
- const text = message.role === "user" ? stripIngressInfoBlock(rawText).trim() : rawText;
51
- if (!text)
52
- continue;
53
- lines.push(`${role}: ${text}`);
54
- }
55
- return lines.join("\n\n");
56
- })();
57
- if (!messagesText || !messagesText.trim()) {
58
- return {
59
- timestamp: Date.now(),
60
- roundRange: entryRange,
61
- summary: "本轮次暂无有效对话内容。",
62
- keyFacts: [],
63
- };
64
- }
65
- const result = await generateText({
66
- model,
67
- system: [
68
- {
69
- role: "system",
70
- content: `你是一个专业的对话记忆提取助手。你的任务是从用户的对话历史中提取关键信息和摘要。
71
-
72
- ## 提取要求
73
-
74
- 1. **摘要内容**(200-500字):
75
- - 总结本轮对话的主要主题和讨论内容
76
- - 突出重要的决策和结论
77
- - 保留关键的技术细节和参数
78
- - 使用简洁的中文
79
-
80
- 2. **关键事实**(3-10条):
81
- - 提取可验证的事实信息
82
- - 用户的偏好和习惯
83
- - 项目相关的重要信息
84
- - 技术决策和配置
85
-
86
- 3. **格式要求**:
87
- - 以 JSON 格式返回
88
- - 包含 summary(字符串)和 keyFacts(字符串数组)
89
- - 不要包含不必要的解释或前缀
90
-
91
- ## 示例输出
92
-
93
- \`\`\`json
94
- {
95
- "summary": "用户修复了上下文管理的重复消息问题,修改了 loadRecentMessagesAsText 方法移除最后一条 user 消息。随后用户希望优化记忆机制,决定使用固定轮次触发(每25轮)和 LLM 智能压缩策略。",
96
- "keyFacts": [
97
- "用户倾向使用简体中文",
98
- "项目位于 /Users/wzg/Desktop/projects/shipmyagent",
99
- "修改了 store.ts 的 loadRecentMessagesAsText 方法",
100
- "决定每25轮触发记忆提取",
101
- "选择 LLM 智能压缩策略"
102
- ]
103
- }
104
- \`\`\``,
105
- },
106
- ],
107
- prompt: `请从以下对话历史中提取摘要和关键事实:
108
-
109
- ${messagesText}
110
-
111
- ---
112
-
113
- 请以 JSON 格式返回提取结果。`,
114
- });
115
- let summary = "";
116
- let keyFacts = [];
117
- try {
118
- const text = result.text.trim();
119
- const jsonMatch = text.match(/```(?:json)?\s*(\{[\s\S]*?\})\s*```/) ||
120
- text.match(/(\{[\s\S]*\})/);
121
- if (jsonMatch) {
122
- const parsed = JSON.parse(jsonMatch[1]);
123
- summary = String(parsed.summary || "");
124
- keyFacts = Array.isArray(parsed.keyFacts)
125
- ? parsed.keyFacts.map(String)
126
- : [];
127
- }
128
- else {
129
- summary = text;
130
- keyFacts = [];
131
- }
132
- }
133
- catch (parseError) {
134
- summary = result.text.trim();
135
- keyFacts = [];
136
- await logger.log("warn", "Failed to parse memory extraction JSON, using raw text", {
137
- contextId,
138
- entryRange,
139
- error: String(parseError),
140
- });
141
- }
142
- return {
143
- timestamp: Date.now(),
144
- roundRange: entryRange,
145
- summary: summary || "提取摘要失败",
146
- keyFacts,
147
- };
148
- }
149
- catch (error) {
150
- await logger.log("error", "Failed to extract memory from context messages", {
151
- contextId,
152
- entryRange,
153
- error: String(error),
154
- });
155
- return {
156
- timestamp: Date.now(),
157
- roundRange: entryRange,
158
- summary: `记忆提取失败:${String(error)}`,
159
- keyFacts: [],
160
- };
161
- }
162
- }
163
- /**
164
- * 使用 LLM 压缩记忆文件。
165
- *
166
- * 关键点(中文)
167
- * - 压缩失败时返回原文,避免数据丢失
168
- */
169
- export async function compressMemory(params) {
170
- const { context: runtime, contextId, currentContent, targetChars, model } = params;
171
- const logger = getLogger(runtime.rootPath, "info");
172
- try {
173
- const result = await generateText({
174
- model,
175
- system: [
176
- {
177
- role: "system",
178
- content: `你是一个专业的记忆压缩助手。你的任务是压缩对话记忆文件,保留最重要的信息。
179
-
180
- ## 压缩要求
181
-
182
- 1. **保留核心信息**:
183
- - 用户的基本信息和偏好
184
- - 重要的技术决策和配置
185
- - 关键的项目信息
186
- - 最近的对话摘要(优先保留)
187
-
188
- 2. **删除冗余内容**:
189
- - 重复的信息
190
- - 过时的细节
191
- - 次要的技术讨论
192
- - 临时性的内容
193
-
194
- 3. **格式保持**:
195
- - 保持原有的 Markdown 格式
196
- - 保持清晰的结构层次
197
- - 使用简洁的中文
198
-
199
- 4. **目标长度**:
200
- - 压缩后的内容应在 ${targetChars} 字符以内
201
- - 优先保留最近和最重要的信息`,
202
- },
203
- ],
204
- prompt: `请将以下记忆内容压缩到约 ${targetChars} 字符以内,保留最重要的信息:
205
-
206
- ${currentContent}
207
-
208
- ---
209
-
210
- 请直接返回压缩后的 Markdown 内容,不要添加任何解释或前缀。`,
211
- });
212
- const compressed = result.text.trim();
213
- await logger.log("info", "Memory compressed successfully", {
214
- contextId,
215
- originalChars: currentContent.length,
216
- compressedChars: compressed.length,
217
- targetChars,
218
- });
219
- return compressed;
220
- }
221
- catch (error) {
222
- await logger.log("error", "Failed to compress memory", {
223
- contextId,
224
- error: String(error),
225
- });
226
- return currentContent;
227
- }
228
- }
229
- //# sourceMappingURL=Extractor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Extractor.js","sourceRoot":"","sources":["../../../../src/services/memory/runtime/Extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,YAAY,GAKb,MAAM,IAAI,CAAC;AAMZ,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKpD,SAAS,SAAS,CAAC,OAA0D;IAC3E,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAAC,GAAW;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACpF,IAAI,CAAC,OAAO;QAAE,OAAO,UAAU,CAAC;IAChC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACzC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,MAGC;IAED,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAClE,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC;IAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;QACvC,MAAM,gBAAgB,GAAG,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEpE,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE;YACzB,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;oBAAE,SAAS;gBACtD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;gBAC5D,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;gBACjC,MAAM,OAAO,GAAG,KAAK;qBAClB,MAAM,CAAC,YAAY,CAAC;qBACpB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;qBACtC,IAAI,CAAC,IAAI,CAAC;qBACV,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,GACR,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC5E,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,EAAE,CAAC;QAEL,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1C,OAAO;gBACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,UAAU,EAAE,UAAU;gBACtB,OAAO,EAAE,cAAc;gBACvB,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;YAChC,KAAK;YACL,MAAM,EAAE;gBACN;oBACE,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCZ;iBACE;aACF;YACD,MAAM,EAAE;;EAEZ,YAAY;;;;kBAII;SACb,CAAC,CAAC;QAEH,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,QAAQ,GAAa,EAAE,CAAC;QAE5B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,SAAS,GACb,IAAI,CAAC,KAAK,CAAC,qCAAqC,CAAC;gBACjD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAE9B,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBACvC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;oBACvC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;oBAC7B,CAAC,CAAC,EAAE,CAAC;YACT,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,IAAI,CAAC;gBACf,QAAQ,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7B,QAAQ,GAAG,EAAE,CAAC;YACd,MAAM,MAAM,CAAC,GAAG,CACd,MAAM,EACN,wDAAwD,EACxD;gBACE,SAAS;gBACT,UAAU;gBACV,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC;aAC1B,CACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,UAAU,EAAE,UAAU;YACtB,OAAO,EAAE,OAAO,IAAI,QAAQ;YAC5B,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,gDAAgD,EAAE;YAC1E,SAAS;YACT,UAAU;YACV,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;SACrB,CAAC,CAAC;QAEH,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,UAAU,EAAE,UAAU;YACtB,OAAO,EAAE,UAAU,MAAM,CAAC,KAAK,CAAC,EAAE;YAClC,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAGC;IAED,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACnF,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;YAChC,KAAK;YACL,MAAM,EAAE;gBACN;oBACE,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;gBAsBH,WAAW;mBACR;iBACV;aACF;YACD,MAAM,EAAE,gBAAgB,WAAW;;EAEvC,cAAc;;;;mCAImB;SAC9B,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAEtC,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,gCAAgC,EAAE;YACzD,SAAS;YACT,aAAa,EAAE,cAAc,CAAC,MAAM;YACpC,eAAe,EAAE,UAAU,CAAC,MAAM;YAClC,WAAW;SACZ,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,2BAA2B,EAAE;YACrD,SAAS;YACT,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;SACrB,CAAC,CAAC;QAEH,OAAO,cAAc,CAAC;IACxB,CAAC;AACH,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Manager.d.ts","sourceRoot":"","sources":["../../../../src/services/memory/runtime/Manager.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM;IAUhD,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAUvB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAK1B,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBzC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAsBzB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASzC,QAAQ,IAAI,OAAO,CAAC;QACxB,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IAYI,QAAQ,CAAC,IAAI,EAAE;QACnB,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAM7B,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,sBAAsB;CAiB/B"}
@@ -1,156 +0,0 @@
1
- import fs from "fs-extra";
2
- import { getShipContextMemoryPrimaryPath, getShipContextMemoryBackupDirPath, getShipContextMemoryBackupPath, getShipContextMemoryMetaPath, } from "../../../main/server/env/Paths.js";
3
- /**
4
- * MemoryManager:管理单个 context 的记忆文件(memory/Primary.md)。
5
- *
6
- * 关键点(中文)
7
- * - 通过 context 显式传入 rootPath
8
- * - 不依赖任何全局 runtime getter
9
- */
10
- export class MemoryManager {
11
- rootPath;
12
- contextId;
13
- filePath;
14
- constructor(context, contextId) {
15
- const rootPath = String(context.rootPath || "").trim();
16
- if (!rootPath)
17
- throw new Error("MemoryManager requires a non-empty rootPath");
18
- const key = String(contextId || "").trim();
19
- if (!key)
20
- throw new Error("MemoryManager requires a non-empty contextId");
21
- this.rootPath = rootPath;
22
- this.contextId = key;
23
- this.filePath = getShipContextMemoryPrimaryPath(this.rootPath, this.contextId);
24
- }
25
- async load() {
26
- try {
27
- if (!(await fs.pathExists(this.filePath)))
28
- return "";
29
- const content = await fs.readFile(this.filePath, "utf-8");
30
- return String(content || "").trim();
31
- }
32
- catch {
33
- return "";
34
- }
35
- }
36
- async getSize() {
37
- const content = await this.load();
38
- return content.length;
39
- }
40
- async append(entry) {
41
- try {
42
- await fs.ensureFile(this.filePath);
43
- const formattedEntry = this.formatEntry(entry);
44
- const existingContent = await this.load();
45
- let newContent;
46
- if (!existingContent) {
47
- newContent = this.createInitialStructure(entry);
48
- }
49
- else {
50
- newContent = `${existingContent}\n\n${formattedEntry}`;
51
- }
52
- await fs.writeFile(this.filePath, newContent, "utf-8");
53
- }
54
- catch (error) {
55
- throw new Error(`Failed to append memory: ${String(error)}`);
56
- }
57
- }
58
- async backup() {
59
- try {
60
- const content = await this.load();
61
- if (!content)
62
- return "";
63
- const backupDir = getShipContextMemoryBackupDirPath(this.rootPath, this.contextId);
64
- await fs.ensureDir(backupDir);
65
- const timestamp = Date.now();
66
- const backupPath = getShipContextMemoryBackupPath(this.rootPath, this.contextId, timestamp);
67
- await fs.writeFile(backupPath, content, "utf-8");
68
- return backupPath;
69
- }
70
- catch (error) {
71
- throw new Error(`Failed to backup memory: ${String(error)}`);
72
- }
73
- }
74
- async overwrite(content) {
75
- try {
76
- await fs.ensureFile(this.filePath);
77
- await fs.writeFile(this.filePath, content, "utf-8");
78
- }
79
- catch (error) {
80
- throw new Error(`Failed to overwrite memory: ${String(error)}`);
81
- }
82
- }
83
- async loadMeta() {
84
- try {
85
- const metaPath = getShipContextMemoryMetaPath(this.rootPath, this.contextId);
86
- if (!(await fs.pathExists(metaPath)))
87
- return {};
88
- const content = await fs.readFile(metaPath, "utf-8");
89
- return JSON.parse(content);
90
- }
91
- catch {
92
- return {};
93
- }
94
- }
95
- async saveMeta(meta) {
96
- try {
97
- const metaPath = getShipContextMemoryMetaPath(this.rootPath, this.contextId);
98
- await fs.ensureFile(metaPath);
99
- await fs.writeFile(metaPath, JSON.stringify(meta, null, 2), "utf-8");
100
- }
101
- catch (error) {
102
- throw new Error(`Failed to save memory meta: ${String(error)}`);
103
- }
104
- }
105
- /**
106
- * 格式化记忆时间戳(UTC)。
107
- *
108
- * 关键点(中文)
109
- * - 统一使用 ISO8601,避免跨时区阅读歧义。
110
- */
111
- formatMemoryTimestamp(timestamp) {
112
- const date = new Date(timestamp);
113
- if (Number.isNaN(date.getTime()))
114
- return "invalid-date";
115
- return date.toISOString();
116
- }
117
- formatEntry(entry) {
118
- const lines = [];
119
- const date = this.formatMemoryTimestamp(entry.timestamp);
120
- const [start, end] = entry.roundRange;
121
- lines.push(`### [轮次 ${start}-${end}] ${date}`);
122
- lines.push("");
123
- lines.push(entry.summary);
124
- if (entry.keyFacts && entry.keyFacts.length > 0) {
125
- lines.push("");
126
- lines.push("**关键事实**:");
127
- for (const fact of entry.keyFacts) {
128
- lines.push(`- ${fact}`);
129
- }
130
- }
131
- if (entry.userPreferences && Object.keys(entry.userPreferences).length > 0) {
132
- lines.push("");
133
- lines.push("**用户偏好**:");
134
- lines.push("```json");
135
- lines.push(JSON.stringify(entry.userPreferences, null, 2));
136
- lines.push("```");
137
- }
138
- return lines.join("\n");
139
- }
140
- createInitialStructure(firstEntry) {
141
- const lines = [];
142
- const date = this.formatMemoryTimestamp(firstEntry.timestamp);
143
- lines.push("# Context Memory / Primary");
144
- lines.push("");
145
- lines.push(`**最后更新**: ${date}`);
146
- lines.push(`**总轮次**: ${firstEntry.roundRange[1]}`);
147
- lines.push("");
148
- lines.push("---");
149
- lines.push("");
150
- lines.push("## 摘要记录");
151
- lines.push("");
152
- lines.push(this.formatEntry(firstEntry));
153
- return lines.join("\n");
154
- }
155
- }
156
- //# sourceMappingURL=Manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Manager.js","sourceRoot":"","sources":["../../../../src/services/memory/runtime/Manager.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Service.d.ts","sourceRoot":"","sources":["../../../../src/services/memory/runtime/Service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAwBvE;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAAC,MAAM,EAAE;IACxD,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoChB"}
@@ -1,145 +0,0 @@
1
- import { getLogger } from "../../../utils/logger/Logger.js";
2
- import { MemoryManager } from "./Manager.js";
3
- import { compressMemory, extractMemoryFromContextMessages } from "./Extractor.js";
4
- const memoryManagers = new Map();
5
- function getMemoryManager(runtime, contextId) {
6
- const key = String(contextId || "").trim();
7
- if (!key) {
8
- throw new Error("Memory service requires a non-empty contextId");
9
- }
10
- const cacheKey = `${runtime.rootPath}::${key}`;
11
- const existing = memoryManagers.get(cacheKey);
12
- if (existing)
13
- return existing;
14
- const created = new MemoryManager(runtime, key);
15
- memoryManagers.set(cacheKey, created);
16
- return created;
17
- }
18
- /**
19
- * runContextMemoryMaintenance:按配置执行 context 记忆维护。
20
- *
21
- * 关键点(中文)
22
- * - 这是 service 侧能力,不属于 core context 内核
23
- * - core 只在“消息追加后”触发,不关心具体提取/压缩细节
24
- */
25
- export async function runContextMemoryMaintenance(params) {
26
- const contextId = String(params.contextId || "").trim();
27
- if (!contextId)
28
- return;
29
- const runtime = params.context;
30
- const config = runtime.config?.context?.memory;
31
- const enabled = config?.autoExtractEnabled ?? true;
32
- if (!enabled)
33
- return;
34
- const extractMinEntries = config?.extractMinEntries ?? 40;
35
- try {
36
- const serviceContext = runtime.context;
37
- const persistor = serviceContext.getPersistor(contextId);
38
- const totalEntries = await persistor.size();
39
- const memoryManager = getMemoryManager(runtime, contextId);
40
- const meta = await memoryManager.loadMeta();
41
- const lastMemorizedEntryCount = meta.lastMemorizedEntryCount ?? 0;
42
- const unmemorizedCount = totalEntries - lastMemorizedEntryCount;
43
- if (unmemorizedCount < extractMinEntries)
44
- return;
45
- await runtime.logger.log("info", "[agent] memory calling", {
46
- contextId,
47
- entryRange: [lastMemorizedEntryCount, totalEntries],
48
- });
49
- void extractAndSaveMemory({
50
- context: runtime,
51
- contextId,
52
- startIndex: lastMemorizedEntryCount,
53
- endIndex: totalEntries,
54
- });
55
- }
56
- catch {
57
- return;
58
- }
59
- }
60
- async function extractAndSaveMemory(params) {
61
- const { context: runtime, contextId, startIndex, endIndex } = params;
62
- const logger = getLogger(runtime.rootPath, "info");
63
- try {
64
- await logger.log("info", "[agent] memory extracting", {
65
- contextId,
66
- entryRange: [startIndex, endIndex],
67
- });
68
- const model = runtime.context.model;
69
- const memoryEntry = await extractMemoryFromContextMessages({
70
- context: runtime,
71
- contextId,
72
- entryRange: [startIndex, endIndex],
73
- model,
74
- });
75
- const memoryManager = getMemoryManager(runtime, contextId);
76
- await memoryManager.append(memoryEntry);
77
- const meta = await memoryManager.loadMeta();
78
- await memoryManager.saveMeta({
79
- lastMemorizedEntryCount: endIndex,
80
- totalExtractions: (meta.totalExtractions ?? 0) + 1,
81
- lastExtractedAt: Date.now(),
82
- });
83
- await checkAndCompressMemory(runtime, contextId, model);
84
- await logger.log("info", "[agent] memory extracted", {
85
- contextId,
86
- entryRange: [startIndex, endIndex],
87
- });
88
- }
89
- catch (error) {
90
- await logger.log("error", "[agent] memory extract failed", {
91
- contextId,
92
- error: String(error),
93
- });
94
- }
95
- }
96
- async function checkAndCompressMemory(runtime, contextId, model) {
97
- const logger = getLogger(runtime.rootPath, "info");
98
- try {
99
- const config = runtime.config?.context?.memory;
100
- const compressEnabled = config?.compressOnOverflow ?? true;
101
- if (!compressEnabled)
102
- return;
103
- const maxChars = config?.maxPrimaryChars ?? 15000;
104
- const memoryManager = getMemoryManager(runtime, contextId);
105
- const currentSize = await memoryManager.getSize();
106
- if (currentSize <= maxChars)
107
- return;
108
- await logger.log("info", "[agent] compacting memory", {
109
- contextId,
110
- currentSize,
111
- maxChars,
112
- });
113
- const backupEnabled = config?.backupBeforeCompress ?? true;
114
- if (backupEnabled) {
115
- const backupPath = await memoryManager.backup();
116
- await logger.log("info", "[agent] memory backup", {
117
- contextId,
118
- backupPath,
119
- });
120
- }
121
- const currentContent = await memoryManager.load();
122
- const targetChars = Math.floor(maxChars * 0.8);
123
- const compressed = await compressMemory({
124
- context: runtime,
125
- contextId,
126
- currentContent,
127
- targetChars,
128
- model,
129
- });
130
- await memoryManager.overwrite(compressed);
131
- await logger.log("info", "[agent] memory compacted", {
132
- contextId,
133
- originalSize: currentSize,
134
- compressedSize: compressed.length,
135
- targetChars,
136
- });
137
- }
138
- catch (error) {
139
- await logger.log("error", "[agent] memory compact failed", {
140
- contextId,
141
- error: String(error),
142
- });
143
- }
144
- }
145
- //# sourceMappingURL=Service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Service.js","sourceRoot":"","sources":["../../../../src/services/memory/runtime/Service.ts"],"names":[],"mappings":"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"}