@yun-zero/claw-memory 0.1.4 → 0.1.6

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.
@@ -1,18 +1,4 @@
1
1
  import type { Database } from 'better-sqlite3';
2
- interface MessageEvent {
3
- message: {
4
- role: 'user' | 'assistant';
5
- content: string;
6
- };
7
- session: {
8
- id: string;
9
- key: string;
10
- };
11
- conversation?: Array<{
12
- role: 'user' | 'assistant';
13
- content: string;
14
- }>;
15
- }
16
- export declare function handleMessageSent(event: MessageEvent, db: Database, dataDir: string): Promise<void>;
17
- export {};
2
+ import type { InternalHookEvent } from '../types.js';
3
+ export declare function handleMessageSent(event: InternalHookEvent, db: Database, dataDir: string): Promise<void>;
18
4
  //# sourceMappingURL=message.d.ts.map
@@ -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,CAoDf"}
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/hooks/message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,iBAAiB,EACxB,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
@@ -3,28 +3,22 @@ import * as path from 'path';
3
3
  import * as fs from 'fs';
4
4
  import { homedir } from 'os';
5
5
  export async function handleMessageSent(event, db, dataDir) {
6
- // 只处理 assistant 消息(AI 回复后保存)
7
- if (event.message.role !== 'assistant') {
6
+ // 确保 context 存在
7
+ if (!event.context || typeof event.context !== 'object') {
8
8
  return;
9
9
  }
10
- // conversation 中获取最后一条 user 消息
11
- let userMessage = '';
12
- if (event.conversation && event.conversation.length > 0) {
13
- // 找到最后一个 user 消息
14
- for (let i = event.conversation.length - 1; i >= 0; i--) {
15
- if (event.conversation[i].role === 'user') {
16
- userMessage = event.conversation[i].content;
17
- break;
18
- }
19
- }
10
+ const ctx = event.context;
11
+ // 只处理成功发送的消息
12
+ if (ctx.success !== true) {
13
+ return;
20
14
  }
21
- const assistantMessage = event.message.content;
22
- if (!userMessage || !assistantMessage) {
23
- console.log('[ClawMemory] Skipping - no valid Q&A pair');
15
+ const assistantMessage = ctx.content;
16
+ if (!assistantMessage) {
17
+ console.log('[ClawMemory] Skipping - no message content');
24
18
  return;
25
19
  }
26
- // 构建 Q&A
27
- const qaContent = `Q: ${userMessage}\n\nA: ${assistantMessage}`;
20
+ // 构建 Q&A(简化版,只保存AI回复)
21
+ const qaContent = `A: ${assistantMessage}`;
28
22
  // 解析 dataDir 中的 ~
29
23
  const resolvedDataDir = dataDir.replace(/^~/, homedir());
30
24
  // 直接创建目录(recursive: true 已处理存在的情况)
@@ -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,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
+ {"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;AAG7B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAwB,EACxB,EAAY,EACZ,OAAe;IAEf,gBAAgB;IAChB,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACxD,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,OAAkC,CAAC;IAErD,aAAa;IACb,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,GAAG,GAAG,CAAC,OAAiB,CAAC;IAE/C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,sBAAsB;IACtB,MAAM,SAAS,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAE3C,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"}
package/dist/plugin.d.ts CHANGED
@@ -1,10 +1,7 @@
1
+ import type { InternalHookHandler } from './types.js';
1
2
  export interface OpenClawPluginContext {
2
- hooks: {
3
- register: (event: string, handler: any) => Promise<void>;
4
- };
5
- tools: {
6
- register: (tool: any) => void;
7
- };
3
+ registerHook: (events: string | string[], handler: InternalHookHandler) => void;
4
+ registerTool: (tool: any) => void;
8
5
  config?: any;
9
6
  }
10
7
  export interface OpenClawPlugin {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE;QACL,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1D,CAAC;IACF,KAAK,EAAE;QACL,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;KAC/B,CAAC;IACF,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,cAAc,CA0DzD;;AAGD,wBAA8B"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAChF,YAAY,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,cAAc,CA2DzD;;AAGD,wBAA8B"}
package/dist/plugin.js CHANGED
@@ -8,8 +8,8 @@ export function createPlugin(config) {
8
8
  const pluginConfig = getConfig(config);
9
9
  return {
10
10
  name: 'claw-memory',
11
- version: '0.1.0',
12
- async register(context) {
11
+ version: '0.1.6',
12
+ async register(api) {
13
13
  if (!pluginConfig.enabled) {
14
14
  console.log('[ClawMemory] Plugin disabled');
15
15
  return;
@@ -18,7 +18,7 @@ export function createPlugin(config) {
18
18
  // 初始化数据库
19
19
  const db = getDatabase(pluginConfig.dataDir + '/memory.db');
20
20
  // 注册 message:sent hook
21
- await context.hooks.register('message:sent', async (event) => {
21
+ api.registerHook('message:sent', async (event) => {
22
22
  if (pluginConfig.autoSave) {
23
23
  try {
24
24
  await handleMessageSent(event, db, pluginConfig.dataDir);
@@ -29,12 +29,13 @@ export function createPlugin(config) {
29
29
  }
30
30
  });
31
31
  // 注册 agent:bootstrap hook
32
- await context.hooks.register('agent:bootstrap', async (bootstrapContext) => {
32
+ api.registerHook('agent:bootstrap', async (event) => {
33
33
  try {
34
34
  const summary = await handleAgentBootstrap(db);
35
- if (summary) {
36
- bootstrapContext.context = bootstrapContext.context || '';
37
- bootstrapContext.context += '\n\n' + summary;
35
+ if (summary && event.context) {
36
+ const ctx = event.context;
37
+ ctx.context = ctx.context || '';
38
+ ctx.context += '\n\n' + summary;
38
39
  }
39
40
  }
40
41
  catch (error) {
@@ -42,7 +43,7 @@ export function createPlugin(config) {
42
43
  }
43
44
  });
44
45
  // 注册 Agent Tools
45
- registerMemoryTools(context.tools, db, pluginConfig.dataDir);
46
+ registerMemoryTools({ register: api.registerTool }, db, pluginConfig.dataDir);
46
47
  // 启动 Scheduler
47
48
  if (pluginConfig.scheduler.enabled) {
48
49
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAgB,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAkBpD,MAAM,UAAU,YAAY,CAAC,MAAY;IACvC,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAEvC,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;QAEhB,KAAK,CAAC,QAAQ,CAAC,OAA8B;YAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YAExC,SAAS;YACT,MAAM,EAAE,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC;YAE5D,uBAAuB;YACvB,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,EAAE,KAAU,EAAE,EAAE;gBAChE,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;oBAC1B,IAAI,CAAC;wBACH,MAAM,iBAAiB,CAAC,KAAK,EAAE,EAAE,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;oBAC3D,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;oBAC9D,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,0BAA0B;YAC1B,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,EAAE,KAAK,EAAE,gBAAqB,EAAE,EAAE;gBAC9E,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,EAAE,CAAC,CAAC;oBAC/C,IAAI,OAAO,EAAE,CAAC;wBACZ,gBAAgB,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,IAAI,EAAE,CAAC;wBAC1D,gBAAgB,CAAC,OAAO,IAAI,MAAM,GAAG,OAAO,CAAC;oBAC/C,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,iBAAiB;YACjB,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;YAE7D,eAAe;YACf,IAAI,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBACnC,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;oBAC5D,SAAS,CAAC,KAAK,EAAE,CAAC;gBACpB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACnD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,qBAAqB;AACrB,eAAe,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAgB,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAepD,MAAM,UAAU,YAAY,CAAC,MAAY;IACvC,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAEvC,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;QAEhB,KAAK,CAAC,QAAQ,CAAC,GAA0B;YACvC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YAExC,SAAS;YACT,MAAM,EAAE,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC;YAE5D,uBAAuB;YACvB,GAAG,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,EAAE,KAAU,EAAE,EAAE;gBACpD,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;oBAC1B,IAAI,CAAC;wBACH,MAAM,iBAAiB,CAAC,KAAK,EAAE,EAAE,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;oBAC3D,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;oBAC9D,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,0BAA0B;YAC1B,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,KAAK,EAAE,KAAU,EAAE,EAAE;gBACvD,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,EAAE,CAAC,CAAC;oBAC/C,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;wBAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAkC,CAAC;wBACrD,GAAG,CAAC,OAAO,GAAI,GAAG,CAAC,OAAkB,IAAI,EAAE,CAAC;wBAC5C,GAAG,CAAC,OAAO,IAAI,MAAM,GAAG,OAAO,CAAC;oBAClC,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,iBAAiB;YACjB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;YAE9E,eAAe;YACf,IAAI,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBACnC,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;oBAC5D,SAAS,CAAC,KAAK,EAAE,CAAC;gBACpB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACnD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,qBAAqB;AACrB,eAAe,YAAY,EAAE,CAAC"}
package/dist/types.d.ts CHANGED
@@ -2,6 +2,15 @@
2
2
  * Claw-Memory Type Definitions
3
3
  * Lightweight AI memory system for OpenClaw and Claude Code
4
4
  */
5
+ export type InternalHookHandler = (event: any) => Promise<void> | void;
6
+ export interface InternalHookEvent {
7
+ type?: string;
8
+ action?: string;
9
+ sessionKey?: string;
10
+ context?: Record<string, unknown>;
11
+ timestamp?: Date;
12
+ messages?: string[];
13
+ }
5
14
  export interface IntegratedSummary {
6
15
  active_areas: string[];
7
16
  key_topics: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "claw-memory",
3
3
  "name": "ClawMemory",
4
- "version": "0.1.4",
4
+ "version": "0.1.6",
5
5
  "description": "AI memory system - auto-save conversations and inject memory summary",
6
6
  "main": "./dist/index.js",
7
7
  "configSchema": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yun-zero/claw-memory",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "OpenClaw 记忆插件 - 自动保存对话,智能注入上下文",
5
5
  "main": "dist/plugin.js",
6
6
  "type": "module",
@@ -3,53 +3,34 @@ import { v4 as uuidv4 } from 'uuid';
3
3
  import * as path from 'path';
4
4
  import * as fs from 'fs';
5
5
  import { homedir } from 'os';
6
-
7
- interface MessageEvent {
8
- message: {
9
- role: 'user' | 'assistant';
10
- content: string;
11
- };
12
- session: {
13
- id: string;
14
- key: string;
15
- };
16
- conversation?: Array<{
17
- role: 'user' | 'assistant';
18
- content: string;
19
- }>;
20
- }
6
+ import type { InternalHookEvent } from '../types.js';
21
7
 
22
8
  export async function handleMessageSent(
23
- event: MessageEvent,
9
+ event: InternalHookEvent,
24
10
  db: Database,
25
11
  dataDir: string
26
12
  ): Promise<void> {
27
- // 只处理 assistant 消息(AI 回复后保存)
28
- if (event.message.role !== 'assistant') {
13
+ // 确保 context 存在
14
+ if (!event.context || typeof event.context !== 'object') {
29
15
  return;
30
16
  }
31
17
 
32
- // conversation 中获取最后一条 user 消息
33
- let userMessage = '';
34
- if (event.conversation && event.conversation.length > 0) {
35
- // 找到最后一个 user 消息
36
- for (let i = event.conversation.length - 1; i >= 0; i--) {
37
- if (event.conversation[i].role === 'user') {
38
- userMessage = event.conversation[i].content;
39
- break;
40
- }
41
- }
18
+ const ctx = event.context as Record<string, unknown>;
19
+
20
+ // 只处理成功发送的消息
21
+ if (ctx.success !== true) {
22
+ return;
42
23
  }
43
24
 
44
- const assistantMessage = event.message.content;
25
+ const assistantMessage = ctx.content as string;
45
26
 
46
- if (!userMessage || !assistantMessage) {
47
- console.log('[ClawMemory] Skipping - no valid Q&A pair');
27
+ if (!assistantMessage) {
28
+ console.log('[ClawMemory] Skipping - no message content');
48
29
  return;
49
30
  }
50
31
 
51
- // 构建 Q&A
52
- const qaContent = `Q: ${userMessage}\n\nA: ${assistantMessage}`;
32
+ // 构建 Q&A(简化版,只保存AI回复)
33
+ const qaContent = `A: ${assistantMessage}`;
53
34
 
54
35
  // 解析 dataDir 中的 ~
55
36
  const resolvedDataDir = dataDir.replace(/^~/, homedir());
package/src/plugin.ts CHANGED
@@ -4,14 +4,11 @@ import { handleMessageSent } from './hooks/message.js';
4
4
  import { handleAgentBootstrap } from './hooks/bootstrap.js';
5
5
  import { registerMemoryTools } from './tools/memory.js';
6
6
  import { Scheduler } from './services/scheduler.js';
7
+ import type { InternalHookHandler } from './types.js';
7
8
 
8
9
  export interface OpenClawPluginContext {
9
- hooks: {
10
- register: (event: string, handler: any) => Promise<void>;
11
- };
12
- tools: {
13
- register: (tool: any) => void;
14
- };
10
+ registerHook: (events: string | string[], handler: InternalHookHandler) => void;
11
+ registerTool: (tool: any) => void;
15
12
  config?: any;
16
13
  }
17
14
 
@@ -26,9 +23,9 @@ export function createPlugin(config?: any): OpenClawPlugin {
26
23
 
27
24
  return {
28
25
  name: 'claw-memory',
29
- version: '0.1.0',
26
+ version: '0.1.6',
30
27
 
31
- async register(context: OpenClawPluginContext) {
28
+ async register(api: OpenClawPluginContext) {
32
29
  if (!pluginConfig.enabled) {
33
30
  console.log('[ClawMemory] Plugin disabled');
34
31
  return;
@@ -40,7 +37,7 @@ export function createPlugin(config?: any): OpenClawPlugin {
40
37
  const db = getDatabase(pluginConfig.dataDir + '/memory.db');
41
38
 
42
39
  // 注册 message:sent hook
43
- await context.hooks.register('message:sent', async (event: any) => {
40
+ api.registerHook('message:sent', async (event: any) => {
44
41
  if (pluginConfig.autoSave) {
45
42
  try {
46
43
  await handleMessageSent(event, db, pluginConfig.dataDir);
@@ -51,12 +48,13 @@ export function createPlugin(config?: any): OpenClawPlugin {
51
48
  });
52
49
 
53
50
  // 注册 agent:bootstrap hook
54
- await context.hooks.register('agent:bootstrap', async (bootstrapContext: any) => {
51
+ api.registerHook('agent:bootstrap', async (event: any) => {
55
52
  try {
56
53
  const summary = await handleAgentBootstrap(db);
57
- if (summary) {
58
- bootstrapContext.context = bootstrapContext.context || '';
59
- bootstrapContext.context += '\n\n' + summary;
54
+ if (summary && event.context) {
55
+ const ctx = event.context as Record<string, unknown>;
56
+ ctx.context = (ctx.context as string) || '';
57
+ ctx.context += '\n\n' + summary;
60
58
  }
61
59
  } catch (error) {
62
60
  console.error('[ClawMemory] Failed to inject summary:', error);
@@ -64,7 +62,7 @@ export function createPlugin(config?: any): OpenClawPlugin {
64
62
  });
65
63
 
66
64
  // 注册 Agent Tools
67
- registerMemoryTools(context.tools, db, pluginConfig.dataDir);
65
+ registerMemoryTools({ register: api.registerTool }, db, pluginConfig.dataDir);
68
66
 
69
67
  // 启动 Scheduler
70
68
  if (pluginConfig.scheduler.enabled) {
package/src/types.ts CHANGED
@@ -3,6 +3,18 @@
3
3
  * Lightweight AI memory system for OpenClaw and Claude Code
4
4
  */
5
5
 
6
+ export type InternalHookHandler = (event: any) => Promise<void> | void;
7
+
8
+ // OpenClaw InternalHookEvent 结构
9
+ export interface InternalHookEvent {
10
+ type?: string;
11
+ action?: string;
12
+ sessionKey?: string;
13
+ context?: Record<string, unknown>;
14
+ timestamp?: Date;
15
+ messages?: string[];
16
+ }
17
+
6
18
  export interface IntegratedSummary {
7
19
  active_areas: string[];
8
20
  key_topics: string[];