@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.
Files changed (95) hide show
  1. package/README.md +69 -8
  2. package/dist/EngramClient.d.ts +60 -16
  3. package/dist/EngramClient.js +139 -70
  4. package/dist/EngramClient.js.map +1 -1
  5. package/dist/MarketClient.js.map +1 -1
  6. package/dist/ProfileManager.d.ts +3 -19
  7. package/dist/ProfileManager.js +1 -58
  8. package/dist/ProfileManager.js.map +1 -1
  9. package/dist/SessionManager.d.ts +1 -1
  10. package/dist/SessionManager.js.map +1 -1
  11. package/dist/actionReceipt.d.ts +8 -0
  12. package/dist/actionReceipt.js +8 -0
  13. package/dist/actionReceipt.js.map +1 -1
  14. package/dist/birthChain.d.ts +87 -0
  15. package/dist/birthChain.js +233 -0
  16. package/dist/birthChain.js.map +1 -0
  17. package/dist/cache.js.map +1 -1
  18. package/dist/certifiedAudit.d.ts +31 -0
  19. package/dist/certifiedAudit.js +124 -0
  20. package/dist/certifiedAudit.js.map +1 -1
  21. package/dist/claude-setup.d.ts +15 -6
  22. package/dist/claude-setup.js +30 -17
  23. package/dist/claude-setup.js.map +1 -1
  24. package/dist/cli.d.ts +7 -1
  25. package/dist/cli.js +212 -187
  26. package/dist/cli.js.map +1 -1
  27. package/dist/connect-config.d.ts +109 -0
  28. package/dist/connect-config.js +251 -0
  29. package/dist/connect-config.js.map +1 -0
  30. package/dist/encryption.d.ts +4 -0
  31. package/dist/encryption.js +7 -1
  32. package/dist/encryption.js.map +1 -1
  33. package/dist/evidence.d.ts +94 -0
  34. package/dist/evidence.js +352 -0
  35. package/dist/evidence.js.map +1 -0
  36. package/dist/idl.d.ts +21 -3
  37. package/dist/idl.js +34 -4
  38. package/dist/idl.js.map +1 -1
  39. package/dist/index.d.ts +13 -6
  40. package/dist/index.js +22 -5
  41. package/dist/index.js.map +1 -1
  42. package/dist/ledgerfsHash.d.ts +0 -2
  43. package/dist/ledgerfsHash.js +0 -2
  44. package/dist/ledgerfsHash.js.map +1 -1
  45. package/dist/lineage.d.ts +7 -1
  46. package/dist/lineage.js +7 -1
  47. package/dist/lineage.js.map +1 -1
  48. package/dist/memoryArchive.d.ts +77 -98
  49. package/dist/memoryArchive.js +58 -31
  50. package/dist/memoryArchive.js.map +1 -1
  51. package/dist/migrate.d.ts +18 -30
  52. package/dist/migrate.js +42 -136
  53. package/dist/migrate.js.map +1 -1
  54. package/dist/openEngram.d.ts +7 -0
  55. package/dist/openEngram.js +27 -3
  56. package/dist/openEngram.js.map +1 -1
  57. package/dist/openclaw-local.d.ts +86 -0
  58. package/dist/openclaw-local.js +332 -0
  59. package/dist/openclaw-local.js.map +1 -0
  60. package/dist/openclaw-setup.d.ts +82 -3
  61. package/dist/openclaw-setup.js +162 -50
  62. package/dist/openclaw-setup.js.map +1 -1
  63. package/dist/pair.js.map +1 -1
  64. package/dist/path-utils.d.ts +0 -16
  65. package/dist/path-utils.js +4 -27
  66. package/dist/path-utils.js.map +1 -1
  67. package/dist/publicRecord.d.ts +5 -0
  68. package/dist/publicRecord.js +52 -0
  69. package/dist/publicRecord.js.map +1 -0
  70. package/dist/recordChain.d.ts +69 -0
  71. package/dist/recordChain.js +145 -0
  72. package/dist/recordChain.js.map +1 -0
  73. package/dist/schema.d.ts +11 -22
  74. package/dist/schema.js +6 -28
  75. package/dist/schema.js.map +1 -1
  76. package/dist/types.d.ts +67 -451
  77. package/dist/verify.d.ts +8 -0
  78. package/dist/verify.js +19 -0
  79. package/dist/verify.js.map +1 -0
  80. package/dist/version.d.ts +22 -0
  81. package/dist/version.js +22 -0
  82. package/dist/version.js.map +1 -1
  83. package/package.json +27 -12
  84. package/dist/generated/engram.idl.d.ts +0 -6
  85. package/dist/generated/engram.idl.js +0 -1366
  86. package/dist/generated/engram.idl.js.map +0 -1
  87. package/dist/generated/market.idl.d.ts +0 -6
  88. package/dist/generated/market.idl.js +0 -557
  89. package/dist/generated/market.idl.js.map +0 -1
  90. package/dist/generated/registry.idl.d.ts +0 -6
  91. package/dist/generated/registry.idl.js +0 -510
  92. package/dist/generated/registry.idl.js.map +0 -1
  93. package/dist/offline.d.ts +0 -21
  94. package/dist/offline.js +0 -104
  95. package/dist/offline.js.map +0 -1
@@ -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 cap is exactly the
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
- // `cursor` up to the retained floor, and the stride must still be measured from the seq the
257
- // engram was actually asked for — advancing from the raised cursor would jump a whole window
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 page;
274
+ let reply;
261
275
  try {
262
- page = await fetchPage(pageStart, requested, authorFilter);
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
- pageCap = page.pageCap;
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 cursor stays where the request went, because the page in
292
- // hand covers the window that started THERE — raising the cursor here would jump the
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.totalEvents) {
297
- throw new Error(`assembleMemoryArchive: the log holds ${page.totalEvents} entries, so seq ${explicitTo} does not exist yet.`);
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.totalEvents;
300
- // Guard BEFORE subtracting. An empty log answers totalEvents = 0 with a floor of 1, so
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
- // THE WINDOW IS THE CURSOR, and the engram says how wide it was. `pageCap` is its clamp on
323
- // the ask, so the window is the smaller of the two. Never `page.events.length` — an author
324
- // filter makes a page short or empty while the chain continues, and striding by the rows
325
- // returned would skip every entry the filter removed and stall outright on an empty page.
326
- if (page.pageCap === 0n) {
327
- throw new Error(`assembleMemoryArchive: the engram reported a page cap of 0 at seq ${pageStart}, which describes a log that can never be read. Nothing was assembled.`);
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.events) {
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) — and `fromSeq` is
341
- // the floor once the first page disclosed it. The last clause is belt-and-braces: if a page
342
- // ever returns an entry beyond the window it declared, the cursor still ends up past it.
343
- // Every clause only raises the cursor, so the walk always moves and cannot spin.
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.type);
188
+ const dbDest = path.join(dbsDir, db.dbType);
275
189
  fs.mkdirSync(dbDest, { recursive: true });
276
- for (const dbPath of db.paths) {
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.type, paths: db.paths });
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.type);
637
+ const dbDest = path.join(dbsDir, db.dbType);
724
638
  fs.mkdirSync(dbDest, { recursive: true });
725
- for (const dbPath of db.paths) {
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.type, paths: db.paths });
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 to disk based on type
918
- restoreBackupData(openclawDir, ocConfig, dbType, plain);
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 });