agenthub-multiagent-mcp 1.50.0 → 1.51.0

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 (43) hide show
  1. package/README.md +192 -192
  2. package/dist/brain/backend.d.ts.map +1 -1
  3. package/dist/brain/backend.js +11 -2
  4. package/dist/brain/backend.js.map +1 -1
  5. package/dist/brain/memvidBrain.d.ts +24 -0
  6. package/dist/brain/memvidBrain.d.ts.map +1 -1
  7. package/dist/brain/memvidBrain.js +350 -93
  8. package/dist/brain/memvidBrain.js.map +1 -1
  9. package/dist/brain/memvidCompaction.test.d.ts +10 -0
  10. package/dist/brain/memvidCompaction.test.d.ts.map +1 -0
  11. package/dist/brain/memvidCompaction.test.js +71 -0
  12. package/dist/brain/memvidCompaction.test.js.map +1 -0
  13. package/dist/channel.js +3 -3
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +15 -2
  16. package/dist/client.js.map +1 -1
  17. package/dist/commands/setup-shell.js +11 -11
  18. package/dist/employee.d.ts +0 -5
  19. package/dist/employee.d.ts.map +1 -1
  20. package/dist/employee.js +14 -1
  21. package/dist/employee.js.map +1 -1
  22. package/dist/hooks/periodicReminder.js +9 -9
  23. package/dist/setup.js +56 -56
  24. package/dist/tools/index.js +11 -11
  25. package/dist/tools/index.js.map +1 -1
  26. package/dist/tools/openspec-viz/diagram-generator.js +54 -54
  27. package/dist/tools/openspec-viz/html-generator.js +503 -503
  28. package/dist/worker.js +10 -10
  29. package/native/agenthub-memvid/agenthub-memvid.linux-x64-gnu.node +0 -0
  30. package/native/agenthub-memvid/agenthub-memvid.win32-x64-msvc.node +0 -0
  31. package/native/agenthub-memvid/index.d.ts +58 -0
  32. package/native/agenthub-memvid/index.js +319 -0
  33. package/package.json +77 -75
  34. package/skills/catalog.json +76 -76
  35. package/skills/commands/close-session.md +144 -144
  36. package/skills/commands/start-session.md +77 -77
  37. package/skills/manifest.json +50 -50
  38. package/skills/skills/code-brain-hook/SKILL.md +61 -61
  39. package/skills/skills/deploy-staging/SKILL.md +164 -164
  40. package/skills/skills/deploy-vps-openclaw/SKILL.md +97 -97
  41. package/skills/skills/file-bug/SKILL.md +75 -75
  42. package/skills/skills/karpathy-guidelines/SKILL.md +67 -67
  43. package/skills/skills/multiagent-brainstorm/SKILL.md +142 -142
@@ -15,10 +15,44 @@
15
15
  * Semantic search is opt-in via AGENTHUB_BRAIN_EMBEDDINGS=openai|openrouter and the
16
16
  * usual OpenAI-compatible env vars. Not wired in this file yet (future phase).
17
17
  */
18
- import { use } from "@memvid/sdk";
19
- import { existsSync, mkdirSync, readdirSync, statSync, unlinkSync } from "fs";
18
+ import { createRequire } from "module";
19
+ import { existsSync, mkdirSync, readdirSync, statSync, unlinkSync, writeFileSync, readFileSync, renameSync, } from "fs";
20
20
  import { join } from "path";
21
21
  import { homedir } from "os";
