flashclaw 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +305 -0
  3. package/config/plugins.json +23 -0
  4. package/dist/agent-runner.d.ts +103 -0
  5. package/dist/agent-runner.d.ts.map +1 -0
  6. package/dist/agent-runner.js +530 -0
  7. package/dist/agent-runner.js.map +1 -0
  8. package/dist/cli.d.ts +7 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +497 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/commands.d.ts +68 -0
  13. package/dist/commands.d.ts.map +1 -0
  14. package/dist/commands.js +252 -0
  15. package/dist/commands.js.map +1 -0
  16. package/dist/config-schema.d.ts +21 -0
  17. package/dist/config-schema.d.ts.map +1 -0
  18. package/dist/config-schema.js +26 -0
  19. package/dist/config-schema.js.map +1 -0
  20. package/dist/config.d.ts +11 -0
  21. package/dist/config.d.ts.map +1 -0
  22. package/dist/config.js +36 -0
  23. package/dist/config.js.map +1 -0
  24. package/dist/core/api-client.d.ts +236 -0
  25. package/dist/core/api-client.d.ts.map +1 -0
  26. package/dist/core/api-client.js +369 -0
  27. package/dist/core/api-client.js.map +1 -0
  28. package/dist/core/memory.d.ts +291 -0
  29. package/dist/core/memory.d.ts.map +1 -0
  30. package/dist/core/memory.js +754 -0
  31. package/dist/core/memory.js.map +1 -0
  32. package/dist/core/model-capabilities.d.ts +45 -0
  33. package/dist/core/model-capabilities.d.ts.map +1 -0
  34. package/dist/core/model-capabilities.js +85 -0
  35. package/dist/core/model-capabilities.js.map +1 -0
  36. package/dist/db.d.ts +103 -0
  37. package/dist/db.d.ts.map +1 -0
  38. package/dist/db.js +380 -0
  39. package/dist/db.js.map +1 -0
  40. package/dist/errors.d.ts +22 -0
  41. package/dist/errors.d.ts.map +1 -0
  42. package/dist/errors.js +44 -0
  43. package/dist/errors.js.map +1 -0
  44. package/dist/health.d.ts +27 -0
  45. package/dist/health.d.ts.map +1 -0
  46. package/dist/health.js +55 -0
  47. package/dist/health.js.map +1 -0
  48. package/dist/index.d.ts +11 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +1181 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/logger.d.ts +9 -0
  53. package/dist/logger.d.ts.map +1 -0
  54. package/dist/logger.js +19 -0
  55. package/dist/logger.js.map +1 -0
  56. package/dist/message-queue.d.ts +69 -0
  57. package/dist/message-queue.d.ts.map +1 -0
  58. package/dist/message-queue.js +198 -0
  59. package/dist/message-queue.js.map +1 -0
  60. package/dist/metrics.d.ts +46 -0
  61. package/dist/metrics.d.ts.map +1 -0
  62. package/dist/metrics.js +101 -0
  63. package/dist/metrics.js.map +1 -0
  64. package/dist/paths.d.ts +81 -0
  65. package/dist/paths.d.ts.map +1 -0
  66. package/dist/paths.js +127 -0
  67. package/dist/paths.js.map +1 -0
  68. package/dist/plugins/index.d.ts +9 -0
  69. package/dist/plugins/index.d.ts.map +1 -0
  70. package/dist/plugins/index.js +13 -0
  71. package/dist/plugins/index.js.map +1 -0
  72. package/dist/plugins/installer.d.ts +120 -0
  73. package/dist/plugins/installer.d.ts.map +1 -0
  74. package/dist/plugins/installer.js +1008 -0
  75. package/dist/plugins/installer.js.map +1 -0
  76. package/dist/plugins/loader.d.ts +37 -0
  77. package/dist/plugins/loader.d.ts.map +1 -0
  78. package/dist/plugins/loader.js +429 -0
  79. package/dist/plugins/loader.js.map +1 -0
  80. package/dist/plugins/manager.d.ts +72 -0
  81. package/dist/plugins/manager.d.ts.map +1 -0
  82. package/dist/plugins/manager.js +187 -0
  83. package/dist/plugins/manager.js.map +1 -0
  84. package/dist/plugins/types.d.ts +101 -0
  85. package/dist/plugins/types.d.ts.map +1 -0
  86. package/dist/plugins/types.js +12 -0
  87. package/dist/plugins/types.js.map +1 -0
  88. package/dist/session-tracker.d.ts +81 -0
  89. package/dist/session-tracker.d.ts.map +1 -0
  90. package/dist/session-tracker.js +228 -0
  91. package/dist/session-tracker.js.map +1 -0
  92. package/dist/task-scheduler.d.ts +47 -0
  93. package/dist/task-scheduler.d.ts.map +1 -0
  94. package/dist/task-scheduler.js +331 -0
  95. package/dist/task-scheduler.js.map +1 -0
  96. package/dist/types.d.ts +57 -0
  97. package/dist/types.d.ts.map +1 -0
  98. package/dist/types.js +2 -0
  99. package/dist/types.js.map +1 -0
  100. package/dist/utils/env-substitute.d.ts +63 -0
  101. package/dist/utils/env-substitute.d.ts.map +1 -0
  102. package/dist/utils/env-substitute.js +133 -0
  103. package/dist/utils/env-substitute.js.map +1 -0
  104. package/dist/utils/log-rotate.d.ts +19 -0
  105. package/dist/utils/log-rotate.d.ts.map +1 -0
  106. package/dist/utils/log-rotate.js +85 -0
  107. package/dist/utils/log-rotate.js.map +1 -0
  108. package/dist/utils/rate-limiter.d.ts +38 -0
  109. package/dist/utils/rate-limiter.d.ts.map +1 -0
  110. package/dist/utils/rate-limiter.js +79 -0
  111. package/dist/utils/rate-limiter.js.map +1 -0
  112. package/dist/utils/retry.d.ts +10 -0
  113. package/dist/utils/retry.d.ts.map +1 -0
  114. package/dist/utils/retry.js +47 -0
  115. package/dist/utils/retry.js.map +1 -0
  116. package/dist/utils.d.ts +86 -0
  117. package/dist/utils.d.ts.map +1 -0
  118. package/dist/utils.js +218 -0
  119. package/dist/utils.js.map +1 -0
  120. package/package.json +78 -0
  121. package/plugins/cancel-task/index.ts +161 -0
  122. package/plugins/cancel-task/plugin.json +9 -0
  123. package/plugins/feishu/index.ts +944 -0
  124. package/plugins/feishu/plugin.json +29 -0
  125. package/plugins/list-tasks/index.ts +150 -0
  126. package/plugins/list-tasks/plugin.json +9 -0
  127. package/plugins/memory/index.ts +190 -0
  128. package/plugins/memory/plugin.json +7 -0
  129. package/plugins/pause-task/index.ts +95 -0
  130. package/plugins/pause-task/plugin.json +8 -0
  131. package/plugins/register-group/index.ts +147 -0
  132. package/plugins/register-group/plugin.json +7 -0
  133. package/plugins/resume-task/index.ts +92 -0
  134. package/plugins/resume-task/plugin.json +8 -0
  135. package/plugins/schedule-task/index.ts +248 -0
  136. package/plugins/schedule-task/plugin.json +9 -0
  137. package/plugins/send-message/index.ts +75 -0
  138. package/plugins/send-message/plugin.json +9 -0
