crbro-memory 1.5.2 → 1.6.1
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 +174 -170
- package/dist/engine/brain.d.ts +2 -0
- package/dist/engine/brain.d.ts.map +1 -1
- package/dist/engine/brain.js +4 -0
- package/dist/engine/brain.js.map +1 -1
- package/dist/engine/cortex.d.ts +27 -0
- package/dist/engine/cortex.d.ts.map +1 -1
- package/dist/engine/cortex.js +207 -98
- package/dist/engine/cortex.js.map +1 -1
- package/dist/engine/heat.d.ts.map +1 -1
- package/dist/engine/heat.js +9 -5
- package/dist/engine/heat.js.map +1 -1
- package/dist/engine/maintenance.d.ts +10 -0
- package/dist/engine/maintenance.d.ts.map +1 -1
- package/dist/engine/maintenance.js +57 -0
- package/dist/engine/maintenance.js.map +1 -1
- package/dist/engine/secrets.d.ts +21 -0
- package/dist/engine/secrets.d.ts.map +1 -0
- package/dist/engine/secrets.js +92 -0
- package/dist/engine/secrets.js.map +1 -0
- package/dist/search/index.d.ts.map +1 -1
- package/dist/search/index.js +19 -2
- package/dist/search/index.js.map +1 -1
- package/dist/search/tokenize.d.ts +10 -0
- package/dist/search/tokenize.d.ts.map +1 -1
- package/dist/search/tokenize.js +32 -0
- package/dist/search/tokenize.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +85 -2
- package/dist/server.js.map +1 -1
- package/dist/utils/fs.d.ts +13 -0
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +24 -0
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/lock.d.ts +11 -0
- package/dist/utils/lock.d.ts.map +1 -0
- package/dist/utils/lock.js +121 -0
- package/dist/utils/lock.js.map +1 -0
- package/package.json +1 -1
package/dist/utils/fs.js
CHANGED
|
@@ -8,6 +8,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
8
8
|
exports.readJSON = readJSON;
|
|
9
9
|
exports.writeJSON = writeJSON;
|
|
10
10
|
exports.fileExists = fileExists;
|
|
11
|
+
exports.updateJSON = updateJSON;
|
|
11
12
|
exports.fileMtime = fileMtime;
|
|
12
13
|
exports.newestMtime = newestMtime;
|
|
13
14
|
exports.listJSONFiles = listJSONFiles;
|
|
@@ -17,6 +18,7 @@ exports.today = today;
|
|
|
17
18
|
exports.now = now;
|
|
18
19
|
const node_fs_1 = require("node:fs");
|
|
19
20
|
const node_path_1 = __importDefault(require("node:path"));
|
|
21
|
+
const lock_js_1 = require("./lock.js");
|
|
20
22
|
/**
|
|
21
23
|
* Safely read and parse a JSON file. Returns null if file doesn't exist.
|
|
22
24
|
* Never throws on missing file — only on corrupted JSON.
|
|
@@ -61,6 +63,28 @@ async function fileExists(filePath) {
|
|
|
61
63
|
return false;
|
|
62
64
|
}
|
|
63
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Read a JSON file, let the caller change it, and write it back — all while
|
|
68
|
+
* holding the file's lock, so a concurrent writer cannot slip in between the
|
|
69
|
+
* read and the write.
|
|
70
|
+
*
|
|
71
|
+
* This is the fix for silent data loss: every mutation used to read the whole
|
|
72
|
+
* neuron, edit it in memory and save it, so with two editors open the later
|
|
73
|
+
* save erased whatever the other one had added. Measured before the lock: 80
|
|
74
|
+
* facts requested across two processes, 42 survived, no errors reported.
|
|
75
|
+
*
|
|
76
|
+
* The mutator returns the value to write, or null to leave the file alone.
|
|
77
|
+
*/
|
|
78
|
+
async function updateJSON(filePath, mutate) {
|
|
79
|
+
return (0, lock_js_1.withLock)(filePath, async () => {
|
|
80
|
+
const current = await readJSON(filePath);
|
|
81
|
+
const next = await mutate(current);
|
|
82
|
+
if (next === null)
|
|
83
|
+
return current;
|
|
84
|
+
await writeJSON(filePath, next);
|
|
85
|
+
return next;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
64
88
|
/**
|
|
65
89
|
* Last modification time of a file, in milliseconds. 0 if it does not exist.
|
|
66
90
|
*/
|
package/dist/utils/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":";AAAA,oEAAoE;AACpE,6DAA6D;;;;;
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run `fn` while holding the lock for `target`.
|
|
3
|
+
* The lock is always released, including when `fn` throws.
|
|
4
|
+
*/
|
|
5
|
+
export declare function withLock<T>(target: string, fn: () => Promise<T>): Promise<T>;
|
|
6
|
+
/**
|
|
7
|
+
* Remove lock files left behind by a process that died mid-write.
|
|
8
|
+
* Returns how many were swept. Called from maintenance.
|
|
9
|
+
*/
|
|
10
|
+
export declare function sweepStaleLocks(dir: string): Promise<number>;
|
|
11
|
+
//# sourceMappingURL=lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/utils/lock.ts"],"names":[],"mappings":"AAmFA;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOlF;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBlE"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ─── CRBRO File Locking ──────────────────────────────────────────
|
|
3
|
+
//
|
|
4
|
+
// Why this exists, measured on the real thing: two processes each storing 40
|
|
5
|
+
// facts into the same neuron asked for 80 and kept 42. Neither reported an
|
|
6
|
+
// error. Every write path reads the whole neuron, changes it in memory and
|
|
7
|
+
// writes it back, so whoever saves last silently erases whatever the other one
|
|
8
|
+
// did in between. With CRBRO registered at user level — which the README
|
|
9
|
+
// recommends — two editors open at once is the normal case, not an edge case.
|
|
10
|
+
//
|
|
11
|
+
// An advisory lock file is enough here. All writers are CRBRO itself, the
|
|
12
|
+
// critical section is a few milliseconds, and the alternative (an OS-level
|
|
13
|
+
// lock) behaves differently on every platform and cannot be made to wait
|
|
14
|
+
// politely on Windows.
|
|
15
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
16
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.withLock = withLock;
|
|
20
|
+
exports.sweepStaleLocks = sweepStaleLocks;
|
|
21
|
+
const node_fs_1 = require("node:fs");
|
|
22
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
23
|
+
/** How long a lock may be held before we assume its owner died. */
|
|
24
|
+
const STALE_MS = 10_000;
|
|
25
|
+
/** How long to keep trying before giving up. */
|
|
26
|
+
const TIMEOUT_MS = 15_000;
|
|
27
|
+
/** Wait between attempts. Grows a little to avoid a stampede. */
|
|
28
|
+
const RETRY_MIN_MS = 8;
|
|
29
|
+
const RETRY_MAX_MS = 60;
|
|
30
|
+
const sleep = (ms) => new Promise(r => setTimeout(r, ms));
|
|
31
|
+
function lockPath(target) {
|
|
32
|
+
return `${target}.lock`;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Take the lock for a file. Returns a release function.
|
|
36
|
+
*
|
|
37
|
+
* `wx` fails if the file already exists, and that failure is the whole
|
|
38
|
+
* mechanism: exactly one caller can create it.
|
|
39
|
+
*/
|
|
40
|
+
async function acquire(target) {
|
|
41
|
+
const lock = lockPath(target);
|
|
42
|
+
await node_fs_1.promises.mkdir(node_path_1.default.dirname(lock), { recursive: true });
|
|
43
|
+
const deadline = Date.now() + TIMEOUT_MS;
|
|
44
|
+
let wait = RETRY_MIN_MS;
|
|
45
|
+
for (;;) {
|
|
46
|
+
try {
|
|
47
|
+
const fh = await node_fs_1.promises.open(lock, 'wx');
|
|
48
|
+
await fh.writeFile(`${process.pid} ${new Date().toISOString()}`, 'utf-8');
|
|
49
|
+
await fh.close();
|
|
50
|
+
return async () => {
|
|
51
|
+
try {
|
|
52
|
+
await node_fs_1.promises.unlink(lock);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Already gone: released twice, or cleaned up as stale. Harmless.
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
const code = err?.code;
|
|
61
|
+
if (code !== 'EEXIST')
|
|
62
|
+
throw err;
|
|
63
|
+
// Someone holds it. If they have held it far too long, they are gone.
|
|
64
|
+
try {
|
|
65
|
+
const st = await node_fs_1.promises.stat(lock);
|
|
66
|
+
if (Date.now() - st.mtimeMs > STALE_MS) {
|
|
67
|
+
await node_fs_1.promises.unlink(lock).catch(() => { });
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
continue; // Vanished between the failure and the stat: try again.
|
|
73
|
+
}
|
|
74
|
+
if (Date.now() > deadline) {
|
|
75
|
+
// Never block a write forever. Losing the lock is bad; hanging the
|
|
76
|
+
// assistant is worse, and the stale sweep above makes this rare.
|
|
77
|
+
return async () => { };
|
|
78
|
+
}
|
|
79
|
+
await sleep(wait);
|
|
80
|
+
wait = Math.min(Math.round(wait * 1.4), RETRY_MAX_MS);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Run `fn` while holding the lock for `target`.
|
|
86
|
+
* The lock is always released, including when `fn` throws.
|
|
87
|
+
*/
|
|
88
|
+
async function withLock(target, fn) {
|
|
89
|
+
const release = await acquire(target);
|
|
90
|
+
try {
|
|
91
|
+
return await fn();
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
await release();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Remove lock files left behind by a process that died mid-write.
|
|
99
|
+
* Returns how many were swept. Called from maintenance.
|
|
100
|
+
*/
|
|
101
|
+
async function sweepStaleLocks(dir) {
|
|
102
|
+
let swept = 0;
|
|
103
|
+
try {
|
|
104
|
+
for (const f of await node_fs_1.promises.readdir(dir)) {
|
|
105
|
+
if (!f.endsWith('.lock'))
|
|
106
|
+
continue;
|
|
107
|
+
const p = node_path_1.default.join(dir, f);
|
|
108
|
+
try {
|
|
109
|
+
const st = await node_fs_1.promises.stat(p);
|
|
110
|
+
if (Date.now() - st.mtimeMs > STALE_MS) {
|
|
111
|
+
await node_fs_1.promises.unlink(p);
|
|
112
|
+
swept++;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch { /* gone already */ }
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch { /* no such directory */ }
|
|
119
|
+
return swept;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/utils/lock.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "crbro-memory",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.1",
|
|
4
4
|
"mcpName": "io.github.Octonove/crbro-memory",
|
|
5
5
|
"description": "CRBRO — Persistent neural memory for AI. A biological file-based MCP server that gives your AI long-term memory across sessions.",
|
|
6
6
|
"main": "dist/index.js",
|