@yun-zero/claw-memory 0.1.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 (131) hide show
  1. package/.claude/settings.local.json +68 -0
  2. package/README.md +323 -0
  3. package/dist/config/llm.d.ts +13 -0
  4. package/dist/config/llm.d.ts.map +1 -0
  5. package/dist/config/llm.js +96 -0
  6. package/dist/config/llm.js.map +1 -0
  7. package/dist/config/plugin.d.ts +15 -0
  8. package/dist/config/plugin.d.ts.map +1 -0
  9. package/dist/config/plugin.js +32 -0
  10. package/dist/config/plugin.js.map +1 -0
  11. package/dist/db/entityRepository.d.ts +21 -0
  12. package/dist/db/entityRepository.d.ts.map +1 -0
  13. package/dist/db/entityRepository.js +55 -0
  14. package/dist/db/entityRepository.js.map +1 -0
  15. package/dist/db/repository.d.ts +22 -0
  16. package/dist/db/repository.d.ts.map +1 -0
  17. package/dist/db/repository.js +77 -0
  18. package/dist/db/repository.js.map +1 -0
  19. package/dist/db/schema.d.ts +5 -0
  20. package/dist/db/schema.d.ts.map +1 -0
  21. package/dist/db/schema.js +112 -0
  22. package/dist/db/schema.js.map +1 -0
  23. package/dist/db/todoRepository.d.ts +26 -0
  24. package/dist/db/todoRepository.d.ts.map +1 -0
  25. package/dist/db/todoRepository.js +54 -0
  26. package/dist/db/todoRepository.js.map +1 -0
  27. package/dist/hooks/bootstrap.d.ts +3 -0
  28. package/dist/hooks/bootstrap.d.ts.map +1 -0
  29. package/dist/hooks/bootstrap.js +28 -0
  30. package/dist/hooks/bootstrap.js.map +1 -0
  31. package/dist/hooks/message.d.ts +18 -0
  32. package/dist/hooks/message.d.ts.map +1 -0
  33. package/dist/hooks/message.js +52 -0
  34. package/dist/hooks/message.js.map +1 -0
  35. package/dist/index.d.ts +3 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +46 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/mcp/tools.d.ts +26 -0
  40. package/dist/mcp/tools.d.ts.map +1 -0
  41. package/dist/mcp/tools.js +360 -0
  42. package/dist/mcp/tools.js.map +1 -0
  43. package/dist/plugin.d.ts +18 -0
  44. package/dist/plugin.d.ts.map +1 -0
  45. package/dist/plugin.js +62 -0
  46. package/dist/plugin.js.map +1 -0
  47. package/dist/services/entityGraphService.d.ts +87 -0
  48. package/dist/services/entityGraphService.d.ts.map +1 -0
  49. package/dist/services/entityGraphService.js +271 -0
  50. package/dist/services/entityGraphService.js.map +1 -0
  51. package/dist/services/memory.d.ts +26 -0
  52. package/dist/services/memory.d.ts.map +1 -0
  53. package/dist/services/memory.js +281 -0
  54. package/dist/services/memory.js.map +1 -0
  55. package/dist/services/memoryIndex.d.ts +34 -0
  56. package/dist/services/memoryIndex.d.ts.map +1 -0
  57. package/dist/services/memoryIndex.js +100 -0
  58. package/dist/services/memoryIndex.js.map +1 -0
  59. package/dist/services/metadataExtractor.d.ts +16 -0
  60. package/dist/services/metadataExtractor.d.ts.map +1 -0
  61. package/dist/services/metadataExtractor.js +75 -0
  62. package/dist/services/metadataExtractor.js.map +1 -0
  63. package/dist/services/retrieval.d.ts +24 -0
  64. package/dist/services/retrieval.d.ts.map +1 -0
  65. package/dist/services/retrieval.js +40 -0
  66. package/dist/services/retrieval.js.map +1 -0
  67. package/dist/services/scheduler.d.ts +122 -0
  68. package/dist/services/scheduler.d.ts.map +1 -0
  69. package/dist/services/scheduler.js +434 -0
  70. package/dist/services/scheduler.js.map +1 -0
  71. package/dist/services/summarizer.d.ts +43 -0
  72. package/dist/services/summarizer.d.ts.map +1 -0
  73. package/dist/services/summarizer.js +252 -0
  74. package/dist/services/summarizer.js.map +1 -0
  75. package/dist/services/tagService.d.ts +64 -0
  76. package/dist/services/tagService.d.ts.map +1 -0
  77. package/dist/services/tagService.js +281 -0
  78. package/dist/services/tagService.js.map +1 -0
  79. package/dist/tools/memory.d.ts +3 -0
  80. package/dist/tools/memory.d.ts.map +1 -0
  81. package/dist/tools/memory.js +114 -0
  82. package/dist/tools/memory.js.map +1 -0
  83. package/dist/types.d.ts +128 -0
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/types.js +6 -0
  86. package/dist/types.js.map +1 -0
  87. package/docs/plans/2026-03-02-claw-memory-design.md +445 -0
  88. package/docs/plans/2026-03-02-incremental-summary-design.md +157 -0
  89. package/docs/plans/2026-03-02-incremental-summary-implementation.md +468 -0
  90. package/docs/plans/2026-03-02-memory-index-design.md +163 -0
  91. package/docs/plans/2026-03-02-memory-index-implementation.md +836 -0
  92. package/docs/plans/2026-03-02-mvp-implementation.md +1703 -0
  93. package/docs/plans/2026-03-02-testing-implementation.md +395 -0
  94. package/docs/plans/2026-03-02-testing-plan.md +93 -0
  95. package/docs/plans/2026-03-03-claw-memory-openclaw-plugin-design.md +285 -0
  96. package/docs/plans/2026-03-03-claw-memory-plugin-implementation.md +642 -0
  97. package/docs/plans/2026-03-03-entity-graph-design.md +121 -0
  98. package/docs/plans/2026-03-03-entity-graph-implementation.md +687 -0
  99. package/docs/plans/2026-03-03-llm-generic-config-design.md +43 -0
  100. package/docs/plans/2026-03-03-llm-generic-config-implementation.md +186 -0
  101. package/docs/plans/2026-03-03-memory-e2e-stress-test-design.md +110 -0
  102. package/docs/plans/2026-03-03-memory-e2e-stress-test-implementation.md +464 -0
  103. package/docs/plans/2026-03-03-minimax-llm-fix.md +156 -0
  104. package/docs/plans/2026-03-03-scheduler-design.md +165 -0
  105. package/docs/plans/2026-03-03-scheduler-implementation.md +777 -0
  106. package/docs/plans/2026-03-03-tags-visualization-design.md +73 -0
  107. package/docs/plans/2026-03-03-tags-visualization-implementation.md +539 -0
  108. package/openclaw.plugin.json +11 -0
  109. package/package.json +41 -0
  110. package/src/config/llm.ts +129 -0
  111. package/src/config/plugin.ts +47 -0
  112. package/src/db/entityRepository.ts +80 -0
  113. package/src/db/repository.ts +106 -0
  114. package/src/db/schema.ts +121 -0
  115. package/src/db/todoRepository.ts +76 -0
  116. package/src/hooks/bootstrap.ts +36 -0
  117. package/src/hooks/message.ts +84 -0
  118. package/src/index.ts +50 -0
  119. package/src/plugin.ts +85 -0
  120. package/src/services/entityGraphService.ts +367 -0
  121. package/src/services/memory.ts +338 -0
  122. package/src/services/memoryIndex.ts +140 -0
  123. package/src/services/metadataExtractor.ts +89 -0
  124. package/src/services/retrieval.ts +71 -0
  125. package/src/services/scheduler.ts +529 -0
  126. package/src/services/summarizer.ts +318 -0
  127. package/src/services/tagService.ts +335 -0
  128. package/src/tools/memory.ts +137 -0
  129. package/src/types.ts +139 -0
  130. package/tsconfig.json +20 -0
  131. package/vitest.config.ts +16 -0
