@memtensor/memos-local-openclaw-plugin 1.0.8-beta.3 → 1.0.8-beta.4
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/index.ts +56 -37
- package/package.json +1 -1
package/index.ts
CHANGED
|
@@ -2339,48 +2339,54 @@ Groups: ${groupNames.length > 0 ? groupNames.join(", ") : "(none)"}`,
|
|
|
2339
2339
|
|
|
2340
2340
|
// ─── Service lifecycle ───
|
|
2341
2341
|
|
|
2342
|
-
|
|
2343
|
-
id: "memos-local-openclaw-plugin",
|
|
2344
|
-
start: async () => {
|
|
2345
|
-
if (hubServer) {
|
|
2346
|
-
const hubUrl = await hubServer.start();
|
|
2347
|
-
api.logger.info(`memos-local: hub started at ${hubUrl}`);
|
|
2348
|
-
}
|
|
2342
|
+
let serviceStarted = false;
|
|
2349
2343
|
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
const session = await connectToHub(store, ctx.config, ctx.log);
|
|
2354
|
-
api.logger.info(`memos-local: connected to Hub as "${session.username}" (${session.userId})`);
|
|
2355
|
-
} catch (err) {
|
|
2356
|
-
api.logger.warn(`memos-local: Hub connection failed: ${err}`);
|
|
2357
|
-
}
|
|
2358
|
-
}
|
|
2344
|
+
const startServiceCore = async () => {
|
|
2345
|
+
if (serviceStarted) return;
|
|
2346
|
+
serviceStarted = true;
|
|
2359
2347
|
|
|
2348
|
+
if (hubServer) {
|
|
2349
|
+
const hubUrl = await hubServer.start();
|
|
2350
|
+
api.logger.info(`memos-local: hub started at ${hubUrl}`);
|
|
2351
|
+
}
|
|
2352
|
+
|
|
2353
|
+
if (ctx.config.sharing?.enabled && ctx.config.sharing.role === "client") {
|
|
2360
2354
|
try {
|
|
2361
|
-
const
|
|
2362
|
-
api.logger.info(`memos-local:
|
|
2363
|
-
api.logger.info(`╔══════════════════════════════════════════╗`);
|
|
2364
|
-
api.logger.info(`║ MemOS Memory Viewer ║`);
|
|
2365
|
-
api.logger.info(`║ → ${viewerUrl.padEnd(37)}║`);
|
|
2366
|
-
api.logger.info(`║ Open in browser to manage memories ║`);
|
|
2367
|
-
api.logger.info(`╚══════════════════════════════════════════╝`);
|
|
2368
|
-
api.logger.info(`memos-local: password reset token: ${viewer.getResetToken()}`);
|
|
2369
|
-
api.logger.info(`memos-local: forgot password? Use the reset token on the login page.`);
|
|
2370
|
-
skillEvolver.recoverOrphanedTasks().then((count) => {
|
|
2371
|
-
if (count > 0) api.logger.info(`memos-local: recovered ${count} orphaned skill tasks`);
|
|
2372
|
-
}).catch((err) => {
|
|
2373
|
-
api.logger.warn(`memos-local: skill recovery failed: ${err}`);
|
|
2374
|
-
});
|
|
2355
|
+
const session = await connectToHub(store, ctx.config, ctx.log);
|
|
2356
|
+
api.logger.info(`memos-local: connected to Hub as "${session.username}" (${session.userId})`);
|
|
2375
2357
|
} catch (err) {
|
|
2376
|
-
api.logger.warn(`memos-local:
|
|
2377
|
-
api.logger.info(`memos-local: started (embedding: ${embedder.provider})`);
|
|
2358
|
+
api.logger.warn(`memos-local: Hub connection failed: ${err}`);
|
|
2378
2359
|
}
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
);
|
|
2383
|
-
|
|
2360
|
+
}
|
|
2361
|
+
|
|
2362
|
+
try {
|
|
2363
|
+
const viewerUrl = await viewer.start();
|
|
2364
|
+
api.logger.info(`memos-local: started (embedding: ${embedder.provider})`);
|
|
2365
|
+
api.logger.info(`╔══════════════════════════════════════════╗`);
|
|
2366
|
+
api.logger.info(`║ MemOS Memory Viewer ║`);
|
|
2367
|
+
api.logger.info(`║ → ${viewerUrl.padEnd(37)}║`);
|
|
2368
|
+
api.logger.info(`║ Open in browser to manage memories ║`);
|
|
2369
|
+
api.logger.info(`╚══════════════════════════════════════════╝`);
|
|
2370
|
+
api.logger.info(`memos-local: password reset token: ${viewer.getResetToken()}`);
|
|
2371
|
+
api.logger.info(`memos-local: forgot password? Use the reset token on the login page.`);
|
|
2372
|
+
skillEvolver.recoverOrphanedTasks().then((count) => {
|
|
2373
|
+
if (count > 0) api.logger.info(`memos-local: recovered ${count} orphaned skill tasks`);
|
|
2374
|
+
}).catch((err) => {
|
|
2375
|
+
api.logger.warn(`memos-local: skill recovery failed: ${err}`);
|
|
2376
|
+
});
|
|
2377
|
+
} catch (err) {
|
|
2378
|
+
api.logger.warn(`memos-local: viewer failed to start: ${err}`);
|
|
2379
|
+
api.logger.info(`memos-local: started (embedding: ${embedder.provider})`);
|
|
2380
|
+
}
|
|
2381
|
+
telemetry.trackPluginStarted(
|
|
2382
|
+
ctx.config.embedding?.provider ?? "local",
|
|
2383
|
+
ctx.config.summarizer?.provider ?? "none",
|
|
2384
|
+
);
|
|
2385
|
+
};
|
|
2386
|
+
|
|
2387
|
+
api.registerService({
|
|
2388
|
+
id: "memos-local-openclaw-plugin",
|
|
2389
|
+
start: async () => { await startServiceCore(); },
|
|
2384
2390
|
stop: async () => {
|
|
2385
2391
|
await worker.flush();
|
|
2386
2392
|
await telemetry.shutdown();
|
|
@@ -2390,6 +2396,19 @@ Groups: ${groupNames.length > 0 ? groupNames.join(", ") : "(none)"}`,
|
|
|
2390
2396
|
api.logger.info("memos-local: stopped");
|
|
2391
2397
|
},
|
|
2392
2398
|
});
|
|
2399
|
+
|
|
2400
|
+
// Fallback: OpenClaw may load this plugin via deferred reload after
|
|
2401
|
+
// startPluginServices has already run, so service.start() never fires.
|
|
2402
|
+
// Self-start the viewer after a grace period if it hasn't been started.
|
|
2403
|
+
const SELF_START_DELAY_MS = 3000;
|
|
2404
|
+
setTimeout(() => {
|
|
2405
|
+
if (!serviceStarted) {
|
|
2406
|
+
api.logger.info("memos-local: service.start() not called by host, self-starting viewer...");
|
|
2407
|
+
startServiceCore().catch((err) => {
|
|
2408
|
+
api.logger.warn(`memos-local: self-start failed: ${err}`);
|
|
2409
|
+
});
|
|
2410
|
+
}
|
|
2411
|
+
}, SELF_START_DELAY_MS);
|
|
2393
2412
|
},
|
|
2394
2413
|
};
|
|
2395
2414
|
|
package/package.json
CHANGED