22
+ /**
23
+ * Guarded native-addon load. The addon (napi loader + prebuilt `.node`s) is
24
+ * vendored under `native/agenthub-memvid/` and shipped inside this package, so
25
+ * we load it by a path relative to this module rather than as a node_modules
26
+ * dependency — this survives `npm publish` (no `file:` dep) and the
27
+ * `npx …@latest` reinstall. Both `src/brain/` (dev) and `dist/brain/` (built)
28
+ * are two levels under the package root, so the relative path is identical.
29
+ * If the prebuilt `.node` is missing on this platform we record the error and
30
+ * let `backend.ts` fall back to the jsonl backend instead of crashing startup.
31
+ */
32
+ let addon = null;
33
+ let addonLoadError = null;
34
+ try {
35
+ addon = createRequire(import.meta.url)("../../native/agenthub-memvid/index.js");
36
+ }
37
+ catch (err) {
38
+ addonLoadError = err instanceof Error ? err.message : String(err);
39
+ }
40
+ export function isMemvidAddonAvailable() {
41
+ return addon !== null;
42
+ }
43
+ export function memvidAddonLoadError() {
44
+ return addonLoadError;
45
+ }
46
+ function requireAddon() {
47
+ if (!addon) {
48
+ throw new Error(`agenthub-memvid native addon failed to load: ${addonLoadError ?? "unknown error"}`);
49
+ }
50
+ return addon;
51
+ }
52
+ const nativeFrameCount = (path) => requireAddon().frameCount(path);
53
+ const nativeAppendSession = (path, title, label, body) => requireAddon().appendSession(path, title, label, body);
54
+ const nativeSearchLex = (path, query, k) => requireAddon().searchLex(path, query, k);
55
+ const nativeMigrate = (src, dst, label) => requireAddon().migrate(src, dst, label);
22
56
  const BRAIN_DIR_NAME = "brains";
23
57
  const SESSION_TITLE_RE = /^\[session\s+(\d+)\]\s*(.*)$/i;
24
58
  function getBrainsDir() {
@@ -75,22 +109,22 @@ export function sweepOrphanedTemps(maxAgeMs = 60 * 60 * 1000) {
75
109
  }
76
110
  return removed;
77
111
  }
78
- async function openForWrite(path) {
79
- return use("basic", path, { mode: "auto" });
80
- }
81
- async function openForRead(path) {
82
- if (!existsSync(path))
83
- return null;
84
- return use("basic", path, { mode: "open", readOnly: true });
85
- }
86
112
  /**
87
- * Memvid treats `seal()` on a readOnly handle as a mutation and throws.
88
- * We still need to release the file handle, but there is no dedicated close()
89
- * for readOnly handles. Relying on GC is acceptable the N-API layer releases
90
- * the Rust resources when the JS wrapper is collected.
113
+ * Assemble the lexically-indexed body for a session. The stock `@memvid/sdk`
114
+ * used to auto-append metadata as `key: <JSON>` tokens to the searchable body;
115
+ * the vendored addon stores exactly what we give it, so we build the same
116
+ * convention here. `extractMetaValue` / `stripMetadataTokens` parse it back out.
91
117
  */
