@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.
- package/.claude/settings.local.json +68 -0
- package/README.md +323 -0
- package/dist/config/llm.d.ts +13 -0
- package/dist/config/llm.d.ts.map +1 -0
- package/dist/config/llm.js +96 -0
- package/dist/config/llm.js.map +1 -0
- package/dist/config/plugin.d.ts +15 -0
- package/dist/config/plugin.d.ts.map +1 -0
- package/dist/config/plugin.js +32 -0
- package/dist/config/plugin.js.map +1 -0
- package/dist/db/entityRepository.d.ts +21 -0
- package/dist/db/entityRepository.d.ts.map +1 -0
- package/dist/db/entityRepository.js +55 -0
- package/dist/db/entityRepository.js.map +1 -0
- package/dist/db/repository.d.ts +22 -0
- package/dist/db/repository.d.ts.map +1 -0
- package/dist/db/repository.js +77 -0
- package/dist/db/repository.js.map +1 -0
- package/dist/db/schema.d.ts +5 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +112 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/db/todoRepository.d.ts +26 -0
- package/dist/db/todoRepository.d.ts.map +1 -0
- package/dist/db/todoRepository.js +54 -0
- package/dist/db/todoRepository.js.map +1 -0
- package/dist/hooks/bootstrap.d.ts +3 -0
- package/dist/hooks/bootstrap.d.ts.map +1 -0
- package/dist/hooks/bootstrap.js +28 -0
- package/dist/hooks/bootstrap.js.map +1 -0
- package/dist/hooks/message.d.ts +18 -0
- package/dist/hooks/message.d.ts.map +1 -0
- package/dist/hooks/message.js +52 -0
- package/dist/hooks/message.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/tools.d.ts +26 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +360 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/plugin.d.ts +18 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +62 -0
- package/dist/plugin.js.map +1 -0
- package/dist/services/entityGraphService.d.ts +87 -0
- package/dist/services/entityGraphService.d.ts.map +1 -0
- package/dist/services/entityGraphService.js +271 -0
- package/dist/services/entityGraphService.js.map +1 -0
- package/dist/services/memory.d.ts +26 -0
- package/dist/services/memory.d.ts.map +1 -0
- package/dist/services/memory.js +281 -0
- package/dist/services/memory.js.map +1 -0
- package/dist/services/memoryIndex.d.ts +34 -0
- package/dist/services/memoryIndex.d.ts.map +1 -0
- package/dist/services/memoryIndex.js +100 -0
- package/dist/services/memoryIndex.js.map +1 -0
- package/dist/services/metadataExtractor.d.ts +16 -0
- package/dist/services/metadataExtractor.d.ts.map +1 -0
- package/dist/services/metadataExtractor.js +75 -0
- package/dist/services/metadataExtractor.js.map +1 -0
- package/dist/services/retrieval.d.ts +24 -0
- package/dist/services/retrieval.d.ts.map +1 -0
- package/dist/services/retrieval.js +40 -0
- package/dist/services/retrieval.js.map +1 -0
- package/dist/services/scheduler.d.ts +122 -0
- package/dist/services/scheduler.d.ts.map +1 -0
- package/dist/services/scheduler.js +434 -0
- package/dist/services/scheduler.js.map +1 -0
- package/dist/services/summarizer.d.ts +43 -0
- package/dist/services/summarizer.d.ts.map +1 -0
- package/dist/services/summarizer.js +252 -0
- package/dist/services/summarizer.js.map +1 -0
- package/dist/services/tagService.d.ts +64 -0
- package/dist/services/tagService.d.ts.map +1 -0
- package/dist/services/tagService.js +281 -0
- package/dist/services/tagService.js.map +1 -0
- package/dist/tools/memory.d.ts +3 -0
- package/dist/tools/memory.d.ts.map +1 -0
- package/dist/tools/memory.js +114 -0
- package/dist/tools/memory.js.map +1 -0
- package/dist/types.d.ts +128 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/docs/plans/2026-03-02-claw-memory-design.md +445 -0
- package/docs/plans/2026-03-02-incremental-summary-design.md +157 -0
- package/docs/plans/2026-03-02-incremental-summary-implementation.md +468 -0
- package/docs/plans/2026-03-02-memory-index-design.md +163 -0
- package/docs/plans/2026-03-02-memory-index-implementation.md +836 -0
- package/docs/plans/2026-03-02-mvp-implementation.md +1703 -0
- package/docs/plans/2026-03-02-testing-implementation.md +395 -0
- package/docs/plans/2026-03-02-testing-plan.md +93 -0
- package/docs/plans/2026-03-03-claw-memory-openclaw-plugin-design.md +285 -0
- package/docs/plans/2026-03-03-claw-memory-plugin-implementation.md +642 -0
- package/docs/plans/2026-03-03-entity-graph-design.md +121 -0
- package/docs/plans/2026-03-03-entity-graph-implementation.md +687 -0
- package/docs/plans/2026-03-03-llm-generic-config-design.md +43 -0
- package/docs/plans/2026-03-03-llm-generic-config-implementation.md +186 -0
- package/docs/plans/2026-03-03-memory-e2e-stress-test-design.md +110 -0
- package/docs/plans/2026-03-03-memory-e2e-stress-test-implementation.md +464 -0
- package/docs/plans/2026-03-03-minimax-llm-fix.md +156 -0
- package/docs/plans/2026-03-03-scheduler-design.md +165 -0
- package/docs/plans/2026-03-03-scheduler-implementation.md +777 -0
- package/docs/plans/2026-03-03-tags-visualization-design.md +73 -0
- package/docs/plans/2026-03-03-tags-visualization-implementation.md +539 -0
- package/openclaw.plugin.json +11 -0
- package/package.json +41 -0
- package/src/config/llm.ts +129 -0
- package/src/config/plugin.ts +47 -0
- package/src/db/entityRepository.ts +80 -0
- package/src/db/repository.ts +106 -0
- package/src/db/schema.ts +121 -0
- package/src/db/todoRepository.ts +76 -0
- package/src/hooks/bootstrap.ts +36 -0
- package/src/hooks/message.ts +84 -0
- package/src/index.ts +50 -0
- package/src/plugin.ts +85 -0
- package/src/services/entityGraphService.ts +367 -0
- package/src/services/memory.ts +338 -0
- package/src/services/memoryIndex.ts +140 -0
- package/src/services/metadataExtractor.ts +89 -0
- package/src/services/retrieval.ts +71 -0
- package/src/services/scheduler.ts +529 -0
- package/src/services/summarizer.ts +318 -0
- package/src/services/tagService.ts +335 -0
- package/src/tools/memory.ts +137 -0
- package/src/types.ts +139 -0
- package/tsconfig.json +20 -0
- 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 表达式正确执行
|