mnemosyne-core 2.1.4 → 2.1.6
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/dist/cli/index.js +29 -32
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +29 -32
- package/dist/cli/index.mjs.map +1 -1
- package/dist/index.js +26 -29
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +26 -29
- package/dist/index.mjs.map +1 -1
- package/dist/mcp/index.js +1 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/index.mjs +1 -1
- package/dist/mcp/index.mjs.map +1 -1
- package/dist/server/api.js +4 -5
- package/dist/server/api.js.map +1 -1
- package/dist/server/api.mjs +4 -5
- package/dist/server/api.mjs.map +1 -1
- package/dist/server/index.js +21 -28
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +21 -28
- package/dist/server/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -3635,7 +3635,7 @@ function getVersion() {
|
|
|
3635
3635
|
const pkg = JSON.parse(readFileSync8(resolve14(process.cwd(), "package.json"), "utf-8"));
|
|
3636
3636
|
return pkg.version;
|
|
3637
3637
|
} catch {
|
|
3638
|
-
return "2.1.
|
|
3638
|
+
return "2.1.5";
|
|
3639
3639
|
}
|
|
3640
3640
|
}
|
|
3641
3641
|
}
|
|
@@ -7599,7 +7599,7 @@ var require_package = __commonJS({
|
|
|
7599
7599
|
"package.json"(exports2, module2) {
|
|
7600
7600
|
module2.exports = {
|
|
7601
7601
|
name: "mnemosyne-core",
|
|
7602
|
-
version: "2.1.
|
|
7602
|
+
version: "2.1.6",
|
|
7603
7603
|
description: "Unified memory engine for AI agents \u2014 graph atoms, semantic search, and collaborative memory",
|
|
7604
7604
|
logo: "logo.png",
|
|
7605
7605
|
author: "Arman Aslanyan <aslanyanarman88@gmail.com> (https://www.linkedin.com/in/arman-aslanyan/)",
|
|
@@ -8144,7 +8144,15 @@ var Store = class extends EventEmitter {
|
|
|
8144
8144
|
vals.push(this.now());
|
|
8145
8145
|
sets.push("version = version + 1");
|
|
8146
8146
|
vals.push(id);
|
|
8147
|
-
|
|
8147
|
+
const sql = `UPDATE atoms SET ${sets.join(", ")} WHERE id = ?`;
|
|
8148
|
+
try {
|
|
8149
|
+
this.stmt(sql).run(...vals);
|
|
8150
|
+
} catch (err) {
|
|
8151
|
+
if (err.message?.includes("malformed") || err.message?.includes("corrupt")) {
|
|
8152
|
+
throw new Error(`Database appears corrupted. Run "mnemosyne doctor --data-dir ./data" or delete the data directory and run "mnemosyne init" again.`);
|
|
8153
|
+
}
|
|
8154
|
+
throw err;
|
|
8155
|
+
}
|
|
8148
8156
|
const updated = this.getAtom(id);
|
|
8149
8157
|
this.emit("atom.updated", { atom: updated, projectId: atom.project_id, changes });
|
|
8150
8158
|
this.logEvent("atom.updated", updatedBy, "assistant", atom.project_id, id, void 0, { fields: changes });
|
|
@@ -8399,7 +8407,6 @@ var Store = class extends EventEmitter {
|
|
|
8399
8407
|
// ═══════════════════════════════════════════════════════════
|
|
8400
8408
|
search(projectId, q, limit) {
|
|
8401
8409
|
const results = [];
|
|
8402
|
-
const seenAtoms = /* @__PURE__ */ new Set();
|
|
8403
8410
|
const matchExpr = q.trim().split(/\s+/).filter(Boolean).map((t) => `"${t.replace(/"/g, "")}"`).join(" ");
|
|
8404
8411
|
if (!matchExpr) return results;
|
|
8405
8412
|
const projectFilter = projectId ? "AND a.project_id = ?" : "";
|
|
@@ -8414,26 +8421,9 @@ var Store = class extends EventEmitter {
|
|
|
8414
8421
|
`).all(...paramsAtoms);
|
|
8415
8422
|
for (const a of atoms) {
|
|
8416
8423
|
if (results.length >= limit) break;
|
|
8417
|
-
|
|
8424
|
+
if (a.title === "__INDEX__") continue;
|
|
8418
8425
|
results.push({ kind: "atom", ...a, metadata: this.parseMeta(a) });
|
|
8419
8426
|
}
|
|
8420
|
-
const paramsBlocks = projectId ? [matchExpr, projectId, limit] : [matchExpr, limit];
|
|
8421
|
-
const blocks = this.stmt(`
|
|
8422
|
-
SELECT b.*, a.title as atom_title, a.id as atom_id, bm25(search_blocks) as rank
|
|
8423
|
-
FROM search_blocks
|
|
8424
|
-
JOIN blocks b ON b.rowid = search_blocks.rowid
|
|
8425
|
-
JOIN atoms a ON b.atom_id = a.id
|
|
8426
|
-
WHERE search_blocks MATCH ? ${projectFilter}
|
|
8427
|
-
ORDER BY rank
|
|
8428
|
-
LIMIT ?
|
|
8429
|
-
`).all(...paramsBlocks);
|
|
8430
|
-
for (const b of blocks) {
|
|
8431
|
-
if (results.length >= limit) break;
|
|
8432
|
-
if (!seenAtoms.has(b.atom_id)) {
|
|
8433
|
-
seenAtoms.add(b.atom_id);
|
|
8434
|
-
results.push({ kind: "block", ...b, metadata: this.parseMeta(b) });
|
|
8435
|
-
}
|
|
8436
|
-
}
|
|
8437
8427
|
return results;
|
|
8438
8428
|
}
|
|
8439
8429
|
// ─── Semantic Search ──────────────────────────────────────
|
|
@@ -8484,7 +8474,7 @@ var Store = class extends EventEmitter {
|
|
|
8484
8474
|
ORDER BY v.distance
|
|
8485
8475
|
LIMIT ${limit}
|
|
8486
8476
|
`).all(...params);
|
|
8487
|
-
return rows.map((r) => ({ kind: "atom", ...r, metadata: this.parseMeta(r) }));
|
|
8477
|
+
return rows.filter((r) => r.title !== "__INDEX__").map((r) => ({ kind: "atom", ...r, metadata: this.parseMeta(r) }));
|
|
8488
8478
|
} catch (err) {
|
|
8489
8479
|
console.error("[Store] Semantic search failed:", err.message);
|
|
8490
8480
|
return [];
|
|
@@ -8947,7 +8937,7 @@ function getVersion2() {
|
|
|
8947
8937
|
const pkg = JSON.parse(readFileSync8(resolve14(process.cwd(), "package.json"), "utf-8"));
|
|
8948
8938
|
return pkg.version;
|
|
8949
8939
|
} catch {
|
|
8950
|
-
return "2.1.
|
|
8940
|
+
return "2.1.5";
|
|
8951
8941
|
}
|
|
8952
8942
|
}
|
|
8953
8943
|
}
|
|
@@ -9186,7 +9176,7 @@ CREATE TRIGGER IF NOT EXISTS trig_search_atoms_insert AFTER INSERT ON atoms BEGI
|
|
|
9186
9176
|
END;
|
|
9187
9177
|
|
|
9188
9178
|
CREATE TRIGGER IF NOT EXISTS trig_search_atoms_update AFTER UPDATE ON atoms BEGIN
|
|
9189
|
-
|
|
9179
|
+
INSERT OR REPLACE INTO search_atoms(rowid, title, summary) VALUES (new.rowid, new.title, COALESCE(new.summary, ''));
|
|
9190
9180
|
END;
|
|
9191
9181
|
|
|
9192
9182
|
CREATE TRIGGER IF NOT EXISTS trig_search_atoms_delete AFTER DELETE ON atoms BEGIN
|
|
@@ -9238,6 +9228,10 @@ var Mnemosyne = class {
|
|
|
9238
9228
|
this.db.pragma("journal_mode = WAL");
|
|
9239
9229
|
this.db.pragma("foreign_keys = ON");
|
|
9240
9230
|
this.db.pragma("synchronous = NORMAL");
|
|
9231
|
+
try {
|
|
9232
|
+
this.db.pragma("wal_checkpoint(TRUNCATE)");
|
|
9233
|
+
} catch {
|
|
9234
|
+
}
|
|
9241
9235
|
this.vecEnabled = false;
|
|
9242
9236
|
try {
|
|
9243
9237
|
let vecPath;
|
|
@@ -9545,7 +9539,7 @@ function getVersion3() {
|
|
|
9545
9539
|
const pkg = JSON.parse(readFileSync8(resolve14(process.cwd(), "package.json"), "utf-8"));
|
|
9546
9540
|
return pkg.version;
|
|
9547
9541
|
} catch {
|
|
9548
|
-
return "2.1.
|
|
9542
|
+
return "2.1.5";
|
|
9549
9543
|
}
|
|
9550
9544
|
}
|
|
9551
9545
|
}
|
|
@@ -10470,8 +10464,7 @@ async function handleSearch(store, pathname, method, res, searchParams) {
|
|
|
10470
10464
|
} else {
|
|
10471
10465
|
results = store.search(projectId, q, limit);
|
|
10472
10466
|
}
|
|
10473
|
-
|
|
10474
|
-
json(res, 200, { query: q, semantic, count: filtered.length, results: filtered });
|
|
10467
|
+
json(res, 200, { query: q, semantic, count: results.length, results });
|
|
10475
10468
|
return true;
|
|
10476
10469
|
}
|
|
10477
10470
|
return false;
|
|
@@ -10681,7 +10674,7 @@ var PKG_VERSION = (() => {
|
|
|
10681
10674
|
const pkg = JSON.parse(require("fs").readFileSync(require("path").resolve(__dirname, "../../package.json"), "utf-8"));
|
|
10682
10675
|
return pkg.version;
|
|
10683
10676
|
} catch {
|
|
10684
|
-
return "2.1.
|
|
10677
|
+
return "2.1.5";
|
|
10685
10678
|
}
|
|
10686
10679
|
})();
|
|
10687
10680
|
function handleHealth(store, pathname, method, res) {
|
|
@@ -10927,6 +10920,10 @@ function getDb() {
|
|
|
10927
10920
|
db.pragma("journal_mode = WAL");
|
|
10928
10921
|
db.pragma("foreign_keys = ON");
|
|
10929
10922
|
db.pragma("synchronous = NORMAL");
|
|
10923
|
+
try {
|
|
10924
|
+
db.pragma("wal_checkpoint(TRUNCATE)");
|
|
10925
|
+
} catch {
|
|
10926
|
+
}
|
|
10930
10927
|
try {
|
|
10931
10928
|
const { getLoadablePath } = require("sqlite-vec");
|
|
10932
10929
|
db.loadExtension(getLoadablePath());
|
|
@@ -11005,7 +11002,7 @@ var MnemosyneServer = class {
|
|
|
11005
11002
|
const wss = new import_websocket_server.default({ server: this.httpServer });
|
|
11006
11003
|
this.wsHandler = new WebSocketHandler(wss, this.store);
|
|
11007
11004
|
}
|
|
11008
|
-
const version = cfg?.server?.version || "2.1.
|
|
11005
|
+
const version = cfg?.server?.version || "2.1.5";
|
|
11009
11006
|
this.httpServer.listen(port, () => {
|
|
11010
11007
|
console.log(`Mnemosyne v${version} \u2014 port ${port}`);
|
|
11011
11008
|
console.log(`Dashboard: http://${host}:${port}/dashboard`);
|
|
@@ -11063,7 +11060,7 @@ function getVersion4() {
|
|
|
11063
11060
|
const { resolve: resolve14 } = require("path");
|
|
11064
11061
|
return JSON.parse(readFileSync8(resolve14(__dirname, "../../package.json"), "utf-8")).version;
|
|
11065
11062
|
} catch {
|
|
11066
|
-
return "2.1.
|
|
11063
|
+
return "2.1.5";
|
|
11067
11064
|
}
|
|
11068
11065
|
}
|
|
11069
11066
|
async function startCommand(options) {
|
|
@@ -11355,7 +11352,7 @@ program2.name("mnemosyne").description("Mnemosyne \u2014 Your exocortex").versio
|
|
|
11355
11352
|
try {
|
|
11356
11353
|
return require_package().version;
|
|
11357
11354
|
} catch {
|
|
11358
|
-
return "2.1.
|
|
11355
|
+
return "2.1.5";
|
|
11359
11356
|
}
|
|
11360
11357
|
})());
|
|
11361
11358
|
program2.command("init").description("Initialize a new Mnemosyne workspace").option("-d, --data-dir <path>", "Data directory", "./data").option("-c, --config <path>", "Config file path").action(initCommand);
|