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.
- package/README.md +192 -192
- package/dist/brain/backend.d.ts.map +1 -1
- package/dist/brain/backend.js +11 -2
- package/dist/brain/backend.js.map +1 -1
- package/dist/brain/memvidBrain.d.ts +24 -0
- package/dist/brain/memvidBrain.d.ts.map +1 -1
- package/dist/brain/memvidBrain.js +350 -93
- package/dist/brain/memvidBrain.js.map +1 -1
- package/dist/brain/memvidCompaction.test.d.ts +10 -0
- package/dist/brain/memvidCompaction.test.d.ts.map +1 -0
- package/dist/brain/memvidCompaction.test.js +71 -0
- package/dist/brain/memvidCompaction.test.js.map +1 -0
- package/dist/channel.js +3 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +15 -2
- package/dist/client.js.map +1 -1
- package/dist/commands/setup-shell.js +11 -11
- package/dist/employee.d.ts +0 -5
- package/dist/employee.d.ts.map +1 -1
- package/dist/employee.js +14 -1
- package/dist/employee.js.map +1 -1
- package/dist/hooks/periodicReminder.js +9 -9
- package/dist/setup.js +56 -56
- package/dist/tools/index.js +11 -11
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/openspec-viz/diagram-generator.js +54 -54
- package/dist/tools/openspec-viz/html-generator.js +503 -503
- package/dist/worker.js +10 -10
- package/native/agenthub-memvid/agenthub-memvid.linux-x64-gnu.node +0 -0
- package/native/agenthub-memvid/agenthub-memvid.win32-x64-msvc.node +0 -0
- package/native/agenthub-memvid/index.d.ts +58 -0
- package/native/agenthub-memvid/index.js +319 -0
- package/package.json +77 -75
- package/skills/catalog.json +76 -76
- package/skills/commands/close-session.md +144 -144
- package/skills/commands/start-session.md +77 -77
- package/skills/manifest.json +50 -50
- package/skills/skills/code-brain-hook/SKILL.md +61 -61
- package/skills/skills/deploy-staging/SKILL.md +164 -164
- package/skills/skills/deploy-vps-openclaw/SKILL.md +97 -97
- package/skills/skills/file-bug/SKILL.md +75 -75
- package/skills/skills/karpathy-guidelines/SKILL.md +67 -67
- 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 {
|
|
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
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
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
|
-
|
|
93
|
-
|
|
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
|
-
|
|
222
|
+
function nextSessionNumber(agentId) {
|
|
189
223
|
const path = getBrainPath(agentId);
|
|
190
|
-
|
|
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
|
|
195
|
-
|
|
247
|
+
const p = writeFailMarkerPath(agentId);
|
|
248
|
+
if (existsSync(p))
|
|
249
|
+
unlinkSync(p);
|
|
196
250
|
}
|
|
197
|
-
|
|
198
|
-
|
|
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 ??
|
|
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
|
|
497
|
+
const label = sanitizeAgentId(agentId);
|
|
498
|
+
const title = `[session ${sessionNumber}] ${session.summary}`;
|
|
499
|
+
const body = buildBody(session, sessionNumber, agentId, timestamp);
|
|
211
500
|
try {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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
|
-
|
|
227
|
-
|
|
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
|
-
|
|
234
|
-
if (!mv)
|
|
517
|
+
if (!existsSync(path))
|
|
235
518
|
return [];
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
const
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
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
|
-
|
|
262
|
-
if (!mv)
|
|
537
|
+
if (!existsSync(path))
|
|
263
538
|
return null;
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
const
|
|
267
|
-
|
|
268
|
-
|
|
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
|
-
|
|
282
|
-
if (!mv)
|
|
550
|
+
if (!existsSync(path))
|
|
283
551
|
return 0;
|
|
284
|
-
|
|
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
|
-
|
|
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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"}
|