92
- async function closeRead(_mv) {
93
- // no-op; see comment above
118
+ function buildBody(session, sessionNumber, agentId, timestamp) {
119
+ const meta = [
120
+ `session_number: ${JSON.stringify(sessionNumber)}`,
121
+ `agent_id: ${JSON.stringify(agentId)}`,
122
+ `timestamp: ${JSON.stringify(timestamp)}`,
123
+ `summary: ${JSON.stringify(session.summary)}`,
124
+ `files_changed: ${JSON.stringify(session.files_changed ?? [])}`,
125
+ `outcome: ${JSON.stringify(session.outcome ?? "")}`,
126
+ ].join("\n");
127
+ return `${session.content}\n${meta}`;
94
128
  }
95
129
  /**
96
130
  * Parse `[session N] summary` title. Returns null if the title doesn't match.
@@ -185,17 +219,270 @@ function stripMetadataTokens(text) {
185
219
  }
186
220
  return text.slice(0, cutIdx).trim();
187
221
  }
188
- async function nextSessionNumber(agentId) {
222
+ function nextSessionNumber(agentId) {
189
223
  const path = getBrainPath(agentId);
190
- const mv = await openForRead(path);
191
- if (!mv)
224
+ if (!existsSync(path))
192
225
  return 1;
226
+ return nativeFrameCount(path) + 1;
227
+ }
228
+ function writeFailMarkerPath(agentId) {
229
+ return join(getBrainsDir(), `.${sanitizeAgentId(agentId)}.write-failed.json`);
230
+ }
231
+ function recordWriteFailure(agentId, err) {
232
+ try {
233
+ ensureBrainsDir();
234
+ const marker = {
235
+ agent_id: agentId,
236
+ at: new Date().toISOString(),
237
+ message: err instanceof Error ? err.message : String(err),
238
+ };
239
+ writeFileSync(writeFailMarkerPath(agentId), JSON.stringify(marker));
240
+ }
241
+ catch {
242
+ // best effort — never mask the original error
243
+ }
244
+ }
245
+ function clearWriteFailure(agentId) {
193
246
  try {
194
- const stats = await mv.stats();
195
- return (stats?.frame_count ?? 0) + 1;
247
+ const p = writeFailMarkerPath(agentId);
248
+ if (existsSync(p))
249
+ unlinkSync(p);
196
250
  }
197
- finally {
198
- await closeRead(mv);
251
+ catch {
252
+ // best effort
253
+ }
254
+ }
255
+ /** Last recorded brain-write failure for an agent, or null. */
256
+ export function getBrainWriteFailure(agentId) {
257
+ try {
258
+ const p = writeFailMarkerPath(agentId);
259
+ if (!existsSync(p))
260
+ return null;
261
+ return JSON.parse(readFileSync(p, "utf8"));
262
+ }
263
+ catch {
264
+ return null;
265
+ }
266
+ }
267
+ // ── Legacy-file self-heal (migration) ────────────────────────────────────────
268
+ // A `.mv2` written by the stock @memvid/sdk has embedded tantivy segments this
269
+ // addon can read but cannot extend on write (cross-version). Appends land in the
270
+ // data segment but are not indexed. We heal such a file ONCE — before the first
271
+ // append — by rewriting it fresh (addon-owned). Ownership is tracked with a
272
+ // sidecar marker so healing never repeats and never runs on addon-created files.
273
+ function ownedMarkerPath(agentId) {
274
+ return join(getBrainsDir(), `.${sanitizeAgentId(agentId)}.addon`);
275
+ }
276
+ function isAddonOwned(agentId) {
277
+ return existsSync(ownedMarkerPath(agentId));
278
+ }
279
+ function markAddonOwned(agentId) {
280
+ try {
281
+ // Write once — avoids extra file IO on every append.
282
+ if (isAddonOwned(agentId))
283
+ return;
284
+ ensureBrainsDir();
285
+ writeFileSync(ownedMarkerPath(agentId), new Date().toISOString());
286
+ }
287
+ catch {
288
+ // best effort — worst case a future run re-checks/heals
289
+ }
290
+ }
291
+ function renameWithRetry(from, to, attempts = 6) {
292
+ for (let i = 1;; i++) {
293
+ try {
294
+ renameSync(from, to);
295
+ return;
296
+ }
297
+ catch (err) {
298
+ // Windows may hold a memory-map briefly after the native handle drops.
299
+ const code = err.code;
300
+ if (i >= attempts || (code !== "EPERM" && code !== "EBUSY" && code !== "EACCES"))
301
+ throw err;
302
+ const until = Date.now() + 25 * i;
303
+ while (Date.now() < until) {
304
+ /* short spin-wait; migration is rare */
305
+ }
306
+ }
307
+ }
308
+ }
309
+ /**
310
+ * Rewrite a legacy brain file into a fresh addon-owned file and swap it in,
311
+ * keeping the original as `<file>.pre-fork` for safety. Returns the migrated
312
+ * frame count, or null if migration was skipped/failed.
313
+ */
314
+ function healLegacyBrain(path, label) {
315
+ const tmp = `${path}.migrating`;
316
+ const backup = `${path}.pre-fork`;
317
+ try {
318
+ const migrated = nativeMigrate(path, tmp, label);
319
+ if (existsSync(backup)) {
320
+ try {
321
+ unlinkSync(backup);
322
+ }
323
+ catch {
324
+ // stale backup; overwrite path below still proceeds
325
+ }
326
+ }
327
+ renameWithRetry(path, backup);
328
+ renameWithRetry(tmp, path);
329
+ // eslint-disable-next-line no-console
330
+ console.error(`[brain] migrated legacy .mv2 to addon format: ${path} (${migrated} frames; original kept at ${backup})`);
331
+ return migrated;
332
+ }
333
+ catch (err) {
334
+ try {
335
+ if (existsSync(tmp))
336
+ unlinkSync(tmp);
337
+ }
338
+ catch {
339
+ // best effort
340
+ }
341
+ // eslint-disable-next-line no-console
342
+ console.error(`[brain] legacy migration failed for ${path}: ${err instanceof Error ? err.message : String(err)}`);
343
+ return null;
344
+ }
345
+ }
346
+ // ── Compaction (reclaim write-amplification slack) ───────────────────────────
347
+ // A `.mv2` bloats through the append/seal cycle (~100x+ physical vs logical
348
+ // bytes) with no in-place drain. Rewriting the frames into a fresh file
349
+ // reclaims it (measured 50 MB → ~1 MB). We compact when the file crosses a size
350
+ // threshold — well below the removed 50 MB cap, so it never approaches it, and
351
+ // far above a compacted file's size, so compaction is infrequent (~sub-second
352
+ // over a few hundred frames).
353
+ /** Compaction size threshold in bytes. Override with `AGENTHUB_BRAIN_COMPACT_BYTES`. */
354
+ function compactThresholdBytes() {
355
+ const v = Number(process.env.AGENTHUB_BRAIN_COMPACT_BYTES);
356
+ return Number.isFinite(v) && v > 0 ? v : 8 * 1024 * 1024; // 8 MB default
357
+ }
358
+ /**
359
+ * Rewrite an addon-owned brain into a fresh file (reclaiming slack) and swap it
360
+ * in, keeping the prior file as `<file>.pre-compact` until the next compaction.
361
+ * Best-effort — on any failure the original is left untouched. Returns the new
362
+ * frame count, or null if it failed.
363
+ */
364
+ function compactBrain(path, label) {
365
+ const tmp = `${path}.compacting`;
366
+ const backup = `${path}.pre-compact`;
367
+ try {
368
+ const before = statSync(path).size;
369
+ const frames = nativeMigrate(path, tmp, label);
370
+ if (existsSync(backup)) {
371
+ try {
372
+ unlinkSync(backup);
373
+ }
374
+ catch {
375
+ // stale backup; the swap below still proceeds
376
+ }
377
+ }
378
+ renameWithRetry(path, backup);
379
+ renameWithRetry(tmp, path);
380
+ const after = statSync(path).size;
381
+ // eslint-disable-next-line no-console
382
+ console.error(`[brain] compacted ${path}: ${(before / 1048576).toFixed(1)}MB -> ${(after / 1048576).toFixed(1)}MB (${frames} frames)`);
383
+ return frames;
384
+ }
385
+ catch (err) {
386
+ try {
387
+ if (existsSync(tmp))
388
+ unlinkSync(tmp);
389
+ }
390
+ catch {
391
+ // best effort
392
+ }
393
+ // eslint-disable-next-line no-console
394
+ console.error(`[brain] compaction failed for ${path}: ${err instanceof Error ? err.message : String(err)}`);
395
+ return null;
396
+ }
397
+ }
398
+ /** Compact `path` if it has grown past the threshold. Best-effort; never throws. */
399
+ function maybeCompact(path, label) {
400
+ try {
401
+ if (statSync(path).size > compactThresholdBytes()) {
402
+ compactBrain(path, label);
403
+ }
404
+ }
405
+ catch {
406
+ // stat failed (file gone/locked) — skip; next append retries
407
+ }
408
+ }
409
+ /**
410
+ * Startup pass: heal any legacy (stock-SDK-written) `.mv2` that is not yet
411
+ * addon-owned, so a later append indexes correctly. Addon-created files carry a
412
+ * `.addon` marker and are skipped. Runs once per file: after healing, the file
413
+ * is marked owned. Best-effort and never throws.
414
+ *
415
+ * Returns the list of agent ids that were healed.
416
+ */
417
+ export function healLegacyBrainsAtStartup() {
418
+ const healed = [];
419
+ if (!isMemvidAddonAvailable())
420
+ return healed;
421
+ const dir = getBrainsDir();
422
+ if (!existsSync(dir))
423
+ return healed;
424
+ let names;
425
+ try {
426
+ names = readdirSync(dir);
427
+ }
428
+ catch {
429
+ return healed;
430
+ }
431
+ for (const file of names) {
432
+ if (!file.endsWith(".mv2"))
433
+ continue;
434
+ const agentId = file.slice(0, -".mv2".length);
435
+ if (isAddonOwned(agentId))
436
+ continue; // addon-created — nothing to heal
437
+ const path = join(dir, file);
438
+ if (healLegacyBrain(path, sanitizeAgentId(agentId)) !== null) {
439
+ markAddonOwned(agentId);
440
+ healed.push(agentId);
441
+ }
442
+ }
443
+ return healed;
444
+ }
445
+ /**
446
+ * Startup health check: warn (not silently) about any brain whose last write
447
+ * failed, or that fails a trial open. Called from MCP startup alongside
448
+ * `sweepOrphanedTemps`.
449
+ */
450
+ export function brainHealthCheck() {
451
+ const dir = getBrainsDir();
452
+ if (!existsSync(dir))
453
+ return;
454
+ let names;
455
+ try {
456
+ names = readdirSync(dir);
457
+ }
458
+ catch {
459
+ return;
460
+ }
461
+ if (!isMemvidAddonAvailable()) {
462
+ // eslint-disable-next-line no-console
463
+ console.error(`[brain] WARNING: native memvid addon unavailable (${memvidAddonLoadError()}); brain falls back to jsonl.`);
464
+ return;
465
+ }
466
+ for (const name of names) {
467
+ if (name.startsWith(".") && name.endsWith(".write-failed.json")) {
468
+ try {
469
+ const marker = JSON.parse(readFileSync(join(dir, name), "utf8"));
470
+ // eslint-disable-next-line no-console
471
+ console.error(`[brain] WARNING: last brain write failed for ${marker.agent_id} at ${marker.at}: ${marker.message}`);
472
+ }
473
+ catch {
474
+ // ignore malformed marker
475
+ }
476
+ }
477
+ if (!name.endsWith(".mv2"))
478
+ continue;
479
+ try {
480
+ nativeFrameCount(join(dir, name));
481
+ }
482
+ catch (err) {
483
+ // eslint-disable-next-line no-console
484
+ console.error(`[brain] WARNING: brain file failed to open: ${name} — ${err instanceof Error ? err.message : String(err)}`);
485
+ }
199
486
  }
200
487
  }
201
488
  export class MemvidBrain {
@@ -204,90 +491,65 @@ export class MemvidBrain {
204
491
  }
205
492
  async appendSession(agentId, session) {
206
493
  ensureBrainsDir();
207
- const sessionNumber = session.session_number ?? (await nextSessionNumber(agentId));
494
+ const sessionNumber = session.session_number ?? nextSessionNumber(agentId);
208
495
  const timestamp = session.timestamp ?? new Date().toISOString();
209
496
  const path = getBrainPath(agentId);
210
- const mv = await openForWrite(path);
497
+ const label = sanitizeAgentId(agentId);
498
+ const title = `[session ${sessionNumber}] ${session.summary}`;
499
+ const body = buildBody(session, sessionNumber, agentId, timestamp);
211
500
  try {
212
- await mv.put({
213
- title: `[session ${sessionNumber}] ${session.summary}`,
214
- label: sanitizeAgentId(agentId),
215
- text: session.content,
216
- metadata: {
217
- session_number: sessionNumber,
218
- agent_id: agentId,
219
- timestamp,
220
- summary: session.summary,
221
- files_changed: session.files_changed ?? [],
222
- outcome: session.outcome ?? "",
223
- },
224
- });
501
+ nativeAppendSession(path, title, label, body);
502
+ // Mark the file addon-owned so the startup heal pass skips it.
503
+ markAddonOwned(agentId);
504
+ // Reclaim write-amplification slack when the file has grown large. The
505
+ // append already succeeded; compaction is best-effort and never fails it.
506
+ maybeCompact(path, label);
507
+ clearWriteFailure(agentId);
508
+ return sessionNumber;
225
509
  }
226
- finally {
227
- await mv.seal();
510
+ catch (err) {
511
+ recordWriteFailure(agentId, err);
512
+ throw err;
228
513
  }
229
- return sessionNumber;
230
514
  }
231
515
  async search(agentId, query, limit = 5) {
232
516
  const path = getBrainPath(agentId);
233
- const mv = await openForRead(path);
234
- if (!mv)
517
+ if (!existsSync(path))
235
518
  return [];
236
- try {
237
- const res = await mv.find(query, { k: limit, mode: "lex" });
238
- const hits = [];
239
- for (const rawHit of res.hits ?? []) {
240
- const hit = rawHit;
241
- const parsed = parseTitle(hit?.title);
242
- if (!parsed)
243
- continue;
244
- const timestamp = extractMetaString(hit?.text, "timestamp") ?? "";
245
- hits.push({
246
- session_number: parsed.sessionNumber,
247
- timestamp,
248
- summary: parsed.summary,
249
- snippet: hit?.snippet ?? "",
250
- score: typeof hit?.score === "number" ? hit.score : 0,
251
- });
252
- }
253
- return hits;
254
- }
255
- finally {
256
- await closeRead(mv);
519
+ const hits = [];
520
+ for (const hit of nativeSearchLex(path, query, limit)) {
521
+ const parsed = parseTitle(hit.title);
522
+ if (!parsed)
523
+ continue;
524
+ const timestamp = extractMetaString(hit.text, "timestamp") ?? "";
525
+ hits.push({
526
+ session_number: parsed.sessionNumber,
527
+ timestamp,
528
+ summary: parsed.summary,
529
+ snippet: hit.snippet ?? "",
530
+ score: typeof hit.score === "number" ? hit.score : 0,
531
+ });
257
532
  }
533
+ return hits;
258
534
  }
259
535
  async recall(agentId, sessionNumber) {
260
536
  const path = getBrainPath(agentId);
261
- const mv = await openForRead(path);
262
- if (!mv)
537
+ if (!existsSync(path))
263
538
  return null;
264
- try {
265
- // Match the title prefix. `[session N]` is distinctive enough.
266
- const res = await mv.find(`[session ${sessionNumber}]`, { k: 5, mode: "lex" });
267
- for (const hit of res.hits ?? []) {
268
- const parsed = parseTitle(hit?.title);
269
- if (parsed?.sessionNumber === sessionNumber) {
270
- return hitToRecord(agentId, hit);
271
- }
539
+ // Match the title prefix. `[session N]` is distinctive enough.
540
+ for (const hit of nativeSearchLex(path, `[session ${sessionNumber}]`, 5)) {
541
+ const parsed = parseTitle(hit.title);
542
+ if (parsed?.sessionNumber === sessionNumber) {
543
+ return hitToRecord(agentId, hit);
272
544
  }
273
- return null;
274
- }
275
- finally {
276
- await closeRead(mv);
277
545
  }
546
+ return null;
278
547
  }
279
548
  async getSessionCount(agentId) {
280
549
  const path = getBrainPath(agentId);
281
- const mv = await openForRead(path);
282
- if (!mv)
550
+ if (!existsSync(path))
283
551
  return 0;
284
- try {
285
- const stats = await mv.stats();
286
- return stats?.frame_count ?? 0;
287
- }
288
- finally {
289
- await closeRead(mv);
290
- }
552
+ return nativeFrameCount(path);
291
553
  }
292
554
  async listBrains() {
293
555
  const dir = getBrainsDir();
@@ -301,12 +563,7 @@ export class MemvidBrain {
301
563
  const fullPath = join(dir, file);
302
564
  let sessions = 0;
303
565
  try {
304
- const mv = await openForRead(fullPath);
305
- if (mv) {
306
- const stats = await mv.stats();
307
- sessions = stats?.frame_count ?? 0;
308
- await closeRead(mv);
309
- }
566
+ sessions = nativeFrameCount(fullPath);
310
567
  }
311
568
  catch {
312
569
  // If a .mv2 is locked or corrupted, still list it with 0 sessions.
@@ -1 +1 @@
1
- {"version":3,"file":"memvidBrain.js","sourceRoot":"","sources":["../../src/brain/memvidBrain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memvidBrain.js","sourceRoot":"","sources":["../../src/brain/memvidBrain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Compaction tests for MemvidBrain (add-brain-compaction).
3
+ *
4
+ * Isolated in its own file: append + compaction (migrate + swap) is the
5
+ * heaviest Windows file-IO sequence in the brain, so running it in a fresh
6
+ * process (per the vitest fork/isolate config) avoids the accumulated
7
+ * memory-map handle pressure that flakes it when it trails other brain tests.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=memvidCompaction.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memvidCompaction.test.d.ts","sourceRoot":"","sources":["../../src/brain/memvidCompaction.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Compaction tests for MemvidBrain (add-brain-compaction).
3
+ *
4
+ * Isolated in its own file: append + compaction (migrate + swap) is the
5
+ * heaviest Windows file-IO sequence in the brain, so running it in a fresh
6
+ * process (per the vitest fork/isolate config) avoids the accumulated
7
+ * memory-map handle pressure that flakes it when it trails other brain tests.
8
+ */
9
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
10
+ import { mkdtempSync, rmSync, existsSync } from "fs";
11
+ import { tmpdir } from "os";
12
+ import { join } from "path";
13
+ let tempHome;
14
+ vi.mock("os", async () => {
15
+ const actual = await vi.importActual("os");
16
+ return {
17
+ ...actual,
18
+ homedir: () => process.env.__TEST_HOME__ ?? actual.homedir(),
19
+ };
20
+ });
21
+ async function importMemvidBrain() {
22
+ return await import("./memvidBrain.js");
23
+ }
24
+ describe("MemvidBrain compaction", () => {
25
+ beforeEach(() => {
26
+ tempHome = mkdtempSync(join(tmpdir(), "memvid-compact-test-"));
27
+ process.env.__TEST_HOME__ = tempHome;
28
+ if (process.platform === "win32") {
29
+ process.env.USERPROFILE = tempHome;
30
+ }
31
+ else {
32
+ process.env.HOME = tempHome;
33
+ }
34
+ });
35
+ afterEach(() => {
36
+ try {
37
+ rmSync(tempHome, { recursive: true, force: true });
38
+ }
39
+ catch {
40
+ // best effort
41
+ }
42
+ delete process.env.__TEST_HOME__;
43
+ delete process.env.AGENTHUB_BRAIN_COMPACT_BYTES;
44
+ });
45
+ it("compacts when the file exceeds the size threshold, preserving all sessions", async () => {
46
+ const { MemvidBrain } = await importMemvidBrain();
47
+ const brain = new MemvidBrain();
48
+ const agent = "compact-agent";
49
+ // Append several sessions with the default (large) threshold — no compaction.
50
+ for (let i = 1; i <= 4; i++) {
51
+ await brain.appendSession(agent, {
52
+ summary: `s${i}`,
53
+ content: `uniquetoken${i} content for session ${i}`,
54
+ });
55
+ }
56
+ // Force a single compaction on the next append via a tiny threshold.
57
+ process.env.AGENTHUB_BRAIN_COMPACT_BYTES = "1";
58
+ await brain.appendSession(agent, { summary: "s5", content: "uniquetoken5 content for session 5" });
59
+ delete process.env.AGENTHUB_BRAIN_COMPACT_BYTES;
60
+ // Compaction preserves the session count and every session stays searchable.
61
+ expect(await brain.getSessionCount(agent)).toBe(5);
62
+ for (let i = 1; i <= 5; i++) {
63
+ const hits = await brain.search(agent, `uniquetoken${i}`, 5);
64
+ expect(hits.length).toBeGreaterThan(0);
65
+ }
66
+ // A .pre-compact backup exists (proof compaction actually ran).
67
+ const backup = join(tempHome, ".claude", "brains", "compact-agent.mv2.pre-compact");
68
+ expect(existsSync(backup)).toBe(true);
69
+ });
70
+ });
71
+ //# sourceMappingURL=memvidCompaction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memvidCompaction.test.js","sourceRoot":"","sources":["../../src/brain/memvidCompaction.test.ts"],"names":[],"mappings":"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"}