@@ -0,0 +1,434 @@
1
+ /**
2
+ * Scheduler Service
3
+ * Manages scheduled tasks for deduplication and summary generation
4
+ */
5
+ import cron from 'node-cron';
6
+ import { generateSummaryWithLLM } from '../config/llm.js';
7
+ import { Summarizer } from './summarizer.js';
8
+ /**
9
+ * Default scheduler configuration
10
+ */
11
+ export const DEFAULT_CONFIG = {
12
+ deduplicateTime: '01:00',
13
+ dailyTime: '02:00',
14
+ weeklyTime: '03:00',
15
+ monthlyTime: '04:00',
16
+ enabled: true
17
+ };
18
+ /**
19
+ * Scheduler Service Class
20
+ * Manages scheduled tasks with execution locking and task queue
21
+ */
22
+ export class Scheduler {
23
+ config;
24
+ isRunning;
25
+ taskQueue;
26
+ tasks;
27
+ db;
28
+ /**
29
+ * Creates a new Scheduler instance
30
+ * @param db - Database instance
31
+ * @param config - Optional configuration (uses DEFAULT_CONFIG if not provided)
32
+ */
33
+ constructor(db, config) {
34
+ // 合并环境变量配置
35
+ const envConfig = {};
36
+ if (process.env.SCHEDULER_DEDUPE_TIME) {
37
+ envConfig.deduplicateTime = process.env.SCHEDULER_DEDUPE_TIME;
38
+ }
39
+ if (process.env.SCHEDULER_DAILY_TIME) {
40
+ envConfig.dailyTime = process.env.SCHEDULER_DAILY_TIME;
41
+ }
42
+ if (process.env.SCHEDULER_WEEKLY_TIME) {
43
+ envConfig.weeklyTime = process.env.SCHEDULER_WEEKLY_TIME;
44
+ }
45
+ if (process.env.SCHEDULER_MONTHLY_TIME) {
46
+ envConfig.monthlyTime = process.env.SCHEDULER_MONTHLY_TIME;
47
+ }
48
+ if (process.env.SCHEDULER_ENABLED !== undefined) {
49
+ envConfig.enabled = process.env.SCHEDULER_ENABLED !== 'false';
50
+ }
51
+ this.db = db;
52
+ this.config = { ...DEFAULT_CONFIG, ...envConfig, ...config };
53
+ this.isRunning = false;
54
+ this.taskQueue = [];
55
+ this.tasks = new Map();
56
+ }
57
+ /**
58
+ * Starts the scheduler and all scheduled tasks
59
+ */
60
+ start() {
61
+ if (this.isRunning) {
62
+ console.log('[Scheduler] Already running');
63
+ return;
64
+ }
65
+ if (!this.config.enabled) {
66
+ console.log('[Scheduler] Scheduler is disabled');
67
+ return;
68
+ }
69
+ console.log('[Scheduler] Starting scheduler...');
70
+ this.scheduleDeduplicate();
71
+ this.scheduleDailySummary();
72
+ this.scheduleWeeklySummary();
73
+ this.scheduleMonthlySummary();
74
+ this.isRunning = true;
75
+ console.log('[Scheduler] Scheduler started successfully');
76
+ }
77
+ /**
78
+ * Stops the scheduler and all scheduled tasks
79
+ */
80
+ stop() {
81
+ if (!this.isRunning) {
82
+ console.log('[Scheduler] Not running');
83
+ return;
84
+ }
85
+ console.log('[Scheduler] Stopping scheduler...');
86
+ for (const [type, task] of this.tasks) {
87
+ task.stop();
88
+ console.log(`[Scheduler] Stopped ${type} task`);
89
+ }
90
+ this.tasks.clear();
91
+ this.taskQueue = [];
92
+ this.isRunning = false;
93
+ console.log('[Scheduler] Scheduler stopped');
94
+ }
95
+ /**
96
+ * Checks if the scheduler is enabled
97
+ * @returns true if enabled, false otherwise
98
+ */
99
+ isEnabled() {
100
+ return this.config.enabled;
101
+ }
102
+ /**
103
+ * Checks if the scheduler is currently running
104
+ * @returns true if running, false otherwise
105
+ */
106
+ getIsRunning() {
107
+ return this.isRunning;
108
+ }
109
+ /**
110
+ * Converts HH:mm time format to cron expression
111
+ * @param time - Time in HH:mm format
112
+ * @returns Cron expression
113
+ */
114
+ timeToCron(time) {
115
+ const [hour, minute] = time.split(':');
116
+ return `${minute} ${hour} * * *`;
117
+ }
118
+ /**
119
+ * Schedules the deduplicate task
120
+ */
121
+ scheduleDeduplicate() {
122
+ const cronExpression = this.timeToCron(this.config.deduplicateTime);
123
+ const task = cron.schedule(cronExpression, () => {
124
+ this.executeWithLock('deduplicate');
125
+ });
126
+ this.tasks.set('deduplicate', task);
127
+ console.log(`[Scheduler] Scheduled deduplicate task at ${this.config.deduplicateTime}`);
128
+ }
129
+ /**
130
+ * Schedules the daily summary task
131
+ */
132
+ scheduleDailySummary() {
133
+ const cronExpression = this.timeToCron(this.config.dailyTime);
134
+ const task = cron.schedule(cronExpression, () => {
135
+ this.executeWithLock('daily');
136
+ });
137
+ this.tasks.set('daily', task);
138
+ console.log(`[Scheduler] Scheduled daily summary task at ${this.config.dailyTime}`);
139
+ }
140
+ /**
141
+ * Schedules the weekly summary task
142
+ */
143
+ scheduleWeeklySummary() {
144
+ const cronExpression = this.timeToCron(this.config.weeklyTime);
145
+ const task = cron.schedule(cronExpression, () => {
146
+ this.executeWithLock('weekly');
147
+ });
148
+ this.tasks.set('weekly', task);
149
+ console.log(`[Scheduler] Scheduled weekly summary task at ${this.config.weeklyTime}`);
150
+ }
151
+ /**
152
+ * Schedules the monthly summary task
153
+ */
154
+ scheduleMonthlySummary() {
155
+ const cronExpression = this.timeToCron(this.config.monthlyTime);
156
+ const task = cron.schedule(cronExpression, () => {
157
+ this.executeWithLock('monthly');
158
+ });
159
+ this.tasks.set('monthly', task);
160
+ console.log(`[Scheduler] Scheduled monthly summary task at ${this.config.monthlyTime}`);
161
+ }
162
+ /**
163
+ * Executes a task with locking mechanism and queue support
164
+ * @param type - Task type
165
+ */
166
+ executeWithLock(type) {
167
+ // Add to queue
168
+ const queuedTask = {
169
+ type,
170
+ scheduledTime: new Date()
171
+ };
172
+ this.taskQueue.push(queuedTask);
173
+ console.log(`[Scheduler] Queued ${type} task (queue size: ${this.taskQueue.length})`);
174
+ // Process queue
175
+ // Note: Not awaiting async processQueue to avoid blocking the cron scheduler
176
+ this.processQueue().catch(err => {
177
+ console.error(`[Scheduler] Error processing queue:`, err);
178
+ });
179
+ }
180
+ /**
181
+ * Processes the task queue
182
+ */
183
+ async processQueue() {
184
+ if (this.taskQueue.length === 0) {
185
+ return;
186
+ }
187
+ const task = this.taskQueue.shift();
188
+ if (!task)
189
+ return;
190
+ console.log(`[Scheduler] Processing ${task.type} task...`);
191
+ switch (task.type) {
192
+ case 'deduplicate':
193
+ await this.deduplicate();
194
+ break;
195
+ case 'daily':
196
+ await this.dailySummary();
197
+ break;
198
+ case 'weekly':
199
+ await this.weeklySummary();
200
+ break;
201
+ case 'monthly':
202
+ await this.monthlySummary();
203
+ break;
204
+ }
205
+ // Continue processing if more tasks in queue
206
+ if (this.taskQueue.length > 0) {
207
+ setTimeout(() => this.processQueue(), 1000);
208
+ }
209
+ }
210
+ /**
211
+ * Executes deduplication task - finds and marks duplicate memories
212
+ */
213
+ async deduplicate() {
214
+ console.log('[Scheduler] Running deduplication...');
215
+ // Get all non-archived memories that are not already marked as duplicates
216
+ const memories = this.db.prepare(`
217
+ SELECT id, content_path, importance
218
+ FROM memories
219
+ WHERE is_archived = FALSE AND is_duplicate = FALSE
220
+ ORDER BY created_at DESC
221
+ `).all();
222
+ const processed = new Set();
223
+ for (const memory of memories) {
224
+ if (processed.has(memory.id))
225
+ continue;
226
+ // Find similar memories (via shared entities)
227
+ const similar = this.db.prepare(`
228
+ SELECT m2.id, m2.content_path, m2.importance
229
+ FROM memories m1
230
+ JOIN memory_entities me1 ON m1.id = me1.memory_id
231
+ JOIN memory_entities me2 ON me1.entity_id = me2.entity_id
232
+ JOIN memories m2 ON me2.memory_id = m2.id
233
+ WHERE m1.id = ? AND m2.id != m1.id
234
+ AND m2.is_archived = FALSE AND m2.is_duplicate = FALSE
235
+ `).all(memory.id);
236
+ for (const similarMem of similar) {
237
+ if (processed.has(similarMem.id))
238
+ continue;
239
+ // Mark as duplicate
240
+ this.db.prepare(`
241
+ UPDATE memories
242
+ SET is_duplicate = TRUE, duplicate_of = ?
243
+ WHERE id = ?
244
+ `).run(memory.id, similarMem.id);
245
+ // Merge importance
246
+ const newImportance = Math.min(1, memory.importance + similarMem.importance * 0.5);
247
+ this.db.prepare(`
248
+ UPDATE memories SET importance = ? WHERE id = ?
249
+ `).run(newImportance, memory.id);
250
+ processed.add(similarMem.id);
251
+ console.log(`[Scheduler] Marked ${similarMem.id} as duplicate of ${memory.id}`);
252
+ }
253
+ processed.add(memory.id);
254
+ }
255
+ console.log('[Scheduler] Deduplication completed');
256
+ }
257
+ /**
258
+ * Executes daily summary task - generates summary for previous day's memories
259
+ */
260
+ async dailySummary() {
261
+ console.log('[Scheduler] Running daily summary...');
262
+ const yesterday = new Date();
263
+ yesterday.setDate(yesterday.getDate() - 1);
264
+ const dateStr = yesterday.toISOString().split('T')[0];
265
+ // 检查是否已有总结
266
+ const existing = this.db.prepare(`
267
+ SELECT summary FROM time_buckets WHERE date = ?
268
+ `).get(dateStr);
269
+ if (existing?.summary) {
270
+ console.log(`[Scheduler] Daily summary for ${dateStr} already exists`);
271
+ return;
272
+ }
273
+ // 获取当天的记忆
274
+ const memories = this.db.prepare(`
275
+ SELECT id, content_path FROM memories
276
+ WHERE date(created_at) = date(?)
277
+ `).all(dateStr);
278
+ if (memories.length === 0) {
279
+ console.log(`[Scheduler] No memories for ${dateStr}, skipping`);
280
+ return;
281
+ }
282
+ // 读取记忆内容
283
+ const fs = await import('fs/promises');
284
+ const contents = [];
285
+ for (const mem of memories) {
286
+ try {
287
+ const content = await fs.readFile(mem.content_path, 'utf-8');
288
+ contents.push(content.slice(0, 1000));
289
+ }
290
+ catch (e) {
291
+ console.error(`[Scheduler] Failed to read ${mem.content_path}`);
292
+ }
293
+ }
294
+ // 构建报告字符串并调用 LLM 生成总结
295
+ const reportString = `日期: ${dateStr}\n记忆数量: ${memories.length}\n\n记忆内容:\n${contents.join('\n---\n')}`;
296
+ try {
297
+ const summary = await generateSummaryWithLLM(reportString);
298
+ // 保存到 time_buckets
299
+ this.db.prepare(`
300
+ INSERT OR REPLACE INTO time_buckets (date, summary, summary_generated_at, memory_count)
301
+ VALUES (?, ?, datetime('now'), ?)
302
+ `).run(dateStr, summary, memories.length);
303
+ console.log(`[Scheduler] Daily summary generated for ${dateStr}`);
304
+ }
305
+ catch (error) {
306
+ console.error('[Scheduler] Failed to generate daily summary:', error);
307
+ }
308
+ }
309
+ /**
310
+ * Executes weekly summary task
311
+ */
312
+ async weeklySummary() {
313
+ console.log('[Scheduler] Running weekly summary...');
314
+ const now = new Date();
315
+ const dayOfWeek = now.getDay();
316
+ const diff = now.getDate() - dayOfWeek + (dayOfWeek === 0 ? -6 : 1);
317
+ const weekStart = new Date(now.getFullYear(), now.getMonth(), diff);
318
+ weekStart.setHours(0, 0, 0, 0);
319
+ const weekStartStr = weekStart.toISOString().split('T')[0];
320
+ // Check if summary already exists
321
+ const existing = this.db.prepare(`
322
+ SELECT summary FROM time_buckets WHERE date = ?
323
+ `).get(weekStartStr);
324
+ if (existing?.summary) {
325
+ console.log(`[Scheduler] Weekly summary for ${weekStartStr} already exists`);
326
+ return;
327
+ }
328
+ // Get all memories for this week
329
+ const memories = this.db.prepare(`
330
+ SELECT id, content_path FROM memories
331
+ WHERE date(created_at) >= date(?) AND date(created_at) <= date('now')
332
+ `).all(weekStartStr);
333
+ if (memories.length === 0) {
334
+ console.log(`[Scheduler] No memories for week ${weekStartStr}, skipping`);
335
+ return;
336
+ }
337
+ // Read memory contents and generate weekly summary
338
+ const fs = await import('fs/promises');
339
+ const contents = [];
340
+ for (const mem of memories.slice(0, 10)) {
341
+ try {
342
+ const content = await fs.readFile(mem.content_path, 'utf-8');
343
+ contents.push(content.slice(0, 500));
344
+ }
345
+ catch (e) {
346
+ // Skip files that can't be read
347
+ }
348
+ }
349
+ const summarizer = new Summarizer(this.db);
350
+ const report = {
351
+ period: 'week',
352
+ startDate: weekStartStr,
353
+ endDate: now.toISOString().split('T')[0],
354
+ memoryCount: memories.length,
355
+ memories: contents
356
+ };
357
+ try {
358
+ const summary = await summarizer.generateWeeklySummary(report);
359
+ this.db.prepare(`
360
+ INSERT OR REPLACE INTO time_buckets (date, summary, summary_generated_at, memory_count)
361
+ VALUES (?, ?, datetime('now'), ?)
362
+ `).run(weekStartStr, summary, memories.length);
363
+ console.log(`[Scheduler] Weekly summary generated for ${weekStartStr}`);
364
+ }
365
+ catch (error) {
366
+ console.error('[Scheduler] Failed to generate weekly summary:', error);
367
+ }
368
+ }
369
+ /**
370
+ * Executes monthly summary task
371
+ */
372
+ async monthlySummary() {
373
+ console.log('[Scheduler] Running monthly summary...');
374
+ const now = new Date();
375
+ const monthStart = new Date(now.getFullYear(), now.getMonth(), 1);
376
+ const monthStartStr = monthStart.toISOString().split('T')[0];
377
+ const existing = this.db.prepare(`
378
+ SELECT summary FROM time_buckets WHERE date = ?
379
+ `).get(monthStartStr);
380
+ if (existing?.summary) {
381
+ console.log(`[Scheduler] Monthly summary for ${monthStartStr} already exists`);
382
+ return;
383
+ }
384
+ const memories = this.db.prepare(`
385
+ SELECT id FROM memories
386
+ WHERE date(created_at) >= date(?) AND date(created_at) <= date('now')
387
+ `).all(monthStartStr);
388
+ if (memories.length === 0) {
389
+ console.log(`[Scheduler] No memories for month ${monthStartStr}, skipping`);
390
+ return;
391
+ }
392
+ const summarizer = new Summarizer(this.db);
393
+ const report = {
394
+ period: 'month',
395
+ startDate: monthStartStr,
396
+ endDate: now.toISOString().split('T')[0],
397
+ memoryCount: memories.length
398
+ };
399
+ try {
400
+ const summary = await summarizer.generateMonthlySummary(report);
401
+ this.db.prepare(`
402
+ INSERT OR REPLACE INTO time_buckets (date, summary, summary_generated_at, memory_count)
403
+ VALUES (?, ?, datetime('now'), ?)
404
+ `).run(monthStartStr, summary, memories.length);
405
+ console.log(`[Scheduler] Monthly summary generated for ${monthStartStr}`);
406
+ }
407
+ catch (error) {
408
+ console.error('[Scheduler] Failed to generate monthly summary:', error);
409
+ }
410
+ }
411
+ /**
412
+ * Updates the scheduler configuration
413
+ * @param config - New configuration (partial)
414
+ */
415
+ updateConfig(config) {
416
+ this.config = { ...this.config, ...config };
417
+ console.log('[Scheduler] Configuration updated');
418
+ }
419
+ /**
420
+ * Gets the current configuration
421
+ * @returns Current scheduler configuration
422
+ */
423
+ getConfig() {
424
+ return { ...this.config };
425
+ }
426
+ /**
427
+ * Gets the current queue size
428
+ * @returns Number of pending tasks in queue
429
+ */
430
+ getQueueSize() {
431
+ return this.taskQueue.length;
432
+ }
433
+ }
434
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/services/scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Memory Summarizer Service
3
+ * Aggregates memory data for weekly report generation
4
+ */
5
+ import Database from 'better-sqlite3';
6
+ import type { WeeklyReport } from '../types.js';
7
+ export declare class SummarizerService {
8
+ private db;
9
+ constructor(db: Database.Database);
10
+ aggregateMemories(startDate: string, endDate: string): Promise<WeeklyReport>;
11
+ private getBasicStats;
12
+ private getTagStats;
13
+ private getKeywordStats;
14
+ private getImportanceStats;
15
+ private getAccessStats;
16
+ private getEntityStats;
17
+ reportToString(report: WeeklyReport): string;
18
+ /**
19
+ * Generate weekly summary using LLM
20
+ */
21
+ generateWeeklySummary(report: {
22
+ period: string;
23
+ startDate: string;
24
+ endDate: string;
25
+ memoryCount: number;
26
+ memories?: string[];
27
+ }): Promise<string>;
28
+ /**
29
+ * Generate monthly summary using LLM
30
+ */
31
+ generateMonthlySummary(report: {
32
+ period: string;
33
+ startDate: string;
34
+ endDate: string;
35
+ memoryCount: number;
36
+ memories?: string[];
37
+ }): Promise<string>;
38
+ }
39
+ /**
40
+ * Alias for SummarizerService for backwards compatibility
41
+ */
42
+ export { SummarizerService as Summarizer };
43
+ //# sourceMappingURL=summarizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizer.d.ts","sourceRoot":"","sources":["../../src/services/summarizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAU,YAAY,EAAE,MAAM,aAAa,CAAC;AAGxD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAoB;gBAElB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAI3B,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA+BlF,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,WAAW;IA6BnB,OAAO,CAAC,eAAe;IA4BvB,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,cAAc;IAsCtB,OAAO,CAAC,cAAc;IAwCtB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAoC5C;;OAEG;IACG,qBAAqB,CAAC,MAAM,EAAE;QAClC,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,CAAC;IAanB;;OAEG;IACG,sBAAsB,CAAC,MAAM,EAAE;QACnC,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,CAAC;CAYpB;AAED;;GAEG;AACH,OAAO,EAAE,iBAAiB,IAAI,UAAU,EAAE,CAAC"}