@memtensor/memos-local-openclaw-plugin 1.0.2-beta.1 → 1.0.2-beta.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.
Files changed (2) hide show
  1. package/index.ts +33 -26
  2. package/package.json +1 -1
package/index.ts CHANGED
@@ -134,37 +134,44 @@ const memosLocalPlugin = {
134
134
  sqliteReady = trySqliteLoad();
135
135
 
136
136
  if (!sqliteReady) {
137
- api.logger.warn(`memos-local: better-sqlite3 not found in ${pluginDir}, attempting auto-rebuild ...`);
137
+ api.logger.warn(`memos-local: better-sqlite3 not found in ${pluginDir}, attempting auto-fix ...`);
138
138
 
139
- try {
140
- const { spawnSync } = require("child_process");
141
- const rebuildResult = spawnSync("npm", ["rebuild", "better-sqlite3"], {
142
- cwd: pluginDir,
143
- stdio: "pipe",
144
- shell: true,
145
- timeout: 120_000,
146
- });
139
+ const { spawnSync } = require("child_process");
140
+ const clearCache = () => {
141
+ Object.keys(require.cache)
142
+ .filter(k => k.includes("better-sqlite3") || k.includes("better_sqlite3"))
143
+ .forEach(k => delete require.cache[k]);
144
+ };
145
+
146
+ const strategies = [
147
+ { label: "npm rebuild better-sqlite3", cmd: ["npm", ["rebuild", "better-sqlite3"]] },
148
+ { label: "npm install better-sqlite3 --no-save", cmd: ["npm", ["install", "better-sqlite3", "--no-save"]] },
149
+ { label: "full npm install", cmd: ["npm", ["install", "--omit=dev"]] },
150
+ ] as const;
147
151
 
148
- const stdout = rebuildResult.stdout?.toString() || "";
149
- const stderr = rebuildResult.stderr?.toString() || "";
150
- if (stdout) api.logger.info(`memos-local: rebuild stdout: ${stdout.slice(0, 500)}`);
151
- if (stderr) api.logger.warn(`memos-local: rebuild stderr: ${stderr.slice(0, 500)}`);
152
-
153
- if (rebuildResult.status === 0) {
154
- Object.keys(require.cache)
155
- .filter(k => k.includes("better-sqlite3") || k.includes("better_sqlite3"))
156
- .forEach(k => delete require.cache[k]);
157
- sqliteReady = trySqliteLoad();
158
- if (sqliteReady) {
159
- api.logger.info("memos-local: better-sqlite3 auto-rebuild succeeded!");
152
+ for (const { label, cmd } of strategies) {
153
+ if (sqliteReady) break;
154
+ api.logger.info(`memos-local: trying ${label} ...`);
155
+ try {
156
+ const r = spawnSync(cmd[0], cmd[1], {
157
+ cwd: pluginDir, stdio: "pipe", shell: true, timeout: 180_000,
158
+ });
159
+ const out = r.stdout?.toString()?.slice(0, 300) || "";
160
+ const err = r.stderr?.toString()?.slice(0, 300) || "";
161
+ if (out) api.logger.info(`memos-local: ${label} stdout: ${out}`);
162
+ if (err && r.status !== 0) api.logger.warn(`memos-local: ${label} stderr: ${err}`);
163
+ if (r.status === 0) {
164
+ clearCache();
165
+ sqliteReady = trySqliteLoad();
166
+ if (sqliteReady) {
167
+ api.logger.info(`memos-local: better-sqlite3 fixed via "${label}"`);
168
+ }
160
169
  } else {
161
- api.logger.warn("memos-local: rebuild exited 0 but module still not loadable from plugin dir");
170
+ api.logger.warn(`memos-local: ${label} exited with code ${r.status}`);
162
171
  }
163
- } else {
164
- api.logger.warn(`memos-local: rebuild exited with code ${rebuildResult.status}`);
172
+ } catch (e) {
173
+ api.logger.warn(`memos-local: ${label} error: ${e}`);
165
174
  }
166
- } catch (rebuildErr) {
167
- api.logger.warn(`memos-local: auto-rebuild error: ${rebuildErr}`);
168
175
  }
169
176
 
170
177
  if (!sqliteReady) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memtensor/memos-local-openclaw-plugin",
3
- "version": "1.0.2-beta.1",
3
+ "version": "1.0.2-beta.2",
4
4
  "description": "MemOS Local memory plugin for OpenClaw — full-write, hybrid-recall, progressive retrieval",
5
5
  "type": "module",
6
6
  "main": "index.ts",