@memtensor/memos-local-openclaw-plugin 1.0.2-beta.5 → 1.0.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.
- package/dist/capture/index.js +52 -8
- package/dist/capture/index.js.map +1 -1
- package/dist/ingest/chunker.d.ts +3 -4
- package/dist/ingest/chunker.d.ts.map +1 -1
- package/dist/ingest/chunker.js +19 -24
- package/dist/ingest/chunker.js.map +1 -1
- package/dist/ingest/providers/anthropic.d.ts +3 -1
- package/dist/ingest/providers/anthropic.d.ts.map +1 -1
- package/dist/ingest/providers/anthropic.js +79 -39
- package/dist/ingest/providers/anthropic.js.map +1 -1
- package/dist/ingest/providers/bedrock.d.ts +3 -1
- package/dist/ingest/providers/bedrock.d.ts.map +1 -1
- package/dist/ingest/providers/bedrock.js +79 -39
- package/dist/ingest/providers/bedrock.js.map +1 -1
- package/dist/ingest/providers/gemini.d.ts +3 -1
- package/dist/ingest/providers/gemini.d.ts.map +1 -1
- package/dist/ingest/providers/gemini.js +77 -39
- package/dist/ingest/providers/gemini.js.map +1 -1
- package/dist/ingest/providers/index.d.ts +3 -1
- package/dist/ingest/providers/index.d.ts.map +1 -1
- package/dist/ingest/providers/index.js +70 -30
- package/dist/ingest/providers/index.js.map +1 -1
- package/dist/ingest/providers/openai.d.ts +3 -1
- package/dist/ingest/providers/openai.d.ts.map +1 -1
- package/dist/ingest/providers/openai.js +80 -39
- package/dist/ingest/providers/openai.js.map +1 -1
- package/dist/ingest/task-processor.d.ts +1 -0
- package/dist/ingest/task-processor.d.ts.map +1 -1
- package/dist/ingest/task-processor.js +33 -9
- package/dist/ingest/task-processor.js.map +1 -1
- package/dist/ingest/worker.d.ts.map +1 -1
- package/dist/ingest/worker.js +29 -13
- package/dist/ingest/worker.js.map +1 -1
- package/dist/recall/engine.d.ts.map +1 -1
- package/dist/recall/engine.js +19 -14
- package/dist/recall/engine.js.map +1 -1
- package/dist/skill/bundled-memory-guide.d.ts +1 -5
- package/dist/skill/bundled-memory-guide.d.ts.map +1 -1
- package/dist/skill/bundled-memory-guide.js +38 -97
- package/dist/skill/bundled-memory-guide.js.map +1 -1
- package/dist/skill/evaluator.js +1 -1
- package/dist/storage/sqlite.d.ts +1 -2
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +90 -17
- package/dist/storage/sqlite.js.map +1 -1
- package/dist/tools/memory-get.d.ts.map +1 -1
- package/dist/tools/memory-get.js +1 -3
- package/dist/tools/memory-get.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/update-check.d.ts +21 -0
- package/dist/update-check.d.ts.map +1 -0
- package/dist/update-check.js +111 -0
- package/dist/update-check.js.map +1 -0
- package/dist/viewer/html.d.ts.map +1 -1
- package/dist/viewer/html.js +444 -182
- package/dist/viewer/html.js.map +1 -1
- package/dist/viewer/server.d.ts +1 -1
- package/dist/viewer/server.d.ts.map +1 -1
- package/dist/viewer/server.js +142 -78
- package/dist/viewer/server.js.map +1 -1
- package/index.ts +206 -198
- package/openclaw.plugin.json +3 -0
- package/package.json +5 -1
- package/scripts/postinstall.cjs +69 -2
- package/skill/memos-memory-guide/SKILL.md +73 -36
- package/src/capture/index.ts +52 -8
- package/src/ingest/chunker.ts +22 -30
- package/src/ingest/providers/anthropic.ts +89 -41
- package/src/ingest/providers/bedrock.ts +90 -41
- package/src/ingest/providers/gemini.ts +89 -41
- package/src/ingest/providers/index.ts +81 -35
- package/src/ingest/providers/openai.ts +90 -41
- package/src/ingest/task-processor.ts +29 -8
- package/src/ingest/worker.ts +31 -13
- package/src/recall/engine.ts +20 -13
- package/src/skill/bundled-memory-guide.ts +5 -96
- package/src/skill/evaluator.ts +1 -1
- package/src/storage/sqlite.ts +93 -21
- package/src/tools/memory-get.ts +1 -4
- package/src/types.ts +2 -9
- package/src/update-check.ts +96 -0
- package/src/viewer/html.ts +444 -182
- package/src/viewer/server.ts +101 -66
package/dist/viewer/html.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/viewer/html.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/viewer/html.ts"],"names":[],"mappings":";;AAAA,gCAwoJC;AAxoJD,SAAgB,UAAU,CAAC,aAAsB;IACjD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,gCAAgC,aAAa,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sDAwxB+C,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA62HpD,CAAC;AACT,CAAC"}
|
package/dist/viewer/server.d.ts
CHANGED
|
@@ -65,7 +65,6 @@ export declare class ViewerServer {
|
|
|
65
65
|
private handleTaskUpdate;
|
|
66
66
|
private handleSkillDelete;
|
|
67
67
|
private handleSkillUpdate;
|
|
68
|
-
private handleCreate;
|
|
69
68
|
private serveMemoryDetail;
|
|
70
69
|
private handleUpdate;
|
|
71
70
|
private handleDelete;
|
|
@@ -79,6 +78,7 @@ export declare class ViewerServer {
|
|
|
79
78
|
private serveFallbackModel;
|
|
80
79
|
private findPluginPackageJson;
|
|
81
80
|
private handleUpdateCheck;
|
|
81
|
+
private handleUpdateInstall;
|
|
82
82
|
private testEmbeddingModel;
|
|
83
83
|
private testChatModel;
|
|
84
84
|
private serveLogs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/viewer/server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAQ7C,OAAO,KAAK,EAAE,MAAM,EAAS,aAAa,EAAE,MAAM,UAAU,CAAC;AAS7D,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,aAAa,CAAC;CACrB;AAOD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAgB;IAErC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAuB;IAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAOjC;IACL,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAW8G;IACpI,OAAO,CAAC,mBAAmB,CAA6B;IAExD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/viewer/server.ts"],"names":[],"mappings":"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"}
|
package/dist/viewer/server.js
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
@@ -51,7 +84,7 @@ class ViewerServer {
|
|
|
51
84
|
migrationSSEClients = [];
|
|
52
85
|
ppRunning = false;
|
|
53
86
|
ppAbort = false;
|
|
54
|
-
ppState = { running: false, done: false, stopped: false, processed: 0, total: 0, tasksCreated: 0, skillsCreated: 0, errors: 0 };
|
|
87
|
+
ppState = { running: false, done: false, stopped: false, processed: 0, total: 0, tasksCreated: 0, skillsCreated: 0, errors: 0, skippedSessions: 0, totalSessions: 0 };
|
|
55
88
|
ppSSEClients = [];
|
|
56
89
|
constructor(opts) {
|
|
57
90
|
this.store = opts.store;
|
|
@@ -222,8 +255,6 @@ class ViewerServer {
|
|
|
222
255
|
this.handleSkillUpdate(req, res, p);
|
|
223
256
|
else if (p.startsWith("/api/skill/") && req.method === "GET")
|
|
224
257
|
this.serveSkillDetail(res, p);
|
|
225
|
-
else if (p === "/api/memory" && req.method === "POST")
|
|
226
|
-
this.handleCreate(req, res);
|
|
227
258
|
else if (p.startsWith("/api/memory/") && req.method === "GET")
|
|
228
259
|
this.serveMemoryDetail(res, p);
|
|
229
260
|
else if (p.startsWith("/api/memory/") && req.method === "PUT")
|
|
@@ -250,6 +281,8 @@ class ViewerServer {
|
|
|
250
281
|
this.serveFallbackModel(res);
|
|
251
282
|
else if (p === "/api/update-check" && req.method === "GET")
|
|
252
283
|
this.handleUpdateCheck(res);
|
|
284
|
+
else if (p === "/api/update-install" && req.method === "POST")
|
|
285
|
+
this.handleUpdateInstall(req, res);
|
|
253
286
|
else if (p === "/api/auth/logout" && req.method === "POST")
|
|
254
287
|
this.handleLogout(req, res);
|
|
255
288
|
else if (p === "/api/cleanup-polluted" && req.method === "POST")
|
|
@@ -390,7 +423,6 @@ class ViewerServer {
|
|
|
390
423
|
const offset = (page - 1) * limit;
|
|
391
424
|
const session = url.searchParams.get("session") ?? undefined;
|
|
392
425
|
const role = url.searchParams.get("role") ?? undefined;
|
|
393
|
-
const kind = url.searchParams.get("kind") ?? undefined;
|
|
394
426
|
const dateFrom = url.searchParams.get("dateFrom") ?? undefined;
|
|
395
427
|
const dateTo = url.searchParams.get("dateTo") ?? undefined;
|
|
396
428
|
const owner = url.searchParams.get("owner") ?? undefined;
|
|
@@ -406,10 +438,6 @@ class ViewerServer {
|
|
|
406
438
|
conditions.push("role = ?");
|
|
407
439
|
params.push(role);
|
|
408
440
|
}
|
|
409
|
-
if (kind) {
|
|
410
|
-
conditions.push("kind = ?");
|
|
411
|
-
params.push(kind);
|
|
412
|
-
}
|
|
413
441
|
if (owner) {
|
|
414
442
|
conditions.push("owner = ?");
|
|
415
443
|
params.push(owner);
|
|
@@ -425,9 +453,14 @@ class ViewerServer {
|
|
|
425
453
|
const where = conditions.length > 0 ? " WHERE " + conditions.join(" AND ") : "";
|
|
426
454
|
const totalRow = db.prepare("SELECT COUNT(*) as count FROM chunks" + where).get(...params);
|
|
427
455
|
const rawMemories = db.prepare("SELECT * FROM chunks" + where + ` ORDER BY created_at ${sortBy} LIMIT ? OFFSET ?`).all(...params, limit, offset);
|
|
456
|
+
const findMergeSources = db.prepare("SELECT id, summary, role FROM chunks WHERE dedup_target = ? AND (dedup_status = 'merged' OR dedup_status = 'duplicate')");
|
|
428
457
|
const memories = rawMemories.map((m) => {
|
|
429
458
|
if (m.role === "user" && m.content) {
|
|
430
|
-
|
|
459
|
+
m = { ...m, content: (0, capture_1.stripInboundMetadata)(m.content) };
|
|
460
|
+
}
|
|
461
|
+
if (m.merge_count > 0) {
|
|
462
|
+
const sources = findMergeSources.all(m.id);
|
|
463
|
+
m.merge_sources = sources;
|
|
431
464
|
}
|
|
432
465
|
return m;
|
|
433
466
|
});
|
|
@@ -460,7 +493,7 @@ class ViewerServer {
|
|
|
460
493
|
id: t.id,
|
|
461
494
|
sessionKey: t.sessionKey,
|
|
462
495
|
title: t.title,
|
|
463
|
-
summary: t.summary
|
|
496
|
+
summary: t.summary ?? "",
|
|
464
497
|
status: t.status,
|
|
465
498
|
startedAt: t.startedAt,
|
|
466
499
|
endedAt: t.endedAt,
|
|
@@ -480,9 +513,7 @@ class ViewerServer {
|
|
|
480
513
|
}
|
|
481
514
|
const chunks = this.store.getChunksByTask(taskId);
|
|
482
515
|
const chunkItems = chunks.map((c) => {
|
|
483
|
-
|
|
484
|
-
if (text.length > 500)
|
|
485
|
-
text = text.slice(0, 497) + "...";
|
|
516
|
+
const text = c.role === "user" ? (0, capture_1.stripInboundMetadata)(c.content) : c.content;
|
|
486
517
|
return { id: c.id, role: c.role, content: text, summary: c.summary, createdAt: c.createdAt };
|
|
487
518
|
});
|
|
488
519
|
const relatedSkills = this.store.getSkillsByTask(taskId);
|
|
@@ -514,7 +545,7 @@ class ViewerServer {
|
|
|
514
545
|
const emptyStats = {
|
|
515
546
|
totalMemories: 0, totalSessions: 0, totalEmbeddings: 0, totalSkills: 0,
|
|
516
547
|
embeddingProvider: this.embedder?.provider ?? "none",
|
|
517
|
-
|
|
548
|
+
dedupBreakdown: {},
|
|
518
549
|
timeRange: { earliest: null, latest: null },
|
|
519
550
|
sessions: [],
|
|
520
551
|
};
|
|
@@ -526,7 +557,6 @@ class ViewerServer {
|
|
|
526
557
|
const db = this.store.db;
|
|
527
558
|
const total = db.prepare("SELECT COUNT(*) as count FROM chunks").get();
|
|
528
559
|
const sessions = db.prepare("SELECT COUNT(DISTINCT session_key) as count FROM chunks").get();
|
|
529
|
-
const roles = db.prepare("SELECT role, COUNT(*) as count FROM chunks GROUP BY role").all();
|
|
530
560
|
const timeRange = db.prepare("SELECT MIN(created_at) as earliest, MAX(created_at) as latest FROM chunks WHERE dedup_status = 'active'").get();
|
|
531
561
|
const MIN_VALID_TS = 1704067200000; // 2024-01-01
|
|
532
562
|
if (timeRange.earliest != null && timeRange.earliest < MIN_VALID_TS) {
|
|
@@ -541,7 +571,6 @@ class ViewerServer {
|
|
|
541
571
|
embCount = db.prepare("SELECT COUNT(*) as count FROM embeddings").get().count;
|
|
542
572
|
}
|
|
543
573
|
catch { /* table may not exist */ }
|
|
544
|
-
const kinds = db.prepare("SELECT kind, COUNT(*) as count FROM chunks GROUP BY kind").all();
|
|
545
574
|
const sessionList = db.prepare("SELECT session_key, COUNT(*) as count, MIN(created_at) as earliest, MAX(created_at) as latest FROM chunks GROUP BY session_key ORDER BY latest DESC").all();
|
|
546
575
|
let skillCount = 0;
|
|
547
576
|
try {
|
|
@@ -564,8 +593,6 @@ class ViewerServer {
|
|
|
564
593
|
totalMemories: total.count, totalSessions: sessions.count, totalEmbeddings: embCount,
|
|
565
594
|
totalSkills: skillCount,
|
|
566
595
|
embeddingProvider: this.embedder.provider,
|
|
567
|
-
roleBreakdown: Object.fromEntries(roles.map((r) => [r.role, r.count])),
|
|
568
|
-
kindBreakdown: Object.fromEntries(kinds.map((k) => [k.kind, k.count])),
|
|
569
596
|
dedupBreakdown,
|
|
570
597
|
timeRange: { earliest: timeRange.earliest, latest: timeRange.latest },
|
|
571
598
|
sessions: sessionList,
|
|
@@ -584,7 +611,6 @@ class ViewerServer {
|
|
|
584
611
|
return;
|
|
585
612
|
}
|
|
586
613
|
const role = url.searchParams.get("role") ?? undefined;
|
|
587
|
-
const kind = url.searchParams.get("kind") ?? undefined;
|
|
588
614
|
const session = url.searchParams.get("session") ?? undefined;
|
|
589
615
|
const owner = url.searchParams.get("owner") ?? undefined;
|
|
590
616
|
const dateFrom = url.searchParams.get("dateFrom") ?? undefined;
|
|
@@ -592,8 +618,6 @@ class ViewerServer {
|
|
|
592
618
|
const passesFilter = (r) => {
|
|
593
619
|
if (role && r.role !== role)
|
|
594
620
|
return false;
|
|
595
|
-
if (kind && r.kind !== kind)
|
|
596
|
-
return false;
|
|
597
621
|
if (session && r.session_key !== session)
|
|
598
622
|
return false;
|
|
599
623
|
if (owner && r.owner !== owner)
|
|
@@ -961,35 +985,6 @@ class ViewerServer {
|
|
|
961
985
|
});
|
|
962
986
|
}
|
|
963
987
|
// ─── CRUD ───
|
|
964
|
-
handleCreate(req, res) {
|
|
965
|
-
this.readBody(req, (body) => {
|
|
966
|
-
try {
|
|
967
|
-
const data = JSON.parse(body);
|
|
968
|
-
if (!data.content || typeof data.content !== "string" || !data.content.trim()) {
|
|
969
|
-
res.writeHead(400, { "Content-Type": "application/json" });
|
|
970
|
-
res.end(JSON.stringify({ error: "content is required and must be a non-empty string" }));
|
|
971
|
-
return;
|
|
972
|
-
}
|
|
973
|
-
const { v4: uuidv4 } = require("uuid");
|
|
974
|
-
const id = uuidv4();
|
|
975
|
-
const now = Date.now();
|
|
976
|
-
this.store.insertChunk({
|
|
977
|
-
id, sessionKey: data.session_key || "manual", turnId: `manual-${now}`, seq: 0,
|
|
978
|
-
role: data.role || "user", content: data.content, kind: data.kind || "paragraph",
|
|
979
|
-
summary: data.summary || data.content.slice(0, 100),
|
|
980
|
-
taskId: null, skillId: null, owner: data.owner || "agent:main",
|
|
981
|
-
dedupStatus: "active", dedupTarget: null, dedupReason: null,
|
|
982
|
-
mergeCount: 0, lastHitAt: null, mergeHistory: "[]",
|
|
983
|
-
createdAt: now, updatedAt: now, embedding: null,
|
|
984
|
-
});
|
|
985
|
-
this.jsonResponse(res, { ok: true, id, message: "Memory created" });
|
|
986
|
-
}
|
|
987
|
-
catch (err) {
|
|
988
|
-
res.writeHead(400, { "Content-Type": "application/json" });
|
|
989
|
-
res.end(JSON.stringify({ error: String(err) }));
|
|
990
|
-
}
|
|
991
|
-
});
|
|
992
|
-
}
|
|
993
988
|
serveMemoryDetail(res, urlPath) {
|
|
994
989
|
const chunkId = urlPath.replace("/api/memory/", "");
|
|
995
990
|
const chunk = this.store.getChunk(chunkId);
|
|
@@ -1013,7 +1008,7 @@ class ViewerServer {
|
|
|
1013
1008
|
res.end(JSON.stringify({ error: "content must be a non-empty string" }));
|
|
1014
1009
|
return;
|
|
1015
1010
|
}
|
|
1016
|
-
const ok = this.store.updateChunk(chunkId, { summary: data.summary, content: data.content, role: data.role,
|
|
1011
|
+
const ok = this.store.updateChunk(chunkId, { summary: data.summary, content: data.content, role: data.role, owner: data.owner });
|
|
1017
1012
|
if (ok)
|
|
1018
1013
|
this.jsonResponse(res, { ok: true, message: "Memory updated" });
|
|
1019
1014
|
else {
|
|
@@ -1239,20 +1234,20 @@ class ViewerServer {
|
|
|
1239
1234
|
this.jsonResponse(res, { updateAvailable: false, current });
|
|
1240
1235
|
return;
|
|
1241
1236
|
}
|
|
1242
|
-
const
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
this.jsonResponse(res, { updateAvailable: false, current });
|
|
1237
|
+
const { computeUpdateCheck } = await Promise.resolve().then(() => __importStar(require("../update-check")));
|
|
1238
|
+
const result = await computeUpdateCheck(name, current, fetch, 6_000);
|
|
1239
|
+
if (!result) {
|
|
1240
|
+
this.jsonResponse(res, { updateAvailable: false, current, packageName: name });
|
|
1247
1241
|
return;
|
|
1248
1242
|
}
|
|
1249
|
-
const data = await npmResp.json();
|
|
1250
|
-
const latest = data.version ?? current;
|
|
1251
1243
|
this.jsonResponse(res, {
|
|
1252
|
-
updateAvailable:
|
|
1253
|
-
current,
|
|
1254
|
-
latest,
|
|
1255
|
-
packageName:
|
|
1244
|
+
updateAvailable: result.updateAvailable,
|
|
1245
|
+
current: result.current,
|
|
1246
|
+
latest: result.latest,
|
|
1247
|
+
packageName: result.packageName,
|
|
1248
|
+
channel: result.channel,
|
|
1249
|
+
installCommand: result.installCommand,
|
|
1250
|
+
stableChannel: result.stableChannel,
|
|
1256
1251
|
});
|
|
1257
1252
|
}
|
|
1258
1253
|
catch (e) {
|
|
@@ -1260,6 +1255,49 @@ class ViewerServer {
|
|
|
1260
1255
|
this.jsonResponse(res, { updateAvailable: false, error: String(e) });
|
|
1261
1256
|
}
|
|
1262
1257
|
}
|
|
1258
|
+
handleUpdateInstall(req, res) {
|
|
1259
|
+
let body = "";
|
|
1260
|
+
req.on("data", (chunk) => { body += chunk.toString(); });
|
|
1261
|
+
req.on("end", () => {
|
|
1262
|
+
try {
|
|
1263
|
+
const { packageSpec } = JSON.parse(body);
|
|
1264
|
+
if (!packageSpec || typeof packageSpec !== "string") {
|
|
1265
|
+
res.writeHead(400, { "Content-Type": "application/json" });
|
|
1266
|
+
res.end(JSON.stringify({ ok: false, error: "Missing packageSpec" }));
|
|
1267
|
+
return;
|
|
1268
|
+
}
|
|
1269
|
+
const allowed = /^@[\w-]+\/[\w.-]+(@[\w.-]+)?$/;
|
|
1270
|
+
if (!allowed.test(packageSpec)) {
|
|
1271
|
+
res.writeHead(400, { "Content-Type": "application/json" });
|
|
1272
|
+
res.end(JSON.stringify({ ok: false, error: "Invalid package spec" }));
|
|
1273
|
+
return;
|
|
1274
|
+
}
|
|
1275
|
+
this.log.info(`update-install: installing ${packageSpec}...`);
|
|
1276
|
+
(0, node_child_process_1.exec)(`npx openclaw plugins install ${packageSpec}`, { timeout: 120_000 }, (err, stdout, stderr) => {
|
|
1277
|
+
if (err) {
|
|
1278
|
+
this.log.warn(`update-install failed: ${err.message}\n${stderr}`);
|
|
1279
|
+
this.jsonResponse(res, { ok: false, error: stderr || err.message });
|
|
1280
|
+
return;
|
|
1281
|
+
}
|
|
1282
|
+
this.log.info(`update-install success: ${stdout}`);
|
|
1283
|
+
this.jsonResponse(res, { ok: true, output: stdout });
|
|
1284
|
+
this.log.info(`update-install: restarting gateway...`);
|
|
1285
|
+
setTimeout(() => {
|
|
1286
|
+
(0, node_child_process_1.exec)("npx openclaw gateway restart", { timeout: 30_000 }, (restartErr) => {
|
|
1287
|
+
if (restartErr)
|
|
1288
|
+
this.log.warn(`gateway restart failed: ${restartErr.message}`);
|
|
1289
|
+
else
|
|
1290
|
+
this.log.info("gateway restart initiated");
|
|
1291
|
+
});
|
|
1292
|
+
}, 1000);
|
|
1293
|
+
});
|
|
1294
|
+
}
|
|
1295
|
+
catch (e) {
|
|
1296
|
+
res.writeHead(400, { "Content-Type": "application/json" });
|
|
1297
|
+
res.end(JSON.stringify({ ok: false, error: String(e) }));
|
|
1298
|
+
}
|
|
1299
|
+
});
|
|
1300
|
+
}
|
|
1263
1301
|
async testEmbeddingModel(provider, model, endpoint, apiKey) {
|
|
1264
1302
|
if (provider === "local") {
|
|
1265
1303
|
return 384;
|
|
@@ -1492,10 +1530,16 @@ class ViewerServer {
|
|
|
1492
1530
|
catch { /* ignore */ }
|
|
1493
1531
|
}
|
|
1494
1532
|
let importedSessions = [];
|
|
1533
|
+
let importedChunkCount = 0;
|
|
1495
1534
|
try {
|
|
1496
1535
|
if (this.store) {
|
|
1497
1536
|
importedSessions = this.store.getDistinctSessionKeys()
|
|
1498
1537
|
.filter((sk) => sk.startsWith("openclaw-import-") || sk.startsWith("openclaw-session-"));
|
|
1538
|
+
if (importedSessions.length > 0) {
|
|
1539
|
+
const placeholders = importedSessions.map(() => "?").join(",");
|
|
1540
|
+
const row = this.store.db.prepare(`SELECT COUNT(*) as cnt FROM chunks WHERE session_key IN (${placeholders})`).get(...importedSessions);
|
|
1541
|
+
importedChunkCount = row?.cnt ?? 0;
|
|
1542
|
+
}
|
|
1499
1543
|
}
|
|
1500
1544
|
}
|
|
1501
1545
|
catch (storeErr) {
|
|
@@ -1510,6 +1554,7 @@ class ViewerServer {
|
|
|
1510
1554
|
hasSummarizer,
|
|
1511
1555
|
hasImportedData: importedSessions.length > 0,
|
|
1512
1556
|
importedSessionCount: importedSessions.length,
|
|
1557
|
+
importedChunkCount,
|
|
1513
1558
|
});
|
|
1514
1559
|
}
|
|
1515
1560
|
catch (e) {
|
|
@@ -1646,14 +1691,17 @@ class ViewerServer {
|
|
|
1646
1691
|
else {
|
|
1647
1692
|
this.broadcastSSE("done", { ok: true });
|
|
1648
1693
|
}
|
|
1649
|
-
for (const c of this.migrationSSEClients) {
|
|
1650
|
-
try {
|
|
1651
|
-
c.end();
|
|
1652
|
-
}
|
|
1653
|
-
catch { /* ignore */ }
|
|
1654
|
-
}
|
|
1655
|
-
this.migrationSSEClients = [];
|
|
1656
1694
|
this.migrationAbort = false;
|
|
1695
|
+
const clientsToClose = [...this.migrationSSEClients];
|
|
1696
|
+
this.migrationSSEClients = [];
|
|
1697
|
+
setTimeout(() => {
|
|
1698
|
+
for (const c of clientsToClose) {
|
|
1699
|
+
try {
|
|
1700
|
+
c.end();
|
|
1701
|
+
}
|
|
1702
|
+
catch { /* ignore */ }
|
|
1703
|
+
}
|
|
1704
|
+
}, 500);
|
|
1657
1705
|
});
|
|
1658
1706
|
});
|
|
1659
1707
|
}
|
|
@@ -2085,7 +2133,7 @@ class ViewerServer {
|
|
|
2085
2133
|
this.ppSSEClients.push(res);
|
|
2086
2134
|
res.on("close", () => { this.ppSSEClients = this.ppSSEClients.filter(c => c !== res); });
|
|
2087
2135
|
this.ppAbort = false;
|
|
2088
|
-
this.ppState = { running: true, done: false, stopped: false, processed: 0, total: 0, tasksCreated: 0, skillsCreated: 0, errors: 0 };
|
|
2136
|
+
this.ppState = { running: true, done: false, stopped: false, processed: 0, total: 0, tasksCreated: 0, skillsCreated: 0, errors: 0, skippedSessions: 0, totalSessions: 0 };
|
|
2089
2137
|
const send = (event, data) => {
|
|
2090
2138
|
this.broadcastPPSSE(event, data);
|
|
2091
2139
|
};
|
|
@@ -2101,14 +2149,17 @@ class ViewerServer {
|
|
|
2101
2149
|
else {
|
|
2102
2150
|
this.broadcastPPSSE("done", { ...this.ppState });
|
|
2103
2151
|
}
|
|
2104
|
-
for (const c of this.ppSSEClients) {
|
|
2105
|
-
try {
|
|
2106
|
-
c.end();
|
|
2107
|
-
}
|
|
2108
|
-
catch { /* */ }
|
|
2109
|
-
}
|
|
2110
|
-
this.ppSSEClients = [];
|
|
2111
2152
|
this.ppAbort = false;
|
|
2153
|
+
const ppClientsToClose = [...this.ppSSEClients];
|
|
2154
|
+
this.ppSSEClients = [];
|
|
2155
|
+
setTimeout(() => {
|
|
2156
|
+
for (const c of ppClientsToClose) {
|
|
2157
|
+
try {
|
|
2158
|
+
c.end();
|
|
2159
|
+
}
|
|
2160
|
+
catch { /* */ }
|
|
2161
|
+
}
|
|
2162
|
+
}, 500);
|
|
2112
2163
|
});
|
|
2113
2164
|
});
|
|
2114
2165
|
}
|
|
@@ -2138,7 +2189,14 @@ class ViewerServer {
|
|
|
2138
2189
|
this.jsonResponse(res, { ok: true });
|
|
2139
2190
|
}
|
|
2140
2191
|
handlePostprocessStatus(res) {
|
|
2141
|
-
|
|
2192
|
+
let existingTasks = 0;
|
|
2193
|
+
let existingSkills = 0;
|
|
2194
|
+
try {
|
|
2195
|
+
existingTasks = this.store.db.prepare("SELECT COUNT(*) as c FROM tasks").get()?.c ?? 0;
|
|
2196
|
+
existingSkills = this.store.countSkills("active");
|
|
2197
|
+
}
|
|
2198
|
+
catch { /* */ }
|
|
2199
|
+
this.jsonResponse(res, { ...this.ppState, existingTasks, existingSkills });
|
|
2142
2200
|
}
|
|
2143
2201
|
broadcastPPSSE(event, data) {
|
|
2144
2202
|
const payload = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
|
|
@@ -2178,12 +2236,18 @@ class ViewerServer {
|
|
|
2178
2236
|
agentGroups.set(item.owner, group);
|
|
2179
2237
|
}
|
|
2180
2238
|
this.ppState.total = pendingItems.length;
|
|
2239
|
+
this.ppState.skippedSessions = skippedCount;
|
|
2240
|
+
this.ppState.totalSessions = importSessions.length;
|
|
2241
|
+
const existingTaskCount = this.store.db.prepare("SELECT COUNT(*) as c FROM tasks WHERE session_key IN (" + importSessions.map(() => "?").join(",") + ")").get(...importSessions)?.c ?? 0;
|
|
2242
|
+
const existingSkillCount = this.store.countSkills("active");
|
|
2181
2243
|
send("info", {
|
|
2182
2244
|
totalSessions: importSessions.length,
|
|
2183
2245
|
alreadyProcessed: skippedCount,
|
|
2184
2246
|
pending: pendingItems.length,
|
|
2185
2247
|
agents: Array.from(agentGroups.keys()),
|
|
2186
2248
|
concurrency,
|
|
2249
|
+
existingTasks: existingTaskCount,
|
|
2250
|
+
existingSkills: existingSkillCount,
|
|
2187
2251
|
});
|
|
2188
2252
|
send("progress", { processed: 0, total: pendingItems.length });
|
|
2189
2253
|
let globalIdx = 0;
|