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.mjs
CHANGED
|
@@ -3641,7 +3641,7 @@ function getVersion() {
|
|
|
3641
3641
|
const pkg = JSON.parse(readFileSync8(resolve14(process.cwd(), "package.json"), "utf-8"));
|
|
3642
3642
|
return pkg.version;
|
|
3643
3643
|
} catch {
|
|
3644
|
-
return "2.1.
|
|
3644
|
+
return "2.1.5";
|
|
3645
3645
|
}
|
|
3646
3646
|
}
|
|
3647
3647
|
}
|
|
@@ -7602,7 +7602,7 @@ var require_package = __commonJS({
|
|
|
7602
7602
|
"package.json"(exports, module2) {
|
|
7603
7603
|
module2.exports = {
|
|
7604
7604
|
name: "mnemosyne-core",
|
|
7605
|
-
version: "2.1.
|
|
7605
|
+
version: "2.1.6",
|
|
7606
7606
|
description: "Unified memory engine for AI agents \u2014 graph atoms, semantic search, and collaborative memory",
|
|
7607
7607
|
logo: "logo.png",
|
|
7608
7608
|
author: "Arman Aslanyan <aslanyanarman88@gmail.com> (https://www.linkedin.com/in/arman-aslanyan/)",
|
|
@@ -8140,7 +8140,15 @@ var Store = class extends EventEmitter {
|
|
|
8140
8140
|
vals.push(this.now());
|
|
8141
8141
|
sets.push("version = version + 1");
|
|
8142
8142
|
vals.push(id);
|
|
8143
|
-
|
|
8143
|
+
const sql = `UPDATE atoms SET ${sets.join(", ")} WHERE id = ?`;
|
|
8144
|
+
try {
|
|
8145
|
+
this.stmt(sql).run(...vals);
|
|
8146
|
+
} catch (err) {
|
|
8147
|
+
if (err.message?.includes("malformed") || err.message?.includes("corrupt")) {
|
|
8148
|
+
throw new Error(`Database appears corrupted. Run "mnemosyne doctor --data-dir ./data" or delete the data directory and run "mnemosyne init" again.`);
|
|
8149
|
+
}
|
|
8150
|
+
throw err;
|
|
8151
|
+
}
|
|
8144
8152
|
const updated = this.getAtom(id);
|
|
8145
8153
|
this.emit("atom.updated", { atom: updated, projectId: atom.project_id, changes });
|
|
8146
8154
|
this.logEvent("atom.updated", updatedBy, "assistant", atom.project_id, id, void 0, { fields: changes });
|
|
@@ -8395,7 +8403,6 @@ var Store = class extends EventEmitter {
|
|
|
8395
8403
|
// ═══════════════════════════════════════════════════════════
|
|
8396
8404
|
search(projectId, q, limit) {
|
|
8397
8405
|
const results = [];
|
|
8398
|
-
const seenAtoms = /* @__PURE__ */ new Set();
|
|
8399
8406
|
const matchExpr = q.trim().split(/\s+/).filter(Boolean).map((t) => `"${t.replace(/"/g, "")}"`).join(" ");
|
|
8400
8407
|
if (!matchExpr) return results;
|
|
8401
8408
|
const projectFilter = projectId ? "AND a.project_id = ?" : "";
|
|
@@ -8410,26 +8417,9 @@ var Store = class extends EventEmitter {
|
|
|
8410
8417
|
`).all(...paramsAtoms);
|
|
8411
8418
|
for (const a of atoms) {
|
|
8412
8419
|
if (results.length >= limit) break;
|
|
8413
|
-
|
|
8420
|
+
if (a.title === "__INDEX__") continue;
|
|
8414
8421
|
results.push({ kind: "atom", ...a, metadata: this.parseMeta(a) });
|
|
8415
8422
|
}
|
|
8416
|
-
const paramsBlocks = projectId ? [matchExpr, projectId, limit] : [matchExpr, limit];
|
|
8417
|
-
const blocks = this.stmt(`
|
|
8418
|
-
SELECT b.*, a.title as atom_title, a.id as atom_id, bm25(search_blocks) as rank
|
|
8419
|
-
FROM search_blocks
|
|
8420
|
-
JOIN blocks b ON b.rowid = search_blocks.rowid
|
|
8421
|
-
JOIN atoms a ON b.atom_id = a.id
|
|
8422
|
-
WHERE search_blocks MATCH ? ${projectFilter}
|
|
8423
|
-
ORDER BY rank
|
|
8424
|
-
LIMIT ?
|
|
8425
|
-
`).all(...paramsBlocks);
|
|
8426
|
-
for (const b of blocks) {
|
|
8427
|
-
if (results.length >= limit) break;
|
|
8428
|
-
if (!seenAtoms.has(b.atom_id)) {
|
|
8429
|
-
seenAtoms.add(b.atom_id);
|
|
8430
|
-
results.push({ kind: "block", ...b, metadata: this.parseMeta(b) });
|
|
8431
|
-
}
|
|
8432
|
-
}
|
|
8433
8423
|
return results;
|
|
8434
8424
|
}
|
|
8435
8425
|
// ─── Semantic Search ──────────────────────────────────────
|
|
@@ -8480,7 +8470,7 @@ var Store = class extends EventEmitter {
|
|
|
8480
8470
|
ORDER BY v.distance
|
|
8481
8471
|
LIMIT ${limit}
|
|
8482
8472
|
`).all(...params);
|
|
8483
|
-
return rows.map((r) => ({ kind: "atom", ...r, metadata: this.parseMeta(r) }));
|
|
8473
|
+
return rows.filter((r) => r.title !== "__INDEX__").map((r) => ({ kind: "atom", ...r, metadata: this.parseMeta(r) }));
|
|
8484
8474
|
} catch (err) {
|
|
8485
8475
|
console.error("[Store] Semantic search failed:", err.message);
|
|
8486
8476
|
return [];
|
|
@@ -8943,7 +8933,7 @@ function getVersion2() {
|
|
|
8943
8933
|
const pkg = JSON.parse(readFileSync8(resolve14(process.cwd(), "package.json"), "utf-8"));
|
|
8944
8934
|
return pkg.version;
|
|
8945
8935
|
} catch {
|
|
8946
|
-
return "2.1.
|
|
8936
|
+
return "2.1.5";
|
|
8947
8937
|
}
|
|
8948
8938
|
}
|
|
8949
8939
|
}
|
|
@@ -9182,7 +9172,7 @@ CREATE TRIGGER IF NOT EXISTS trig_search_atoms_insert AFTER INSERT ON atoms BEGI
|
|
|
9182
9172
|
END;
|
|
9183
9173
|
|
|
9184
9174
|
CREATE TRIGGER IF NOT EXISTS trig_search_atoms_update AFTER UPDATE ON atoms BEGIN
|
|
9185
|
-
|
|
9175
|
+
INSERT OR REPLACE INTO search_atoms(rowid, title, summary) VALUES (new.rowid, new.title, COALESCE(new.summary, ''));
|
|
9186
9176
|
END;
|
|
9187
9177
|
|
|
9188
9178
|
CREATE TRIGGER IF NOT EXISTS trig_search_atoms_delete AFTER DELETE ON atoms BEGIN
|
|
@@ -9234,6 +9224,10 @@ var Mnemosyne = class {
|
|
|
9234
9224
|
this.db.pragma("journal_mode = WAL");
|
|
9235
9225
|
this.db.pragma("foreign_keys = ON");
|
|
9236
9226
|
this.db.pragma("synchronous = NORMAL");
|
|
9227
|
+
try {
|
|
9228
|
+
this.db.pragma("wal_checkpoint(TRUNCATE)");
|
|
9229
|
+
} catch {
|
|
9230
|
+
}
|
|
9237
9231
|
this.vecEnabled = false;
|
|
9238
9232
|
try {
|
|
9239
9233
|
let vecPath;
|
|
@@ -9541,7 +9535,7 @@ function getVersion3() {
|
|
|
9541
9535
|
const pkg = JSON.parse(readFileSync8(resolve14(process.cwd(), "package.json"), "utf-8"));
|
|
9542
9536
|
return pkg.version;
|
|
9543
9537
|
} catch {
|
|
9544
|
-
return "2.1.
|
|
9538
|
+
return "2.1.5";
|
|
9545
9539
|
}
|
|
9546
9540
|
}
|
|
9547
9541
|
}
|
|
@@ -10466,8 +10460,7 @@ async function handleSearch(store, pathname, method, res, searchParams) {
|
|
|
10466
10460
|
} else {
|
|
10467
10461
|
results = store.search(projectId, q, limit);
|
|
10468
10462
|
}
|
|
10469
|
-
|
|
10470
|
-
json(res, 200, { query: q, semantic, count: filtered.length, results: filtered });
|
|
10463
|
+
json(res, 200, { query: q, semantic, count: results.length, results });
|
|
10471
10464
|
return true;
|
|
10472
10465
|
}
|
|
10473
10466
|
return false;
|
|
@@ -10677,7 +10670,7 @@ var PKG_VERSION = (() => {
|
|
|
10677
10670
|
const pkg = JSON.parse(__require("fs").readFileSync(__require("path").resolve(__dirname, "../../package.json"), "utf-8"));
|
|
10678
10671
|
return pkg.version;
|
|
10679
10672
|
} catch {
|
|
10680
|
-
return "2.1.
|
|
10673
|
+
return "2.1.5";
|
|
10681
10674
|
}
|
|
10682
10675
|
})();
|
|
10683
10676
|
function handleHealth(store, pathname, method, res) {
|
|
@@ -10923,6 +10916,10 @@ function getDb() {
|
|
|
10923
10916
|
db.pragma("journal_mode = WAL");
|
|
10924
10917
|
db.pragma("foreign_keys = ON");
|
|
10925
10918
|
db.pragma("synchronous = NORMAL");
|
|
10919
|
+
try {
|
|
10920
|
+
db.pragma("wal_checkpoint(TRUNCATE)");
|
|
10921
|
+
} catch {
|
|
10922
|
+
}
|
|
10926
10923
|
try {
|
|
10927
10924
|
const { getLoadablePath } = __require("sqlite-vec");
|
|
10928
10925
|
db.loadExtension(getLoadablePath());
|
|
@@ -11001,7 +10998,7 @@ var MnemosyneServer = class {
|
|
|
11001
10998
|
const wss = new import_websocket_server.default({ server: this.httpServer });
|
|
11002
10999
|
this.wsHandler = new WebSocketHandler(wss, this.store);
|
|
11003
11000
|
}
|
|
11004
|
-
const version = cfg?.server?.version || "2.1.
|
|
11001
|
+
const version = cfg?.server?.version || "2.1.5";
|
|
11005
11002
|
this.httpServer.listen(port, () => {
|
|
11006
11003
|
console.log(`Mnemosyne v${version} \u2014 port ${port}`);
|
|
11007
11004
|
console.log(`Dashboard: http://${host}:${port}/dashboard`);
|
|
@@ -11059,7 +11056,7 @@ function getVersion4() {
|
|
|
11059
11056
|
const { resolve: resolve14 } = __require("path");
|
|
11060
11057
|
return JSON.parse(readFileSync8(resolve14(__dirname, "../../package.json"), "utf-8")).version;
|
|
11061
11058
|
} catch {
|
|
11062
|
-
return "2.1.
|
|
11059
|
+
return "2.1.5";
|
|
11063
11060
|
}
|
|
11064
11061
|
}
|
|
11065
11062
|
async function startCommand(options) {
|
|
@@ -11351,7 +11348,7 @@ program2.name("mnemosyne").description("Mnemosyne \u2014 Your exocortex").versio
|
|
|
11351
11348
|
try {
|
|
11352
11349
|
return require_package().version;
|
|
11353
11350
|
} catch {
|
|
11354
|
-
return "2.1.
|
|
11351
|
+
return "2.1.5";
|
|
11355
11352
|
}
|
|
11356
11353
|
})());
|
|
11357
11354
|
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);
|