@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,165 @@
1
+ # Scheduler 定时任务系统设计
2
+
3
+ ## 概述
4
+
5
+ 为 Claw-Memory 实现定时任务系统,支持每日/每周/每月自动生成总结,并处理重复记忆的去重。
6
+
7
+ ## 需求
8
+
9
+ 1. 定时执行去重任务、每日总结、每周总结、每月总结
10
+ 2. 防止任务并发执行
11
+ 3. 任务失败时记录日志并继续执行下一个任务
12
+ 4. 默认时间 + 环境变量覆盖配置
13
+
14
+ ## 架构设计
15
+
16
+ ### 整体架构
17
+
18
+ ```
19
+ MCP Server
20
+ └── Scheduler (内置)
21
+ ├── cron-deduplicate (01:00) → deduplicate()
22
+ ├── cron-daily-summary (02:00) → dailySummary()
23
+ ├── cron-weekly-summary (03:00) → weeklySummary()
24
+ ├── cron-monthly-summary (04:00) → monthlySummary()
25
+ └── ExecutionLock (防止并发)
26
+ ```
27
+
28
+ ### 核心组件
29
+
30
+ | 组件 | 职责 |
31
+ |-----|------|
32
+ | `Scheduler` 类 | 管理定时任务的生命周期,注册和启动 cron 任务 |
33
+ | `ExecutionLock` | 简单的执行锁,防止任务并发执行 |
34
+ | 任务方法 | `deduplicate()`, `dailySummary()`, `weeklySummary()`, `monthlySummary()` |
35
+
36
+ ## 执行流程
37
+
38
+ 1. MCP Server 启动时,Scheduler 初始化并注册所有 cron 任务
39
+ 2. 到达执行时间时,检查 `ExecutionLock`
40
+ 3. 如果有任务正在执行,新任务进入等待队列
41
+ 4. 任务执行完成后释放锁,继续处理队列中的任务
42
+ 5. 任务失败时记录日志,继续执行下一个任务
43
+
44
+ ## 数据模型
45
+
46
+ ### Time Buckets (已有)
47
+
48
+ ```sql
49
+ -- 时间桶表,用于存储每日/每周/每月的总结
50
+ CREATE TABLE time_buckets (
51
+ date TEXT PRIMARY KEY, -- 日期 (YYYY-MM-DD)
52
+ memory_count INTEGER DEFAULT 0, -- 记忆数量
53
+ summary TEXT, -- 总结内容
54
+ summary_generated_at TIMESTAMP,-- 总结生成时间
55
+ key_topics JSON, -- 关键主题
56
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
57
+ );
58
+ ```
59
+
60
+ ### Memories (已有,去重字段)
61
+
62
+ ```sql
63
+ -- 在 memories 表中已有以下字段
64
+ is_duplicate BOOLEAN DEFAULT FALSE, -- 是否重复
65
+ duplicate_of TEXT -- 重复于哪个记忆
66
+ ```
67
+
68
+ ## 配置方式
69
+
70
+ | 任务 | 默认时间 | 环境变量 | 说明 |
71
+ |-----|---------|---------|------|
72
+ | 去重 | 01:00 | `SCHEDULER_DEDUPE_TIME` | 格式: HH:mm |
73
+ | 每日总结 | 02:00 | `SCHEDULER_DAILY_TIME` | 格式: HH:mm |
74
+ | 每周总结 | 03:00 | `SCHEDULER_WEEKLY_TIME` | 格式: HH:mm |
75
+ | 每月总结 | 04:00 | `SCHEDULER_MONTHLY_TIME` | 格式: HH:mm |
76
+
77
+ ### CLI 参数
78
+
79
+ ```bash
80
+ --enable-scheduler 启用定时任务(默认启用)
81
+ --scheduler-disabled 禁用定时任务
82
+ ```
83
+
84
+ ## 任务实现
85
+
86
+ ### 1. 去重任务 (DeduplicationJob)
87
+
88
+ - 查询相似记忆(基于关键词和标签)
89
+ - 标记重复记忆,设置 `is_duplicate = TRUE` 和 `duplicate_of`
90
+ - 更新原记忆的 `importance` 权重
91
+
92
+ ### 2. 每日总结 (DailySummaryJob)
93
+
94
+ - 获取前一天的 time_bucket
95
+ - 如果没有总结,调用 LLM 生成
96
+ - 更新 `time_buckets` 表的 summary 字段
97
+
98
+ ### 3. 每周总结 (WeeklySummaryJob)
99
+
100
+ - 获取本周的所有 daily summaries
101
+ - 调用 LLM 生成周总结
102
+ - 存储到本周第一天对应的 time_bucket
103
+
104
+ ### 4. 每月总结 (MonthlySummaryJob)
105
+
106
+ - 获取本月的所有 daily/weekly summaries
107
+ - 调用 LLM 生成月总结
108
+ - 存储到本月第一天对应的 time_bucket
109
+
110
+ ## 实现细节
111
+
112
+ ### Scheduler 类
113
+
114
+ ```typescript
115
+ class Scheduler {
116
+ private isRunning = false;
117
+ private taskQueue: Array<() => Promise<void>> = [];
118
+
119
+ start(): void;
120
+ stop(): void;
121
+ private scheduleTask(cronTime: string, task: () => Promise<void>): void;
122
+ private executeWithLock(task: () => Promise<void>): Promise<void>;
123
+ }
124
+ ```
125
+
126
+ ### 执行锁机制
127
+
128
+ ```typescript
129
+ private async executeWithLock(task: () => Promise<void>): Promise<void> {
130
+ // 如果有任务正在执行,加入队列等待
131
+ while (this.isRunning) {
132
+ await new Promise(resolve => setTimeout(resolve, 60000)); // 每分钟检查一次
133
+ }
134
+
135
+ this.isRunning = true;
136
+ try {
137
+ await task();
138
+ } catch (error) {
139
+ console.error('[Scheduler] Task failed:', error);
140
+ } finally {
141
+ this.isRunning = false;
142
+ // 处理队列中的下一个任务
143
+ this.processQueue();
144
+ }
145
+ }
146
+ ```
147
+
148
+ ## 新增依赖
149
+
150
+ - `node-cron` - ^2.3.0 或更高版本
151
+
152
+ ## 文件结构
153
+
154
+ ```
155
+ src/
156
+ ├── services/
157
+ │ └── scheduler.ts # Scheduler 服务
158
+ ├── index.ts # 集成 Scheduler 到 MCP Server
159
+ ```
160
+
161
+ ## 测试策略
162
+
163
+ 1. **单元测试** - 测试 Scheduler 的执行锁和队列逻辑
164
+ 2. **集成测试** - 测试定时任务与现有 service 的集成
165
+ 3. **手动测试** - 验证 cron 表达式正确执行