@@ -0,0 +1,369 @@
1
+ /**
2
+ * FlashClaw API 客户端
3
+ * 直接调用 Anthropic API,支持 MiniMax 等兼容 API
4
+ *
5
+ * 特性:
6
+ * - 支持多模型提供商
7
+ * - 工具调用 (Tool Use)
8
+ * - 流式响应 (Streaming)
9
+ * - 错误重试
10
+ */
11
+ import Anthropic from '@anthropic-ai/sdk';
12
+ // ==================== API 客户端实现 ====================
13
+ /**
14
+ * FlashClaw API 客户端
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const client = new ApiClient({
19
+ * apiKey: process.env.ANTHROPIC_API_KEY!,
20
+ * });
21
+ *
22
+ * const response = await client.chat([
23
+ * { role: 'user', content: '你好!' }
24
+ * ]);
25
+ *
26
+ * console.log(response.content[0]);
27
+ * ```
28
+ */
29
+ export class ApiClient {
30
+ client;
31
+ model;
32
+ maxRetries;
33
+ timeout;
34
+ constructor(config) {
35
+ this.client = new Anthropic({
36
+ apiKey: config.apiKey,
37
+ baseURL: config.baseURL,
38
+ maxRetries: config.maxRetries ?? 3,
39
+ timeout: config.timeout ?? 60000,
40
+ });
41
+ this.model = config.model || 'claude-sonnet-4-20250514';
42
+ this.maxRetries = config.maxRetries ?? 3;
43
+ this.timeout = config.timeout ?? 60000;
44
+ }
45
+ /**
46
+ * 发送消息并获取回复
47
+ *
48
+ * @param messages - 聊天消息历史
49
+ * @param options - 聊天选项
50
+ * @returns API 响应消息
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const response = await client.chat(
55
+ * [{ role: 'user', content: '解释量子计算' }],
56
+ * { system: '你是一位物理学教授', maxTokens: 1024 }
57
+ * );
58
+ * ```
59
+ */
60
+ async chat(messages, options) {
61
+ const params = {
62
+ model: this.model,
63
+ max_tokens: options?.maxTokens ?? 4096,
64
+ messages: messages.map(msg => ({
65
+ role: msg.role,
66
+ content: msg.content,
67
+ })),
68
+ };
69
+ // 添加系统提示词
70
+ if (options?.system) {
71
+ params.system = options.system;
72
+ }
73
+ // 添加工具
74
+ if (options?.tools && options.tools.length > 0) {
75
+ params.tools = options.tools;
76
+ }
77
+ // 添加温度
78
+ if (options?.temperature !== undefined) {
79
+ params.temperature = options.temperature;
80
+ }
81
+ // 添加停止序列
82
+ if (options?.stopSequences && options.stopSequences.length > 0) {
83
+ params.stop_sequences = options.stopSequences;
84
+ }
85
+ // 发送请求,带重试
86
+ let lastError = null;
87
+ for (let attempt = 0; attempt < this.maxRetries; attempt++) {
88
+ try {
89
+ const response = await this.client.messages.create(params);
90
+ return response;
91
+ }
92
+ catch (error) {
93
+ lastError = error;
94
+ // 判断是否可重试
95
+ if (this.isRetryableError(error)) {
96
+ // 指数退避
97
+ const delay = Math.min(1000 * Math.pow(2, attempt), 10000);
98
+ await this.sleep(delay);
99
+ continue;
100
+ }
101
+ // 不可重试的错误直接抛出
102
+ throw error;
103
+ }
104
+ }
105
+ throw lastError || new Error('API 请求失败');
106
+ }
107
+ /**
108
+ * 流式发送消息
109
+ *
110
+ * @param messages - 聊天消息历史
111
+ * @param options - 聊天选项
112
+ * @returns 异步迭代器,产生流式事件
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * for await (const event of client.chatStream(messages)) {
117
+ * if (event.type === 'text') {
118
+ * process.stdout.write(event.text);
119
+ * }
120
+ * }
121
+ * ```
122
+ */
123
+ async *chatStream(messages, options) {
124
+ const params = {
125
+ model: this.model,
126
+ max_tokens: options?.maxTokens ?? 4096,
127
+ messages: messages.map(msg => ({
128
+ role: msg.role,
129
+ content: msg.content,
130
+ })),
131
+ stream: true,
132
+ };
133
+ if (options?.system) {
134
+ params.system = options.system;
135
+ }
136
+ if (options?.tools && options.tools.length > 0) {
137
+ params.tools = options.tools;
138
+ }
139
+ if (options?.temperature !== undefined) {
140
+ params.temperature = options.temperature;
141
+ }
142
+ const stream = await this.client.messages.create(params);
143
+ // 处理流式响应
144
+ let finalMessage = null;
145
+ for await (const event of stream) {
146
+ if (event.type === 'content_block_delta') {
147
+ const delta = event.delta;
148
+ if ('text' in delta) {
149
+ yield { type: 'text', text: delta.text };
150
+ }
151
+ else if ('partial_json' in delta) {
152
+ // 工具调用的部分 JSON,暂时跳过
153
+ }
154
+ }
155
+ else if (event.type === 'content_block_start') {
156
+ const block = event.content_block;
157
+ if (block.type === 'tool_use') {
158
+ // 工具调用开始,等待完整输入
159
+ }
160
+ }
161
+ else if (event.type === 'message_stop') {
162
+ // 消息结束
163
+ }
164
+ else if (event.type === 'message_delta') {
165
+ // 消息元数据更新
166
+ }
167
+ // 保存最终消息
168
+ if (event.type === 'message_start') {
169
+ finalMessage = event.message;
170
+ }
171
+ }
172
+ // 重新获取完整消息以获取工具调用
173
+ if (finalMessage) {
174
+ const fullResponse = await this.chat(messages, { ...options, maxTokens: options?.maxTokens ?? 4096 });
175
+ // 检查工具调用
176
+ for (const block of fullResponse.content) {
177
+ if (block.type === 'tool_use') {
178
+ yield {
179
+ type: 'tool_use',
180
+ id: block.id,
181
+ name: block.name,
182
+ input: block.input,
183
+ };
184
+ }
185
+ }
186
+ yield { type: 'done', message: fullResponse };
187
+ }
188
+ }
189
+ /**
190
+ * 处理工具调用
191
+ * 自动执行工具并获取最终回复
192
+ *
193
+ * @param response - 包含工具调用的 API 响应
194
+ * @param messages - 原始消息历史
195
+ * @param executeTool - 工具执行函数
196
+ * @param options - 聊天选项(用于后续请求)
197
+ * @returns 最终文本回复
198
+ *
199
+ * @example
200
+ * ```typescript
201
+ * const response = await client.chat(messages, { tools });
202
+ *
203
+ * if (response.stop_reason === 'tool_use') {
204
+ * const finalText = await client.handleToolUse(
205
+ * response,
206
+ * messages,
207
+ * async (name, params) => {
208
+ * // 执行工具逻辑
209
+ * return { result: 'done' };
210
+ * }
211
+ * );
212
+ * }
213
+ * ```
214
+ */
215
+ async handleToolUse(response, messages, executeTool, options) {
216
+ // 检查是否有工具调用
217
+ const toolUseBlocks = response.content.filter((block) => block.type === 'tool_use');
218
+ if (toolUseBlocks.length === 0) {
219
+ // 没有工具调用,提取文本回复
220
+ return this.extractText(response);
221
+ }
222
+ // 构建新的消息序列
223
+ const newMessages = [
224
+ ...messages.map(msg => ({
225
+ role: msg.role,
226
+ content: msg.content,
227
+ })),
228
+ // 添加 assistant 的回复(包含工具调用)
229
+ {
230
+ role: 'assistant',
231
+ content: response.content,
232
+ },
233
+ ];
234
+ // 执行所有工具并收集结果
235
+ const toolResults = [];
236
+ for (const toolUse of toolUseBlocks) {
237
+ try {
238
+ const result = await executeTool(toolUse.name, toolUse.input);
239
+ toolResults.push({
240
+ type: 'tool_result',
241
+ tool_use_id: toolUse.id,
242
+ content: typeof result === 'string' ? result : JSON.stringify(result),
243
+ });
244
+ }
245
+ catch (error) {
246
+ // 工具执行失败,返回错误信息
247
+ toolResults.push({
248
+ type: 'tool_result',
249
+ tool_use_id: toolUse.id,
250
+ content: `工具执行失败: ${error.message}`,
251
+ is_error: true,
252
+ });
253
+ }
254
+ }
255
+ // 添加工具结果
256
+ newMessages.push({
257
+ role: 'user',
258
+ content: toolResults,
259
+ });
260
+ // 发送后续请求
261
+ const params = {
262
+ model: this.model,
263
+ max_tokens: options?.maxTokens ?? 4096,
264
+ messages: newMessages,
265
+ };
266
+ if (options?.system) {
267
+ params.system = options.system;
268
+ }
269
+ if (options?.tools && options.tools.length > 0) {
270
+ params.tools = options.tools;
271
+ }
272
+ const nextResponse = await this.client.messages.create(params);
273
+ // 递归处理,以支持多轮工具调用
274
+ if (nextResponse.stop_reason === 'tool_use') {
275
+ // 将新消息转换回 ChatMessage 格式继续处理
276
+ const updatedMessages = [
277
+ ...messages,
278
+ { role: 'assistant', content: this.extractText(response) },
279
+ { role: 'user', content: toolResults.map(r => r.content).join('\n') },
280
+ ];
281
+ return this.handleToolUse(nextResponse, updatedMessages, executeTool, options);
282
+ }
283
+ return this.extractText(nextResponse);
284
+ }
285
+ /**
286
+ * 从响应中提取文本内容
287
+ *
288
+ * @param response - API 响应
289
+ * @returns 文本内容
290
+ */
291
+ extractText(response) {
292
+ const textBlocks = response.content.filter((block) => block.type === 'text');
293
+ return textBlocks.map(block => block.text).join('');
294
+ }
295
+ /**
296
+ * 获取当前使用的模型
297
+ */
298
+ getModel() {
299
+ return this.model;
300
+ }
301
+ /**
302
+ * 设置模型
303
+ *
304
+ * @param model - 模型名称
305
+ */
306
+ setModel(model) {
307
+ this.model = model;
308
+ }
309
+ /**
310
+ * 判断错误是否可重试
311
+ */
312
+ isRetryableError(error) {
313
+ if (error instanceof Anthropic.APIError) {
314
+ // 429 Rate Limit, 500+ Server Error 可重试
315
+ return error.status === 429 || error.status >= 500;
316
+ }
317
+ // 网络错误可重试
318
+ if (error instanceof Error && error.message.includes('fetch')) {
319
+ return true;
320
+ }
321
+ return false;
322
+ }
323
+ /**
324
+ * 延迟函数
325
+ */
326
+ sleep(ms) {
327
+ return new Promise(resolve => setTimeout(resolve, ms));
328
+ }
329
+ }
330
+ // ==================== 工厂函数 ====================
331
+ /**
332
+ * 创建默认 API 客户端
333
+ * 从环境变量读取配置
334
+ *
335
+ * @returns API 客户端实例,如果配置缺失则返回 null
336
+ */
337
+ export function createApiClient() {
338
+ // 支持两种环境变量名(兼容不同配置)
339
+ const apiKey = process.env.ANTHROPIC_AUTH_TOKEN || process.env.ANTHROPIC_API_KEY;
340
+ if (!apiKey) {
341
+ return null;
342
+ }
343
+ return new ApiClient({
344
+ apiKey,
345
+ baseURL: process.env.ANTHROPIC_BASE_URL,
346
+ model: process.env.AI_MODEL || process.env.ANTHROPIC_MODEL,
347
+ maxRetries: process.env.API_MAX_RETRIES ? parseInt(process.env.API_MAX_RETRIES) : undefined,
348
+ timeout: process.env.API_TIMEOUT ? parseInt(process.env.API_TIMEOUT) : undefined,
349
+ });
350
+ }
351
+ /**
352
+ * 获取全局 API 客户端单例
353
+ * 确保 jiti 热加载的插件访问同一实例
354
+ *
355
+ * @returns API 客户端实例,如果配置缺失则返回 null
356
+ */
357
+ export function getApiClient() {
358
+ if (global.__flashclaw_api_client === undefined) {
359
+ global.__flashclaw_api_client = createApiClient();
360
+ }
361
+ return global.__flashclaw_api_client;
362
+ }
363
+ /**
364
+ * 重置 API 客户端(用于配置变更后重新初始化)
365
+ */
366
+ export function resetApiClient() {
367
+ global.__flashclaw_api_client = undefined;
368
+ }
369
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/core/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,291 @@
1
+ /**
2
+ * FlashClaw 记忆系统
3
+ *
4
+ * 三层记忆架构:
5
+ * 1. 短期记忆 - 最近 N 条消息,保存在内存中
6
+ * 2. 长期记忆 - 重要信息,保存在 data/memory/{group}.md 文件
7
+ * 3. 上下文压缩 - 超长对话时自动摘要,减少 token 消耗
8
+ *
9
+ * 参考 OpenClaw 的 session-memory 设计
10
+ */
11
+ import type { ApiClient, ChatMessage } from './api-client.js';
12
+ /**
13
+ * 记忆配置
14
+ */
15
+ export interface MemoryConfig {
16
+ /** 上下文 token 限制(发送给 AI 的最大 token 数,默认 100000) */
17
+ contextTokenLimit: number;
18
+ /** 触发自动压缩的 token 阈值(默认 150000,略高于 70% 提示) */
19
+ compactThreshold: number;
20
+ /** 长期记忆存储目录(默认 data/memory) */
21
+ memoryDir: string;
22
+ /** 压缩后保留的 token 数(默认 30000) */
23
+ compactKeepTokens: number;
24
+ }
25
+ /**
26
+ * 记忆条目(长期记忆)
27
+ */
28
+ export interface MemoryEntry {
29
+ /** 记忆键 */
30
+ key: string;
31
+ /** 记忆值 */
32
+ value: string;
33
+ /** 创建时间 */
34
+ createdAt: string;
35
+ /** 更新时间 */
36
+ updatedAt: string;
37
+ }
38
+ /**
39
+ * 上下文压缩结果
40
+ */
41
+ export interface CompactResult {
42
+ /** 原始消息数 */
43
+ originalCount: number;
44
+ /** 压缩后消息数 */
45
+ compactedCount: number;
46
+ /** 摘要内容 */
47
+ summary: string;
48
+ /** 估算节省的 token 数 */
49
+ savedTokens: number;
50
+ }
51
+ /**
52
+ * 记忆管理器
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * const memory = new MemoryManager({
57
+ * shortTermLimit: 50,
58
+ * compactThreshold: 80000,
59
+ * memoryDir: 'data/memory',
60
+ * compactKeepRecent: 10,
61
+ * });
62
+ *
63
+ * // 添加消息
64
+ * memory.addMessage('group1', { role: 'user', content: '你好' });
65
+ *
66
+ * // 获取上下文
67
+ * const context = memory.getContext('group1');
68
+ *
69
+ * // 记住重要信息
70
+ * memory.remember('group1', 'user_name', '张三');
71
+ *
72
+ * // 回忆信息
73
+ * const name = memory.recall('group1', 'user_name');
74
+ * ```
75
+ */
76
+ export declare class MemoryManager {
77
+ private config;
78
+ /** 短期记忆存储:groupId -> 消息列表 */
79
+ private shortTermMemory;
80
+ /** 长期记忆缓存:groupId -> 记忆条目映射 */
81
+ private longTermCache;
82
+ /** 用户级别记忆缓存:userId -> 记忆条目映射 */
83
+ private userMemoryCache;
84
+ /** 压缩摘要缓存:groupId -> 摘要 */
85
+ private summaryCache;
86
+ constructor(config?: Partial<MemoryConfig>);
87
+ /**
88
+ * 获取群组的对话上下文
89
+ * 基于 token 限制返回消息(从最新到最旧)
90
+ *
91
+ * @param groupId - 群组 ID
92
+ * @param maxTokens - 最大 token 数(可选,默认使用配置值)
93
+ * @returns 消息列表
94
+ */
95
+ getContext(groupId: string, maxTokens?: number): ChatMessage[];
96
+ /**
97
+ * 估算单条消息的 token 数
98
+ * 中文约 2 字符/token,英文约 4 字符/token
99
+ */
100
+ private estimateMessageTokens;
101
+ /**
102
+ * 添加消息到短期记忆
103
+ *
104
+ * @param groupId - 群组 ID
105
+ * @param message - 消息
106
+ */
107
+ addMessage(groupId: string, message: ChatMessage): void;
108
+ /**
109
+ * 批量添加消息
110
+ *
111
+ * @param groupId - 群组 ID
112
+ * @param messages - 消息列表
113
+ */
114
+ addMessages(groupId: string, messages: ChatMessage[]): void;
115
+ /**
116
+ * 清除群组的短期记忆
117
+ *
118
+ * @param groupId - 群组 ID
119
+ */
120
+ clearContext(groupId: string): void;
121
+ /**
122
+ * 获取消息数量
123
+ *
124
+ * @param groupId - 群组 ID
125
+ * @returns 消息数量
126
+ */
127
+ getMessageCount(groupId: string): number;
128
+ /**
129
+ * 记住重要信息(持久化到文件)
130
+ *
131
+ * @param groupId - 群组 ID
132
+ * @param key - 记忆键
133
+ * @param value - 记忆值
134
+ */
135
+ remember(groupId: string, key: string, value: string): void;
136
+ /**
137
+ * 回忆信息
138
+ *
139
+ * @param groupId - 群组 ID
140
+ * @param key - 记忆键(可选,不提供则返回所有记忆)
141
+ * @returns 记忆值或格式化的所有记忆
142
+ */
143
+ recall(groupId: string, key?: string): string;
144
+ /**
145
+ * 删除记忆
146
+ *
147
+ * @param groupId - 群组 ID
148
+ * @param key - 记忆键
149
+ */
150
+ forget(groupId: string, key: string): void;
151
+ /**
152
+ * 获取所有记忆键
153
+ *
154
+ * @param groupId - 群组 ID
155
+ * @returns 记忆键列表
156
+ */
157
+ getMemoryKeys(groupId: string): string[];
158
+ /**
159
+ * 记住用户级别信息(跨会话共享)
160
+ *
161
+ * @param userId - 用户 ID
162
+ * @param key - 记忆键
163
+ * @param value - 记忆值
164
+ */
165
+ rememberUser(userId: string, key: string, value: string): void;
166
+ /**
167
+ * 回忆用户级别信息
168
+ *
169
+ * @param userId - 用户 ID
170
+ * @param key - 记忆键(可选,不提供则返回所有记忆)
171
+ * @returns 记忆值或格式化的所有记忆
172
+ */
173
+ recallUser(userId: string, key?: string): string;
174
+ /**
175
+ * 删除用户级别记忆
176
+ */
177
+ forgetUser(userId: string, key: string): void;
178
+ /**
179
+ * 获取用户文件路径
180
+ */
181
+ private getUserMemoryFilePath;
182
+ /**
183
+ * 加载用户级别记忆
184
+ */
185
+ private loadUserMemory;
186
+ /**
187
+ * 保存用户级别记忆
188
+ */
189
+ private saveUserMemory;
190
+ /**
191
+ * 构建包含用户记忆的系统提示词
192
+ */
193
+ buildUserSystemPrompt(userId: string, basePrompt?: string): string;
194
+ /**
195
+ * 估算消息的 token 数量(简单估算)
196
+ * 中文约 2 字符/token,英文约 4 字符/token
197
+ *
198
+ * @param messages - 消息列表
199
+ * @returns 估算的 token 数
200
+ */
201
+ estimateTokens(messages: ChatMessage[]): number;
202
+ /**
203
+ * 检查是否需要压缩
204
+ *
205
+ * @param groupId - 群组 ID
206
+ * @returns 是否需要压缩
207
+ */
208
+ needsCompaction(groupId: string): boolean;
209
+ /**
210
+ * 压缩对话上下文
211
+ * 将旧消息总结为摘要,只保留最近的消息(基于 token 限制)
212
+ *
213
+ * @param groupId - 群组 ID
214
+ * @param apiClient - API 客户端(用于生成摘要)
215
+ * @returns 压缩结果
216
+ */
217
+ compact(groupId: string, apiClient: ApiClient): Promise<CompactResult>;
218
+ /**
219
+ * 生成对话摘要
220
+ *
221
+ * @param messages - 要压缩的消息
222
+ * @param apiClient - API 客户端
223
+ * @returns 摘要文本
224
+ */
225
+ private generateSummary;
226
+ /**
227
+ * 获取压缩摘要
228
+ *
229
+ * @param groupId - 群组 ID
230
+ * @returns 摘要文本,如果没有则返回空字符串
231
+ */
232
+ getSummary(groupId: string): string;
233
+ /**
234
+ * 构建包含长期记忆的系统提示词
235
+ *
236
+ * @param groupId - 群组 ID
237
+ * @param basePrompt - 基础系统提示词
238
+ * @returns 完整的系统提示词
239
+ */
240
+ buildSystemPrompt(groupId: string, basePrompt?: string): string;
241
+ /**
242
+ * 确保记忆目录存在
243
+ */
244
+ private ensureMemoryDir;
245
+ /**
246
+ * 获取群组的记忆文件路径
247
+ */
248
+ private getMemoryFilePath;
249
+ /**
250
+ * 加载长期记忆
251
+ */
252
+ private loadLongTermMemory;
253
+ /**
254
+ * 保存长期记忆
255
+ */
256
+ private saveLongTermMemory;
257
+ /**
258
+ * 解析记忆文件
259
+ */
260
+ private parseMemoryFile;
261
+ /**
262
+ * 格式化记忆文件
263
+ */
264
+ private formatMemoryFile;
265
+ /**
266
+ * 导出会话历史到 Markdown 文件
267
+ * 类似 OpenClaw 的 session-memory hook
268
+ *
269
+ * @param groupId - 群组 ID
270
+ * @param filename - 文件名(可选,自动生成)
271
+ * @returns 保存的文件路径
272
+ */
273
+ exportSession(groupId: string, filename?: string): string;
274
+ }
275
+ declare global {
276
+ var __flashclaw_memory_manager: MemoryManager | undefined;
277
+ }
278
+ /**
279
+ * 获取全局记忆管理器实例
280
+ * 确保所有模块(包括 jiti 加载的插件)使用同一个实例
281
+ */
282
+ export declare function getMemoryManager(): MemoryManager;
283
+ /**
284
+ * 创建默认记忆管理器
285
+ *
286
+ * @param baseDir - 基础目录(可选)
287
+ * @returns 记忆管理器实例
288
+ * @deprecated 使用 getMemoryManager() 获取全局单例
289
+ */
290
+ export declare function createMemoryManager(baseDir?: string): MemoryManager;
291
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/core/memory.ts"],"names":[],"mappings":"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"}