@engramx/client 0.16.0-rc.2 → 0.16.0-rc.21
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/README.md +69 -8
- package/dist/EngramClient.d.ts +60 -16
- package/dist/EngramClient.js +139 -70
- package/dist/EngramClient.js.map +1 -1
- package/dist/MarketClient.js.map +1 -1
- package/dist/ProfileManager.d.ts +3 -19
- package/dist/ProfileManager.js +1 -58
- package/dist/ProfileManager.js.map +1 -1
- package/dist/SessionManager.d.ts +1 -1
- package/dist/SessionManager.js.map +1 -1
- package/dist/actionReceipt.d.ts +8 -0
- package/dist/actionReceipt.js +8 -0
- package/dist/actionReceipt.js.map +1 -1
- package/dist/birthChain.d.ts +87 -0
- package/dist/birthChain.js +233 -0
- package/dist/birthChain.js.map +1 -0
- package/dist/cache.js.map +1 -1
- package/dist/certifiedAudit.d.ts +31 -0
- package/dist/certifiedAudit.js +124 -0
- package/dist/certifiedAudit.js.map +1 -1
- package/dist/claude-setup.d.ts +15 -6
- package/dist/claude-setup.js +30 -17
- package/dist/claude-setup.js.map +1 -1
- package/dist/cli.d.ts +7 -1
- package/dist/cli.js +212 -187
- package/dist/cli.js.map +1 -1
- package/dist/connect-config.d.ts +109 -0
- package/dist/connect-config.js +251 -0
- package/dist/connect-config.js.map +1 -0
- package/dist/encryption.d.ts +4 -0
- package/dist/encryption.js +7 -1
- package/dist/encryption.js.map +1 -1
- package/dist/evidence.d.ts +94 -0
- package/dist/evidence.js +352 -0
- package/dist/evidence.js.map +1 -0
- package/dist/idl.d.ts +21 -3
- package/dist/idl.js +34 -4
- package/dist/idl.js.map +1 -1
- package/dist/index.d.ts +13 -6
- package/dist/index.js +22 -5
- package/dist/index.js.map +1 -1
- package/dist/ledgerfsHash.d.ts +0 -2
- package/dist/ledgerfsHash.js +0 -2
- package/dist/ledgerfsHash.js.map +1 -1
- package/dist/lineage.d.ts +7 -1
- package/dist/lineage.js +7 -1
- package/dist/lineage.js.map +1 -1
- package/dist/memoryArchive.d.ts +77 -98
- package/dist/memoryArchive.js +58 -31
- package/dist/memoryArchive.js.map +1 -1
- package/dist/migrate.d.ts +18 -30
- package/dist/migrate.js +42 -136
- package/dist/migrate.js.map +1 -1
- package/dist/openEngram.d.ts +7 -0
- package/dist/openEngram.js +27 -3
- package/dist/openEngram.js.map +1 -1
- package/dist/openclaw-local.d.ts +86 -0
- package/dist/openclaw-local.js +332 -0
- package/dist/openclaw-local.js.map +1 -0
- package/dist/openclaw-setup.d.ts +82 -3
- package/dist/openclaw-setup.js +162 -50
- package/dist/openclaw-setup.js.map +1 -1
- package/dist/pair.js.map +1 -1
- package/dist/path-utils.d.ts +0 -16
- package/dist/path-utils.js +4 -27
- package/dist/path-utils.js.map +1 -1
- package/dist/publicRecord.d.ts +5 -0
- package/dist/publicRecord.js +52 -0
- package/dist/publicRecord.js.map +1 -0
- package/dist/recordChain.d.ts +69 -0
- package/dist/recordChain.js +145 -0
- package/dist/recordChain.js.map +1 -0
- package/dist/schema.d.ts +11 -22
- package/dist/schema.js +6 -28
- package/dist/schema.js.map +1 -1
- package/dist/types.d.ts +67 -451
- package/dist/verify.d.ts +8 -0
- package/dist/verify.js +19 -0
- package/dist/verify.js.map +1 -0
- package/dist/version.d.ts +22 -0
- package/dist/version.js +22 -0
- package/dist/version.js.map +1 -1
- package/package.json +27 -12
- package/dist/generated/engram.idl.d.ts +0 -6
- package/dist/generated/engram.idl.js +0 -1366
- package/dist/generated/engram.idl.js.map +0 -1
- package/dist/generated/market.idl.d.ts +0 -6
- package/dist/generated/market.idl.js +0 -557
- package/dist/generated/market.idl.js.map +0 -1
- package/dist/generated/registry.idl.d.ts +0 -6
- package/dist/generated/registry.idl.js +0 -510
- package/dist/generated/registry.idl.js.map +0 -1
- package/dist/offline.d.ts +0 -21
- package/dist/offline.js +0 -104
- package/dist/offline.js.map +0 -1
package/dist/memoryArchive.js
CHANGED
|
@@ -11,6 +11,10 @@
|
|
|
11
11
|
// chain in strides longer than the canister actually served and skip whatever fell between.
|
|
12
12
|
// assembleMemoryArchive advances by the window the canister CONFIRMED, and then asserts the
|
|
13
13
|
// range came back whole. It throws rather than return a gap.
|
|
14
|
+
// ⟨2026-10-07, beside the point above — the owner's decision of that day⟩ The engram serves
|
|
15
|
+
// `listMemoryLog` now, and its page states the window directly: `items.length + withheld`
|
|
16
|
+
// entries scanned, starting at `max(startSeq, firstAvailableSeq)`. The walk advances by that,
|
|
17
|
+
// as the owner's own archive page does. `pageCap` is not served and is not read.
|
|
14
18
|
// 2. A PAGE THE CANISTER CANNOT FIT IN ONE RESPONSE. A `#set`/`#restore` entry carries a full
|
|
15
19
|
// manifest — up to 40 chunk references, since maxFileBytes is 10 MiB at a frozen 256 KiB
|
|
16
20
|
// chunkSize (src/engram/LedgerFsInit.mo) — so a manifest-heavy page can exceed the 2 MiB
|
|
@@ -25,6 +29,7 @@
|
|
|
25
29
|
// It also states a CEILING and refuses past it. Assembling an unbounded chain into one JS array
|
|
26
30
|
// is a real failure mode (see ARCHIVE_MAX_RANGE), and splitting is free: each part gets its own
|
|
27
31
|
// receipt, and receipts compose — condense only needs one that covers the prefix being dropped.
|
|
32
|
+
import { CanisterRefusal } from './wire.js';
|
|
28
33
|
import { eventHash, opsRoot as opsRootOverEventHashes, toHex, } from './ledgerfsHash.js';
|
|
29
34
|
// ⟨DELETED 2026-10-05⟩ `MemoryExportReceiptsPage` stood here: "One page of the
|
|
30
35
|
// receipts-and-checkpoints ledger. `next` is the `before` cursor, null = done", with the fields
|
|
@@ -59,6 +64,8 @@ export const ARCHIVE_MAX_RANGE = 10000n;
|
|
|
59
64
|
* `pageCap`. Asking for the cap is safe rather than optimistic because the fallback below it is
|
|
60
65
|
* real: a page that will not fit is retried at half the size, and a walk that had to shrink says
|
|
61
66
|
* so through `smallestPageUsed`.
|
|
67
|
+
* ⟨2026-10-07, beside "reports the result as `pageCap`"⟩ It reports the window it scanned as
|
|
68
|
+
* `items.length + withheld` now; `pageCap` is not served.
|
|
62
69
|
*/
|
|
63
70
|
export const ARCHIVE_PAGE_EVENTS = 256n;
|
|
64
71
|
// ── Byte/shape normalization ───────────────────────────────────────────────────────────────────
|
|
@@ -212,12 +219,20 @@ const asBig = (v) => (typeof v === 'bigint' ? v : BigInt(v));
|
|
|
212
219
|
* - start below the retained floor (a condensed prefix is unattestable, so an explicit request
|
|
213
220
|
* for it is refused rather than silently raised);
|
|
214
221
|
* - assemble more than {@link ARCHIVE_MAX_RANGE} entries in one pass.
|
|
222
|
+
* ⟨2026-10-07, beside the second point — the owner's decision of that day⟩ The window the engram
|
|
223
|
+
* confirmed is `page.items.length + page.withheld` now — the entries it scanned for the page,
|
|
224
|
+
* starting at `max(startSeq, firstAvailableSeq)` — the rule the engram's own `listMemoryLog` doc
|
|
225
|
+
* states and the owner's archive page walks by. Two refusals join the list: a page whose window is
|
|
226
|
+
* EMPTY while the range still has entries to serve (the walk would spin, or end short), and a floor
|
|
227
|
+
* that rises above the cursor mid-walk (a condense ran during the walk, and what it dropped can no
|
|
228
|
+
* longer be served or attested).
|
|
215
229
|
*
|
|
216
230
|
* Termination is structural: the cursor advances by at least one seq per successful page, and the
|
|
217
231
|
* page size strictly halves per size failure until it reaches one.
|
|
218
232
|
*/
|
|
219
233
|
export async function assembleMemoryArchive(fetchPage, options = {}) {
|
|
220
234
|
const authorFilter = options.authorFilter;
|
|
235
|
+
const filterArg = authorFilter === undefined ? [] : [authorFilter];
|
|
221
236
|
const explicitFrom = options.fromSeq === undefined ? null : asBig(options.fromSeq);
|
|
222
237
|
const explicitTo = options.toSeq === undefined ? null : asBig(options.toSeq);
|
|
223
238
|
if (explicitFrom !== null && explicitFrom < 1n) {
|
|
@@ -244,22 +259,21 @@ export async function assembleMemoryArchive(fetchPage, options = {}) {
|
|
|
244
259
|
let toSeq = explicitTo;
|
|
245
260
|
let pagesFetched = 0;
|
|
246
261
|
// Set from the first page and refreshed by every one after it. No placeholder value: an
|
|
247
|
-
// uninitialized read would be a bug, and a stand-in zero head or zero
|
|
262
|
+
// uninitialized read would be a bug, and a stand-in zero head or zero total is exactly the
|
|
248
263
|
// fabricated reading this whole surface exists to avoid.
|
|
249
264
|
let head;
|
|
250
|
-
let pageCap;
|
|
251
265
|
let totalEvents;
|
|
252
266
|
let firstAvailableSeq;
|
|
253
267
|
let firstPage = true;
|
|
254
268
|
for (;;) {
|
|
255
269
|
// Where THIS request started. Held separately from `cursor` because the first page can move
|
|
256
|
-
// `
|
|
257
|
-
// engram
|
|
270
|
+
// `fromSeq` up to the retained floor, and the stride must still be measured from where the
|
|
271
|
+
// engram actually began scanning — not from a raised cursor, which would jump a whole window
|
|
258
272
|
// past entries the very page in hand did not reach.
|
|
259
273
|
const pageStart = cursor;
|
|
260
|
-
let
|
|
274
|
+
let reply;
|
|
261
275
|
try {
|
|
262
|
-
|
|
276
|
+
reply = await fetchPage(pageStart, requested, filterArg);
|
|
263
277
|
}
|
|
264
278
|
catch (err) {
|
|
265
279
|
if (!isResponseTooLarge(err)) {
|
|
@@ -277,10 +291,16 @@ export async function assembleMemoryArchive(fetchPage, options = {}) {
|
|
|
277
291
|
smallestPageUsed = requested;
|
|
278
292
|
continue;
|
|
279
293
|
}
|
|
294
|
+
// A typed refusal is the engram's answer, not a transport failure: it is never halved into
|
|
295
|
+
// (halving an authorization refusal would spend six round trips arriving at the same answer).
|
|
296
|
+
if ('Err' in reply) {
|
|
297
|
+
const refusal = new CanisterRefusal('listMemoryLog', reply.Err);
|
|
298
|
+
throw new Error(`assembleMemoryArchive: the engram refused the page at seq ${pageStart} (${requested} entries): ${refusal.message}. Nothing was assembled.`, { cause: refusal });
|
|
299
|
+
}
|
|
300
|
+
const page = reply.Ok;
|
|
280
301
|
pagesFetched += 1;
|
|
281
302
|
head = asBytes(page.head);
|
|
282
|
-
|
|
283
|
-
totalEvents = page.totalEvents;
|
|
303
|
+
totalEvents = page.page.total;
|
|
284
304
|
firstAvailableSeq = page.firstAvailableSeq;
|
|
285
305
|
if (firstPage) {
|
|
286
306
|
firstPage = false;
|
|
@@ -288,16 +308,15 @@ export async function assembleMemoryArchive(fetchPage, options = {}) {
|
|
|
288
308
|
if (explicitFrom !== null) {
|
|
289
309
|
throw new Error(`assembleMemoryArchive: entries below seq ${page.firstAvailableSeq} were condensed away and can no longer be served, so a range starting at ${explicitFrom} cannot be attested. Start at ${page.firstAvailableSeq} or later.`);
|
|
290
310
|
}
|
|
291
|
-
// Only `fromSeq` moves. The
|
|
292
|
-
//
|
|
293
|
-
// walk a full window past entries this page never reached.
|
|
311
|
+
// Only `fromSeq` moves. The engram began scanning at the floor, and the stride below is
|
|
312
|
+
// measured from there.
|
|
294
313
|
fromSeq = page.firstAvailableSeq;
|
|
295
314
|
}
|
|
296
|
-
if (explicitTo !== null && explicitTo > page.
|
|
297
|
-
throw new Error(`assembleMemoryArchive: the log holds ${page.
|
|
315
|
+
if (explicitTo !== null && explicitTo > page.page.total) {
|
|
316
|
+
throw new Error(`assembleMemoryArchive: the log holds ${page.page.total} entries, so seq ${explicitTo} does not exist yet.`);
|
|
298
317
|
}
|
|
299
|
-
toSeq = explicitTo ?? page.
|
|
300
|
-
// Guard BEFORE subtracting. An empty log answers
|
|
318
|
+
toSeq = explicitTo ?? page.page.total;
|
|
319
|
+
// Guard BEFORE subtracting. An empty log answers total = 0 with a floor of 1, so
|
|
301
320
|
// `toSeq - fromSeq` runs backwards there; in TypeScript that yields a negative BigInt
|
|
302
321
|
// rather than trapping, which would silently size the ceiling check the wrong way round.
|
|
303
322
|
const width = toSeq < fromSeq ? 0n : toSeq - fromSeq + 1n;
|
|
@@ -310,7 +329,6 @@ export async function assembleMemoryArchive(fetchPage, options = {}) {
|
|
|
310
329
|
totalEvents,
|
|
311
330
|
firstAvailableSeq,
|
|
312
331
|
head,
|
|
313
|
-
pageCap,
|
|
314
332
|
pagesFetched,
|
|
315
333
|
smallestPageUsed,
|
|
316
334
|
};
|
|
@@ -319,16 +337,26 @@ export async function assembleMemoryArchive(fetchPage, options = {}) {
|
|
|
319
337
|
throw new Error(`assembleMemoryArchive: ${width} log entries (seq ${fromSeq}–${toSeq}) is past the ${ceiling}-entry ceiling for one archive. Export it in parts — each part gets its own receipt, and a condense only needs a receipt covering the prefix it drops.`);
|
|
320
338
|
}
|
|
321
339
|
}
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
throw new Error(`assembleMemoryArchive:
|
|
340
|
+
else if (page.firstAvailableSeq > pageStart) {
|
|
341
|
+
// The floor rose above the cursor between two pages: a condense ran during the walk, and the
|
|
342
|
+
// engram clamped this page UP past entries the range still needs. They can no longer be
|
|
343
|
+
// served, so the range cannot be attested; a filtered walk would otherwise skip them without
|
|
344
|
+
// noticing. Refused, rather than returned short.
|
|
345
|
+
throw new Error(`assembleMemoryArchive: entries below seq ${page.firstAvailableSeq} were condensed away while the walk was at seq ${pageStart}, so seq ${pageStart}–${page.firstAvailableSeq - 1n} can no longer be served. Nothing is returned — walk the range again from ${page.firstAvailableSeq}.`);
|
|
346
|
+
}
|
|
347
|
+
// THE WINDOW IS THE CURSOR, and the page states it: the entries the engram scanned for this
|
|
348
|
+
// page, `items.length + withheld`, starting at max(pageStart, the floor). Never the rows alone
|
|
349
|
+
// — an author filter makes a page short or empty while the chain continues, and striding by
|
|
350
|
+
// the rows returned would skip every entry the filter removed and stall outright on an empty
|
|
351
|
+
// page; `withheld` is what the filter removed, so the sum is the scan.
|
|
352
|
+
const window = BigInt(page.page.items.length) + page.page.withheld;
|
|
353
|
+
if (window === 0n) {
|
|
354
|
+
// Nothing scanned at a cursor the range still covers (cursor <= toSeq <= total): the engram
|
|
355
|
+
// served nothing for entries that exist. Advancing would spin; stopping would return short.
|
|
356
|
+
throw new Error(`assembleMemoryArchive: the engram scanned no entries at seq ${pageStart} while the log holds ${page.page.total}, so seq ${pageStart}–${toSeq} came back empty. A short archive is not an archive — nothing is returned.`);
|
|
328
357
|
}
|
|
329
|
-
const window = page.pageCap < requested ? page.pageCap : requested;
|
|
330
358
|
let highestSeen = null;
|
|
331
|
-
for (const e of page.
|
|
359
|
+
for (const e of page.page.items) {
|
|
332
360
|
if (highestSeen === null || e.seq > highestSeen)
|
|
333
361
|
highestSeen = e.seq;
|
|
334
362
|
if (e.seq < fromSeq || e.seq > toSeq)
|
|
@@ -337,11 +365,10 @@ export async function assembleMemoryArchive(fetchPage, options = {}) {
|
|
|
337
365
|
bySeq.set(e.seq, e);
|
|
338
366
|
}
|
|
339
367
|
// Advance past the window that was actually covered. A request below the retained floor is
|
|
340
|
-
// clamped UP by the engram, so the window began at max(pageStart, floor)
|
|
341
|
-
//
|
|
342
|
-
//
|
|
343
|
-
|
|
344
|
-
const windowStart = pageStart < fromSeq ? fromSeq : pageStart;
|
|
368
|
+
// clamped UP by the engram, so the window began at max(pageStart, floor). The last clause is
|
|
369
|
+
// belt-and-braces: if a page ever returns an entry beyond the window it declared, the cursor
|
|
370
|
+
// still ends up past it. Every clause only raises the cursor, so the walk always moves.
|
|
371
|
+
const windowStart = pageStart < page.firstAvailableSeq ? page.firstAvailableSeq : pageStart;
|
|
345
372
|
let next = windowStart + window;
|
|
346
373
|
if (highestSeen !== null && highestSeen + 1n > next)
|
|
347
374
|
next = highestSeen + 1n;
|
|
@@ -353,7 +380,8 @@ export async function assembleMemoryArchive(fetchPage, options = {}) {
|
|
|
353
380
|
// The anti-fail-to-empty assertion. Only an UNFILTERED archive can be checked this way: with a
|
|
354
381
|
// filter, the engram is expected to skip entries, and the client has no way to know which. What
|
|
355
382
|
// holds in both cases is that every window covering [fromSeq, toSeq] was requested, which the
|
|
356
|
-
// loop above guarantees by construction.
|
|
383
|
+
// loop above guarantees by construction — and, since 0.16.0, that every window it covered was
|
|
384
|
+
// counted by the engram itself (`withheld`).
|
|
357
385
|
if (authorFilter === undefined) {
|
|
358
386
|
let expect = fromSeq;
|
|
359
387
|
for (const e of events) {
|
|
@@ -374,7 +402,6 @@ export async function assembleMemoryArchive(fetchPage, options = {}) {
|
|
|
374
402
|
totalEvents,
|
|
375
403
|
firstAvailableSeq,
|
|
376
404
|
head,
|
|
377
|
-
pageCap,
|
|
378
405
|
pagesFetched,
|
|
379
406
|
smallestPageUsed,
|
|
380
407
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoryArchive.js","sourceRoot":"","sources":["../src/memoryArchive.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"memoryArchive.js","sourceRoot":"","sources":["../src/memoryArchive.ts"],"names":[],"mappings":"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"}
|
package/dist/migrate.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type OpenClawConfig } from './openclaw-local.js';
|
|
1
2
|
export interface MigrateOptions {
|
|
2
3
|
canisterId: string;
|
|
3
4
|
sessionKeyPath: string;
|
|
@@ -62,40 +63,28 @@ export interface CheckpointMetadata {
|
|
|
62
63
|
}[];
|
|
63
64
|
};
|
|
64
65
|
}
|
|
65
|
-
interface OpenClawConfig {
|
|
66
|
-
memory?: {
|
|
67
|
-
backend?: string;
|
|
68
|
-
};
|
|
69
|
-
agents?: {
|
|
70
|
-
defaults?: {
|
|
71
|
-
workspace?: string;
|
|
72
|
-
memorySearch?: {
|
|
73
|
-
store?: {
|
|
74
|
-
path?: string;
|
|
75
|
-
};
|
|
76
|
-
};
|
|
77
|
-
soul?: {
|
|
78
|
-
path?: string;
|
|
79
|
-
};
|
|
80
|
-
};
|
|
81
|
-
};
|
|
82
|
-
plugins?: {
|
|
83
|
-
slots?: {
|
|
84
|
-
memory?: string;
|
|
85
|
-
};
|
|
86
|
-
entries?: Record<string, {
|
|
87
|
-
enabled?: boolean;
|
|
88
|
-
config?: {
|
|
89
|
-
memoryDir?: string;
|
|
90
|
-
};
|
|
91
|
-
}>;
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
66
|
export declare function hasValidPairing(options: MigrateOptions): Promise<boolean>;
|
|
95
67
|
export declare function createCheckpoint(mode: 'migration' | 'recovery', openclawDir: string, memoryDir: string, ocConfig: OpenClawConfig): string;
|
|
96
68
|
export declare function listCheckpoints(): CheckpointSummary[];
|
|
97
69
|
export declare function rollbackCheckpoint(checkpointId?: string): RollbackResult;
|
|
98
70
|
export declare function migrateOpenClawMemory(options: MigrateOptions, onProgress?: MigrateCallback): Promise<MigrateResult>;
|
|
71
|
+
/**
|
|
72
|
+
* The OpenClaw memory files `migrateOpenClawMemory` would move, found WITHOUT moving them: no upload,
|
|
73
|
+
* no checkpoint, no file read or written — the same scan (`collectOpenClawFiles`), so the count is
|
|
74
|
+
* the count the migration would start from (empty files included; it skips those and leaves them).
|
|
75
|
+
* ⟨CORRECTED 2026-10-13, later, on review⟩ Blank files are now left out of the list — the ones
|
|
76
|
+
* `migrateFiles` skips as 'empty' (`!content.trim()`) — so the count `pair` prints is the count the
|
|
77
|
+
* migration would move, not "Found 6" beside a migration that moves 4. That takes a read of each
|
|
78
|
+
* file; still nothing is uploaded, written or deleted. A file that cannot be read stays counted: the
|
|
79
|
+
* migration tries it and reports the error.
|
|
80
|
+
*
|
|
81
|
+
* ⟨ADDED 2026-10-13, the owner's ruling of that day: "fix the pairing migration"⟩ For `pair`, which
|
|
82
|
+
* now migrates only on an explicit `--migrate` and otherwise says what it found and how to move it.
|
|
83
|
+
*/
|
|
84
|
+
export declare function findOpenClawMemoryFiles(): {
|
|
85
|
+
openclawDir: string;
|
|
86
|
+
files: string[];
|
|
87
|
+
};
|
|
99
88
|
export declare function findIncompleteCheckpoint(): {
|
|
100
89
|
checkpoint: CheckpointSummary;
|
|
101
90
|
metadata: CheckpointMetadata;
|
|
@@ -104,4 +93,3 @@ export declare function findIncompleteCheckpoint(): {
|
|
|
104
93
|
} | null;
|
|
105
94
|
export declare function resumeMigration(options: MigrateOptions, onProgress?: MigrateCallback): Promise<MigrateResult>;
|
|
106
95
|
export declare function recoverOpenClaw(options: MigrateOptions): Promise<RecoverResult>;
|
|
107
|
-
export {};
|
package/dist/migrate.js
CHANGED
|
@@ -1,51 +1,12 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import { execFileSync } from 'child_process';
|
|
4
3
|
import { EngramClient } from './EngramClient.js';
|
|
4
|
+
// ⟨2026-10-13, the bloat audit⟩ Finding OpenClaw's directory, config, memory directory and
|
|
5
|
+
// databases, and restoring a backup, come from openclaw-local.ts — the one copy the plugin writes
|
|
6
|
+
// its backups through too. This file held its own copies until then; openclaw-local.ts says how
|
|
7
|
+
// they had drifted, and what that broke (`migrate --recover`).
|
|
8
|
+
import { getOpenClawDir, loadOpenClawConfig, resolveMemoryDir, detectDatabases, restoreDatabaseBackup, } from './openclaw-local.js';
|
|
5
9
|
import { NPX_CLIENT } from './version.js';
|
|
6
|
-
function getOpenClawDir() {
|
|
7
|
-
return process.env['OPENCLAW_CONFIG_DIR'] || path.join(process.env['HOME'] || '', '.openclaw');
|
|
8
|
-
}
|
|
9
|
-
function loadOpenClawConfig(openclawDir) {
|
|
10
|
-
const configPath = process.env['OPENCLAW_CONFIG_PATH'] ?? path.join(openclawDir, 'openclaw.json');
|
|
11
|
-
if (!fs.existsSync(configPath))
|
|
12
|
-
return {};
|
|
13
|
-
try {
|
|
14
|
-
return JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
return {};
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Resolve the memory directory from openclaw.json config.
|
|
22
|
-
*
|
|
23
|
-
* Priority:
|
|
24
|
-
* 1. EngramX plugin config memoryDir (plugins.entries["memory-engramx"].config.memoryDir)
|
|
25
|
-
* 2. Store path base directory (agents.defaults.memorySearch.store.path)
|
|
26
|
-
* 3. Default: {openclawDir}/memory
|
|
27
|
-
*/
|
|
28
|
-
function resolveMemoryDir(openclawDir, ocConfig) {
|
|
29
|
-
// Check EngramX plugin config for a memoryDir override
|
|
30
|
-
const engramxEntry = ocConfig.plugins?.entries?.['memory-engramx'];
|
|
31
|
-
if (engramxEntry?.config?.memoryDir) {
|
|
32
|
-
const dir = engramxEntry.config.memoryDir;
|
|
33
|
-
// Handle relative paths as relative to openclawDir
|
|
34
|
-
return path.isAbsolute(dir) ? dir : path.join(openclawDir, dir);
|
|
35
|
-
}
|
|
36
|
-
// Check store path for base directory
|
|
37
|
-
const storePath = ocConfig.agents?.defaults?.memorySearch?.store?.path;
|
|
38
|
-
if (storePath) {
|
|
39
|
-
// Store path may contain {agentId} tokens — derive the base directory
|
|
40
|
-
const withoutToken = storePath.replace(/\{agentId\}.*$/, '');
|
|
41
|
-
const resolved = path.isAbsolute(withoutToken)
|
|
42
|
-
? path.dirname(withoutToken)
|
|
43
|
-
: path.join(openclawDir, path.dirname(withoutToken));
|
|
44
|
-
if (fs.existsSync(resolved))
|
|
45
|
-
return resolved;
|
|
46
|
-
}
|
|
47
|
-
return path.join(openclawDir, 'memory');
|
|
48
|
-
}
|
|
49
10
|
/**
|
|
50
11
|
* Resolve the workspace directory from openclaw.json config.
|
|
51
12
|
*
|
|
@@ -142,53 +103,6 @@ export async function hasValidPairing(options) {
|
|
|
142
103
|
return false;
|
|
143
104
|
}
|
|
144
105
|
}
|
|
145
|
-
// ── Database detection (config-driven) ────────────────────────────
|
|
146
|
-
function detectDatabases(openclawDir, ocConfig) {
|
|
147
|
-
const databases = [];
|
|
148
|
-
const backend = ocConfig.memory?.backend;
|
|
149
|
-
if (!backend || backend === 'builtin') {
|
|
150
|
-
// SQLite: collect .sqlite files from openclawDir
|
|
151
|
-
const sqliteFiles = fs.existsSync(openclawDir)
|
|
152
|
-
? fs
|
|
153
|
-
.readdirSync(openclawDir)
|
|
154
|
-
.filter((f) => f.endsWith('.sqlite'))
|
|
155
|
-
.map((f) => path.join(openclawDir, f))
|
|
156
|
-
: [];
|
|
157
|
-
if (sqliteFiles.length > 0) {
|
|
158
|
-
databases.push({ type: 'sqlite', paths: sqliteFiles });
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
if (backend === 'qmd') {
|
|
162
|
-
// QMD: agents/*/qmd/*.sqlite + *.db
|
|
163
|
-
const agentsDir = path.join(openclawDir, 'agents');
|
|
164
|
-
if (fs.existsSync(agentsDir)) {
|
|
165
|
-
const qmdPaths = [];
|
|
166
|
-
for (const agent of fs.readdirSync(agentsDir, { withFileTypes: true })) {
|
|
167
|
-
if (!agent.isDirectory())
|
|
168
|
-
continue;
|
|
169
|
-
const qmdDir = path.join(agentsDir, agent.name, 'qmd');
|
|
170
|
-
if (!fs.existsSync(qmdDir))
|
|
171
|
-
continue;
|
|
172
|
-
for (const f of fs.readdirSync(qmdDir)) {
|
|
173
|
-
if (f.endsWith('.sqlite') || f.endsWith('.db')) {
|
|
174
|
-
qmdPaths.push(path.join(qmdDir, f));
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
if (qmdPaths.length > 0) {
|
|
179
|
-
databases.push({ type: 'qmd', paths: qmdPaths });
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
const memorySlot = ocConfig.plugins?.slots?.memory;
|
|
184
|
-
if (memorySlot === 'memory-lancedb') {
|
|
185
|
-
const lanceDir = path.join(openclawDir, 'lancedb');
|
|
186
|
-
if (fs.existsSync(lanceDir)) {
|
|
187
|
-
databases.push({ type: 'lancedb', paths: [lanceDir] });
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
return databases;
|
|
191
|
-
}
|
|
192
106
|
// ── Checkpoint & Rollback ─────────────────────────────────────────
|
|
193
107
|
/**
|
|
194
108
|
* Map an original absolute source path to its namespaced checkpoint-relative
|
|
@@ -271,9 +185,9 @@ export function createCheckpoint(mode, openclawDir, memoryDir, ocConfig) {
|
|
|
271
185
|
const dbsDir = path.join(checkpointDir, 'databases');
|
|
272
186
|
const savedDatabases = [];
|
|
273
187
|
for (const db of databases) {
|
|
274
|
-
const dbDest = path.join(dbsDir, db.
|
|
188
|
+
const dbDest = path.join(dbsDir, db.dbType);
|
|
275
189
|
fs.mkdirSync(dbDest, { recursive: true });
|
|
276
|
-
for (const dbPath of db.
|
|
190
|
+
for (const dbPath of db.filePaths) {
|
|
277
191
|
if (!fs.existsSync(dbPath))
|
|
278
192
|
continue;
|
|
279
193
|
if (fs.statSync(dbPath).isDirectory()) {
|
|
@@ -283,7 +197,7 @@ export function createCheckpoint(mode, openclawDir, memoryDir, ocConfig) {
|
|
|
283
197
|
fs.copyFileSync(dbPath, path.join(dbDest, path.basename(dbPath)));
|
|
284
198
|
}
|
|
285
199
|
}
|
|
286
|
-
savedDatabases.push({ type: db.
|
|
200
|
+
savedDatabases.push({ type: db.dbType, paths: db.filePaths });
|
|
287
201
|
}
|
|
288
202
|
// Write checkpoint metadata
|
|
289
203
|
const metadata = {
|
|
@@ -720,9 +634,9 @@ export async function migrateOpenClawMemory(options, onProgress) {
|
|
|
720
634
|
const dbsDir = path.join(checkpointDir, 'databases');
|
|
721
635
|
const savedDatabases = [];
|
|
722
636
|
for (const db of databases) {
|
|
723
|
-
const dbDest = path.join(dbsDir, db.
|
|
637
|
+
const dbDest = path.join(dbsDir, db.dbType);
|
|
724
638
|
fs.mkdirSync(dbDest, { recursive: true });
|
|
725
|
-
for (const dbPath of db.
|
|
639
|
+
for (const dbPath of db.filePaths) {
|
|
726
640
|
if (!fs.existsSync(dbPath))
|
|
727
641
|
continue;
|
|
728
642
|
if (fs.statSync(dbPath).isDirectory()) {
|
|
@@ -732,7 +646,7 @@ export async function migrateOpenClawMemory(options, onProgress) {
|
|
|
732
646
|
fs.copyFileSync(dbPath, path.join(dbDest, path.basename(dbPath)));
|
|
733
647
|
}
|
|
734
648
|
}
|
|
735
|
-
savedDatabases.push({ type: db.
|
|
649
|
+
savedDatabases.push({ type: db.dbType, paths: db.filePaths });
|
|
736
650
|
}
|
|
737
651
|
// Initialize checkpoint metadata (grows incrementally as files are migrated)
|
|
738
652
|
const metadata = {
|
|
@@ -760,6 +674,35 @@ export async function migrateOpenClawMemory(options, onProgress) {
|
|
|
760
674
|
}
|
|
761
675
|
return result;
|
|
762
676
|
}
|
|
677
|
+
/**
|
|
678
|
+
* The OpenClaw memory files `migrateOpenClawMemory` would move, found WITHOUT moving them: no upload,
|
|
679
|
+
* no checkpoint, no file read or written — the same scan (`collectOpenClawFiles`), so the count is
|
|
680
|
+
* the count the migration would start from (empty files included; it skips those and leaves them).
|
|
681
|
+
* ⟨CORRECTED 2026-10-13, later, on review⟩ Blank files are now left out of the list — the ones
|
|
682
|
+
* `migrateFiles` skips as 'empty' (`!content.trim()`) — so the count `pair` prints is the count the
|
|
683
|
+
* migration would move, not "Found 6" beside a migration that moves 4. That takes a read of each
|
|
684
|
+
* file; still nothing is uploaded, written or deleted. A file that cannot be read stays counted: the
|
|
685
|
+
* migration tries it and reports the error.
|
|
686
|
+
*
|
|
687
|
+
* ⟨ADDED 2026-10-13, the owner's ruling of that day: "fix the pairing migration"⟩ For `pair`, which
|
|
688
|
+
* now migrates only on an explicit `--migrate` and otherwise says what it found and how to move it.
|
|
689
|
+
*/
|
|
690
|
+
export function findOpenClawMemoryFiles() {
|
|
691
|
+
const openclawDir = getOpenClawDir();
|
|
692
|
+
const { files } = collectOpenClawFiles(openclawDir, loadOpenClawConfig(openclawDir));
|
|
693
|
+
const blank = (file) => {
|
|
694
|
+
try {
|
|
695
|
+
return !fs.readFileSync(file, 'utf-8').trim();
|
|
696
|
+
}
|
|
697
|
+
catch {
|
|
698
|
+
return false;
|
|
699
|
+
}
|
|
700
|
+
};
|
|
701
|
+
return {
|
|
702
|
+
openclawDir,
|
|
703
|
+
files: files.map((f) => f.absolutePath).filter((f) => !blank(f)),
|
|
704
|
+
};
|
|
705
|
+
}
|
|
763
706
|
// ── Resume / Incomplete checkpoint detection ──────────────────────
|
|
764
707
|
function collectAllFiles(dir, baseDir) {
|
|
765
708
|
const results = [];
|
|
@@ -914,8 +857,8 @@ export async function recoverOpenClaw(options) {
|
|
|
914
857
|
}
|
|
915
858
|
// Decrypt if the blob was stored encrypted (Private mode); passthrough for plaintext/legacy.
|
|
916
859
|
const plain = await client.decryptBackupPayload(data);
|
|
917
|
-
// Write
|
|
918
|
-
|
|
860
|
+
// Write it back where it came from (openclaw-local.ts says where, and refuses in words).
|
|
861
|
+
restoreDatabaseBackup(openclawDir, ocConfig, dbType, plain);
|
|
919
862
|
result.restoredBackups.push({
|
|
920
863
|
dbType,
|
|
921
864
|
backupId: backup.backupId,
|
|
@@ -928,43 +871,6 @@ export async function recoverOpenClaw(options) {
|
|
|
928
871
|
}
|
|
929
872
|
return result;
|
|
930
873
|
}
|
|
931
|
-
function restoreBackupData(openclawDir, ocConfig, dbType, data) {
|
|
932
|
-
if (!/^[a-zA-Z0-9_-]+$/.test(dbType)) {
|
|
933
|
-
throw new Error(`Invalid dbType: ${dbType}`);
|
|
934
|
-
}
|
|
935
|
-
if (dbType === 'sqlite') {
|
|
936
|
-
// Single .sqlite file — write directly
|
|
937
|
-
const destDir = openclawDir;
|
|
938
|
-
fs.mkdirSync(destDir, { recursive: true });
|
|
939
|
-
fs.writeFileSync(path.join(destDir, 'openclaw.sqlite'), data);
|
|
940
|
-
}
|
|
941
|
-
else {
|
|
942
|
-
// tar.gz archive (qmd, lancedb, multi-sqlite) — extract to target directory
|
|
943
|
-
let extractDir;
|
|
944
|
-
if (dbType === 'qmd') {
|
|
945
|
-
extractDir = path.join(openclawDir, 'agents');
|
|
946
|
-
}
|
|
947
|
-
else if (dbType === 'lancedb') {
|
|
948
|
-
extractDir = path.join(openclawDir, 'lancedb');
|
|
949
|
-
}
|
|
950
|
-
else {
|
|
951
|
-
extractDir = openclawDir;
|
|
952
|
-
}
|
|
953
|
-
fs.mkdirSync(extractDir, { recursive: true });
|
|
954
|
-
const tmpFile = path.join(getEngramXDir(), `restore-${dbType}-${Date.now()}.tar.gz`);
|
|
955
|
-
try {
|
|
956
|
-
fs.writeFileSync(tmpFile, data);
|
|
957
|
-
execFileSync('tar', ['--no-same-owner', '-xzf', tmpFile, '-C', extractDir], {
|
|
958
|
-
timeout: 120000,
|
|
959
|
-
stdio: 'pipe',
|
|
960
|
-
});
|
|
961
|
-
}
|
|
962
|
-
finally {
|
|
963
|
-
if (fs.existsSync(tmpFile))
|
|
964
|
-
fs.unlinkSync(tmpFile);
|
|
965
|
-
}
|
|
966
|
-
}
|
|
967
|
-
}
|
|
968
874
|
// ── File helpers ──────────────────────────────────────────────────
|
|
969
875
|
function collectMarkdownFiles(dir, baseDir, files) {
|
|
970
876
|
const entries = fs.readdirSync(dir, { withFileTypes: true });
|