@yun-zero/claw-memory 0.1.0 → 0.1.2

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.
@@ -7,7 +7,7 @@ export async function handleAgentBootstrap(db) {
7
7
  const weekMemories = db.prepare(`
8
8
  SELECT summary, importance
9
9
  FROM memories
10
- WHERE date(created_at) >= date(?)
10
+ WHERE created_at >= ?
11
11
  ORDER BY importance DESC
12
12
  LIMIT 10
13
13
  `).all(weekStartStr);
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/hooks/message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAM/C,UAAU,YAAY;IACpB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CA0Df"}
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/hooks/message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAM/C,UAAU,YAAY;IACpB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAoDf"}
@@ -27,19 +27,14 @@ export async function handleMessageSent(event, db, dataDir) {
27
27
  const qaContent = `Q: ${userMessage}\n\nA: ${assistantMessage}`;
28
28
  // 解析 dataDir 中的 ~
29
29
  const resolvedDataDir = dataDir.replace(/^~/, homedir());
30
- // 确保目录存在
31
- if (!fs.existsSync(resolvedDataDir)) {
32
- fs.mkdirSync(resolvedDataDir, { recursive: true });
33
- }
30
+ // 直接创建目录(recursive: true 已处理存在的情况)
34
31
  const memoriesDir = path.join(resolvedDataDir, 'memories');
35
- if (!fs.existsSync(memoriesDir)) {
36
- fs.mkdirSync(memoriesDir, { recursive: true });
37
- }
32
+ fs.mkdirSync(memoriesDir, { recursive: true });
38
33
  // 保存记忆
39
34
  const memoryId = uuidv4();
40
35
  const contentPath = path.join(memoriesDir, `${memoryId}.md`);
41
- // 写入文件
42
- fs.writeFileSync(contentPath, qaContent, 'utf-8');
36
+ // 异步写入文件
37
+ await fs.promises.writeFile(contentPath, qaContent, 'utf-8');
43
38
  // 提取摘要(取前200字符)
44
39
  const summary = assistantMessage.substring(0, 200);
45
40
  // 插入数据库
@@ -1 +1 @@
1
- {"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/hooks/message.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAiB7B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAmB,EACnB,EAAY,EACZ,OAAe;IAEf,6BAA6B;IAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACvC,OAAO;IACT,CAAC;IAED,iCAAiC;IACjC,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,iBAAiB;QACjB,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACxD,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1C,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC5C,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;IAE/C,IAAI,CAAC,WAAW,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,SAAS;IACT,MAAM,SAAS,GAAG,MAAM,WAAW,UAAU,gBAAgB,EAAE,CAAC;IAEhE,kBAAkB;IAClB,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAEzD,SAAS;IACT,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAC3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,OAAO;IACP,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAC;IAE7D,OAAO;IACP,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAElD,gBAAgB;IAChB,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEnD,QAAQ;IACR,EAAE,CAAC,OAAO,CAAC;;;GAGV,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/hooks/message.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAiB7B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAmB,EACnB,EAAY,EACZ,OAAe;IAEf,6BAA6B;IAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACvC,OAAO;IACT,CAAC;IAED,iCAAiC;IACjC,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,iBAAiB;QACjB,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACxD,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1C,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC5C,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;IAE/C,IAAI,CAAC,WAAW,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,SAAS;IACT,MAAM,SAAS,GAAG,MAAM,WAAW,UAAU,gBAAgB,EAAE,CAAC;IAEhE,kBAAkB;IAClB,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAEzD,mCAAmC;IACnC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAC3D,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,OAAO;IACP,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAC;IAE7D,SAAS;IACT,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAE7D,gBAAgB;IAChB,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEnD,QAAQ;IACR,EAAE,CAAC,OAAO,CAAC;;;GAGV,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAC;AACxD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAM/C,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,GAAG,EACV,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,MAAM,QA+HhB"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAM/C,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,GAAG,EACV,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,MAAM,QA2HhB"}
@@ -28,11 +28,9 @@ export function registerMemoryTools(tools, db, dataDir) {
28
28
  const { content, metadata = {} } = params;
29
29
  const memoryId = uuidv4();
30
30
  const memoriesDir = path.join(resolvedDataDir, 'memories');
31
- if (!fs.existsSync(memoriesDir)) {
32
- fs.mkdirSync(memoriesDir, { recursive: true });
33
- }
31
+ fs.mkdirSync(memoriesDir, { recursive: true });
34
32
  const contentPath = path.join(memoriesDir, `${memoryId}.md`);
35
- fs.writeFileSync(contentPath, content, 'utf-8');
33
+ await fs.promises.writeFile(contentPath, content, 'utf-8');
36
34
  db.prepare(`
37
35
  INSERT INTO memories (id, content_path, summary, importance, created_at)
38
36
  VALUES (?, ?, ?, ?, datetime('now'))
@@ -98,15 +96,14 @@ export function registerMemoryTools(tools, db, dataDir) {
98
96
  const memories = db.prepare(`
99
97
  SELECT summary, importance, created_at
100
98
  FROM memories
101
- WHERE date(created_at) >= date(?)
99
+ WHERE created_at >= ?
102
100
  ORDER BY importance DESC
103
101
  LIMIT 20
104
102
  `).all(startDateStr);
105
- const count = Array.isArray(memories) ? memories.length : 0;
106
103
  return {
107
104
  period,
108
- count,
109
- memories: Array.isArray(memories) ? memories.slice(0, 10) : []
105
+ count: memories.length,
106
+ memories: memories.slice(0, 10)
110
107
  };
111
108
  }
112
109
  });
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,14 @@
1
1
  {
2
2
  "id": "claw-memory",
3
3
  "name": "ClawMemory",
4
- "version": "0.1.0",
4
+ "version": "0.1.2",
5
5
  "description": "AI memory system - auto-save conversations and inject memory summary",
6
6
  "main": "./dist/index.js",
7
+ "configSchema": {
8
+ "type": "object",
9
+ "additionalProperties": false,
10
+ "properties": {}
11
+ },
7
12
  "dependencies": {},
8
13
  "scripts": {
9
14
  "build": "tsc"
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@yun-zero/claw-memory",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "OpenClaw 记忆插件 - 自动保存对话,智能注入上下文",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
7
- "bin": {
8
- "claw-memory": "dist/index.js"
7
+ "openclaw": {
8
+ "extensions": ["./dist/index.js"]
9
9
  },
10
10
  "scripts": {
11
11
  "build": "tsc",
@@ -12,7 +12,7 @@ export async function handleAgentBootstrap(
12
12
  const weekMemories = db.prepare(`
13
13
  SELECT summary, importance
14
14
  FROM memories
15
- WHERE date(created_at) >= date(?)
15
+ WHERE created_at >= ?
16
16
  ORDER BY importance DESC
17
17
  LIMIT 10
18
18
  `).all(weekStartStr) as { summary: string; importance: number }[];
@@ -54,22 +54,16 @@ export async function handleMessageSent(
54
54
  // 解析 dataDir 中的 ~
55
55
  const resolvedDataDir = dataDir.replace(/^~/, homedir());
56
56
 
57
- // 确保目录存在
58
- if (!fs.existsSync(resolvedDataDir)) {
59
- fs.mkdirSync(resolvedDataDir, { recursive: true });
60
- }
61
-
57
+ // 直接创建目录(recursive: true 已处理存在的情况)
62
58
  const memoriesDir = path.join(resolvedDataDir, 'memories');
63
- if (!fs.existsSync(memoriesDir)) {
64
- fs.mkdirSync(memoriesDir, { recursive: true });
65
- }
59
+ fs.mkdirSync(memoriesDir, { recursive: true });
66
60
 
67
61
  // 保存记忆
68
62
  const memoryId = uuidv4();
69
63
  const contentPath = path.join(memoriesDir, `${memoryId}.md`);
70
64
 
71
- // 写入文件
72
- fs.writeFileSync(contentPath, qaContent, 'utf-8');
65
+ // 异步写入文件
66
+ await fs.promises.writeFile(contentPath, qaContent, 'utf-8');
73
67
 
74
68
  // 提取摘要(取前200字符)
75
69
  const summary = assistantMessage.substring(0, 200);
@@ -36,12 +36,10 @@ export function registerMemoryTools(
36
36
  const memoryId = uuidv4();
37
37
 
38
38
  const memoriesDir = path.join(resolvedDataDir, 'memories');
39
- if (!fs.existsSync(memoriesDir)) {
40
- fs.mkdirSync(memoriesDir, { recursive: true });
41
- }
39
+ fs.mkdirSync(memoriesDir, { recursive: true });
42
40
 
43
41
  const contentPath = path.join(memoriesDir, `${memoryId}.md`);
44
- fs.writeFileSync(contentPath, content, 'utf-8');
42
+ await fs.promises.writeFile(contentPath, content, 'utf-8');
45
43
 
46
44
  db.prepare(`
47
45
  INSERT INTO memories (id, content_path, summary, importance, created_at)
@@ -120,17 +118,15 @@ export function registerMemoryTools(
120
118
  const memories = db.prepare(`
121
119
  SELECT summary, importance, created_at
122
120
  FROM memories
123
- WHERE date(created_at) >= date(?)
121
+ WHERE created_at >= ?
124
122
  ORDER BY importance DESC
125
123
  LIMIT 20
126
124
  `).all(startDateStr);
127
125
 
128
- const count = Array.isArray(memories) ? memories.length : 0;
129
-
130
126
  return {
131
127
  period,
132
- count,
133
- memories: Array.isArray(memories) ? memories.slice(0, 10) : []
128
+ count: memories.length,
129
+ memories: memories.slice(0, 10)
134
130
  };
135
131
  }
136
132
  });