@t0ken.ai/memoryx-openclaw-plugin 2.2.18 → 2.2.20

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/dist/index.d.ts CHANGED
@@ -48,6 +48,7 @@ declare class MemoryXPlugin {
48
48
  private timersStarted;
49
49
  constructor(pluginConfig?: PluginConfig);
50
50
  init(): Promise<void>;
51
+ startTimersIfNeeded(): Promise<void>;
51
52
  onMessage(role: string, content: string): Promise<boolean>;
52
53
  recall(query: string, limit?: number): Promise<RecallResult>;
53
54
  endConversation(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAqCH,UAAU,YAAY;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,YAAY;IAClB,QAAQ,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,eAAe,EAAE,KAAK,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AA8CD,cAAM,aAAa;IACf,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,aAAa,CAAkB;gBAE3B,YAAY,CAAC,EAAE,YAAY;IAIjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAad,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqC1D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAyC/D,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAYhC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc1C,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAcvE,IAAI,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAiBxC,cAAc,IAAI,OAAO,CAAC;QACnC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,EAAE,OAAO,CAAC;QACrB,KAAK,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;IAwBW,cAAc,IAAI,OAAO,CAAC;QACnC,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE;YACH,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,EAAE,MAAM,CAAC;YACnB,YAAY,EAAE,MAAM,CAAC;YACrB,iBAAiB,EAAE,MAAM,CAAC;YAC1B,gBAAgB,EAAE,MAAM,CAAC;YACzB,mBAAmB,EAAE,MAAM,CAAC;YAC5B,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CAcL;;;;;;kBAUiB,GAAG,iBAAiB,YAAY,GAAG,IAAI;;AANzD,wBAqeE;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAkDH,UAAU,YAAY;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,YAAY;IAClB,QAAQ,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,eAAe,EAAE,KAAK,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAqDD,cAAM,aAAa;IACf,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,aAAa,CAAkB;gBAE3B,YAAY,CAAC,EAAE,YAAY;IAIjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAad,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUpC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA6B1D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAyC/D,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAYhC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc1C,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAcvE,IAAI,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAiBxC,cAAc,IAAI,OAAO,CAAC;QACnC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,EAAE,OAAO,CAAC;QACrB,KAAK,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;IAwBW,cAAc,IAAI,OAAO,CAAC;QACnC,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE;YACH,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,EAAE,MAAM,CAAC;YACnB,YAAY,EAAE,MAAM,CAAC;YACrB,iBAAiB,EAAE,MAAM,CAAC;YAC1B,gBAAgB,EAAE,MAAM,CAAC;YACzB,mBAAmB,EAAE,MAAM,CAAC;YAC5B,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CAcL;;;;;;kBAUiB,GAAG,iBAAiB,YAAY,GAAG,IAAI;;AANzD,wBAgfE;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -26,7 +26,7 @@ import * as fs from "fs";
26
26
  import * as path from "path";
27
27
  import * as os from "os";
28
28
  // 插件版本号 - 由 prebuild 脚本自动从 package.json 同步
29
- const PLUGIN_VERSION = "2.2.18";
29
+ const PLUGIN_VERSION = "2.2.20";
30
30
  const DEFAULT_API_BASE = "https://t0ken.ai/api";
31
31
  const PLUGIN_DIR = path.join(os.homedir(), ".openclaw", "extensions", "memoryx-openclaw-plugin");
32
32
  let logStream = null;
@@ -36,8 +36,19 @@ function ensureDir() {
36
36
  fs.mkdirSync(PLUGIN_DIR, { recursive: true });
37
37
  }
38
38
  }
39
- function log(message) {
40
- console.log(`[MemoryX] ${message}`);
39
+ /**
40
+ * 分层日志系统
41
+ * - 所有日志都写入文件
42
+ * - console=true 时同时写入控制台(用于重要/引导性信息)
43
+ * - console=false 时只写文件(用于调试信息)
44
+ */
45
+ function log(message, options = {}) {
46
+ const { console: toConsole = false } = options;
47
+ // 写入控制台(如果需要)
48
+ if (toConsole) {
49
+ console.log(`[MemoryX] ${message}`);
50
+ }
51
+ // 所有日志都写入文件
41
52
  setImmediate(() => {
42
53
  try {
43
54
  if (!logStreamReady) {
@@ -55,6 +66,8 @@ function log(message) {
55
66
  // Lazy-loaded SDK instance
56
67
  let sdkInstance = null;
57
68
  let sdkInitPromise = null;
69
+ // SDK 版本号(延迟加载)
70
+ let sdkVersion = null;
58
71
  async function getSDK(pluginConfig) {
59
72
  if (sdkInstance)
60
73
  return sdkInstance;
@@ -62,7 +75,8 @@ async function getSDK(pluginConfig) {
62
75
  return sdkInitPromise;
63
76
  sdkInitPromise = (async () => {
64
77
  // Dynamic import SDK
65
- const { MemoryXSDK } = await import("@t0ken.ai/memoryx-sdk");
78
+ const { MemoryXSDK, VERSION } = await import("@t0ken.ai/memoryx-sdk");
79
+ sdkVersion = VERSION;
66
80
  // Agent name 使用主机名,保证重安装时 agent_id 不变
67
81
  // 服务端重安装检测: agent_name + agent_type + machine_fingerprint
68
82
  const agentName = os.hostname();
@@ -83,7 +97,9 @@ async function getSDK(pluginConfig) {
83
97
  // Set debug mode
84
98
  const { setDebug } = await import("@t0ken.ai/memoryx-sdk");
85
99
  setDebug(true);
86
- log("SDK initialized with conversation preset (30k tokens / 5min idle)");
100
+ // 注意:不在这里启动定时器!
101
+ // 定时器在 onMessage 第一次收到消息时启动,避免阻塞 openclaw status 命令
102
+ log(`SDK v${sdkVersion} initialized with conversation preset (30k tokens / 5min idle)`, { console: true });
87
103
  return sdkInstance;
88
104
  })();
89
105
  return sdkInitPromise;
@@ -108,15 +124,17 @@ class MemoryXPlugin {
108
124
  log(`Init failed: ${e}`);
109
125
  }
110
126
  }
127
+ async startTimersIfNeeded() {
128
+ if (this.timersStarted)
129
+ return;
130
+ await this.init();
131
+ const sdk = await getSDK(this.pluginConfig);
132
+ sdk.startTimers();
133
+ this.timersStarted = true;
134
+ log("Timers started");
135
+ }
111
136
  async onMessage(role, content) {
112
137
  await this.init();
113
- // 第一次收到消息时启动定时器
114
- if (!this.timersStarted) {
115
- const sdk = await getSDK(this.pluginConfig);
116
- sdk.startTimers();
117
- this.timersStarted = true;
118
- log("Timers started on first message");
119
- }
120
138
  if (!content || content.length < 2) {
121
139
  return false;
122
140
  }
@@ -639,11 +657,20 @@ export default {
639
657
  // Auto-inject memories via prependContext
640
658
  // Note: OpenClaw's systemPrompt field is extracted but NEVER USED (bug in attempt.ts:918-928)
641
659
  // We use prependContext which works, but the context will be visible in the user's prompt
660
+ //
661
+ // IMPORTANT: 对话流走的是 before_agent_start 事件,不是 message_received!
662
+ // message_received 只在 auto-reply 功能中触发
642
663
  api.on("before_agent_start", async (event, ctx) => {
643
664
  const { prompt } = event;
644
665
  if (!prompt || prompt.length < 2 || !plugin)
645
666
  return;
646
667
  try {
668
+ // 1. 启动定时器(第一次对话时)
669
+ // 对话流不走 message_received,必须在这里启动定时器
670
+ await plugin.startTimersIfNeeded();
671
+ // 2. 保存用户消息到队列
672
+ await plugin.onMessage("user", prompt);
673
+ // 3. 搜索相关记忆
647
674
  const result = await plugin.recall(prompt, 5);
648
675
  if (result.isLimited) {
649
676
  // Don't inject upgrade hints into prompt - just log
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@t0ken.ai/memoryx-openclaw-plugin",
3
- "version": "2.2.18",
3
+ "version": "2.2.20",
4
4
  "description": "MemoryX real-time memory capture and recall plugin for OpenClaw (powered by @t0ken.ai/memoryx-sdk)",
5
5
  "type": "module",
6
6
  "author": "MemoryX Team",
@@ -36,6 +36,6 @@
36
36
  "typescript": "^5.0.0"
37
37
  },
38
38
  "dependencies": {
39
- "@t0ken.ai/memoryx-sdk": "^1.4.7"
39
+ "@t0ken.ai/memoryx-sdk": "^1.4.9"
40
40
  }
41
41
  }