multimodemind 0.2.3 → 0.3.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 CHANGED
@@ -8,20 +8,32 @@ Most agent-memory tools ask you to pick a store — a vector database, a key-val
8
8
 
9
9
  ## Design
10
10
 
11
- Multimode Mind is a TypeScript MCP server that sits in front of up to five stores:
11
+ Multimode Mind is a TypeScript MCP server that sits in front of up to five memory stores (plus an append-only audit log):
12
12
 
13
13
  | Store | Backend | Role |
14
14
  |---|---|---|
15
15
  | **markdown** | Plain `.md` files (Obsidian-compatible, vault-agnostic) | Existing notes, read non-destructively |
16
- | **sqlite** | `better-sqlite3` | Structured, queryable memory |
16
+ | **sqlite** | `better-sqlite3` *(or Postgres)* | Structured, queryable memory |
17
17
  | **leveldb** | `level` | Fast key-value session state |
18
18
  | **files** | Flat files + JSON metadata index | Arbitrary document memory |
19
- | **vector** | `vectra` (pure-TS local index) | Semantic search |
19
+ | **vector** | `vectra` *(or pgvector)* | Semantic search |
20
20
 
21
21
  A single router fans out to every available store in parallel, scores each candidate with a blend of vector similarity and keyword relevance, de-duplicates across stores by content fingerprint, and returns a ranked bundle. Every result carries its source, so an agent always knows where a memory came from.
22
22
 
23
23
  **Wrap, don't migrate.** Point Multimode Mind at your existing Markdown vault and it reads it in place — no import step, no lock-in.
24
24
 
25
+ ### Pluggable backends
26
+
27
+ The structured and semantic slots are pluggable. Keep the zero-config local defaults (SQLite + Vectra), or point them at a **Postgres** database you already run — one connection can back both the structured store and, via **pgvector**, the semantic store. Same "wrap, don't migrate" principle, scaled from your notes to your database of record.
28
+
29
+ Select backends in the dashboard (`[b]`) or via environment:
30
+
31
+ ```bash
32
+ MMIND_BACKEND_STRUCTURED=postgres # sqlite | postgres
33
+ MMIND_BACKEND_VECTOR=pgvector # vectra | pgvector
34
+ MMIND_POSTGRES_URL=postgresql://user@host/db # credentials via env, never on disk
35
+ ```
36
+
25
37
  ## Tools
26
38
 
27
39
  The server exposes three MCP tools:
@@ -2,7 +2,7 @@
2
2
  * Dashboard config — persisted to .mmind/config.json
3
3
  * Copyright Old Cart Technology LLC — MIT License
4
4
  */
5
- import { type AccessMode, type StoreType } from '../types.js';
5
+ import { type AccessMode, type BackendConfig, type StoreType } from '../types.js';
6
6
  export interface DashboardConfig {
7
7
  sqlitePath: string;
8
8
  leveldbPath: string;
@@ -11,6 +11,8 @@ export interface DashboardConfig {
11
11
  vaultPath: string | null;
12
12
  /** Per-store read vs read/write. Governs whether the agent may write. */
13
13
  access: Record<StoreType, AccessMode>;
14
+ /** Which engine backs the structured and vector slots. */
15
+ backends: BackendConfig;
14
16
  }
15
17
  export declare function loadConfig(): DashboardConfig;
16
18
  export declare function saveConfig(cfg: DashboardConfig): void;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAkB,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAK9E,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;CACvC;AAWD,wBAAgB,UAAU,IAAI,eAAe,CAa5C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAGrD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAoC,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAKpH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACtC,0DAA0D;IAC1D,QAAQ,EAAE,aAAa,CAAC;CACzB;AAYD,wBAAgB,UAAU,IAAI,eAAe,CAgB5C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAGrD"}
@@ -5,7 +5,7 @@
5
5
  import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
6
6
  import { join } from 'path';
7
7
  import { homedir } from 'os';
8
- import { DEFAULT_ACCESS } from '../types.js';
8
+ import { DEFAULT_ACCESS, DEFAULT_BACKENDS } from '../types.js';
9
9
  const CONFIG_DIR = join(homedir(), '.mmind');
10
10
  const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
11
11
  const DEFAULTS = {
@@ -15,21 +15,24 @@ const DEFAULTS = {
15
15
  vectorIndexPath: join(CONFIG_DIR, 'vector-index'),
16
16
  vaultPath: null,
17
17
  access: { ...DEFAULT_ACCESS },
18
+ backends: { ...DEFAULT_BACKENDS },
18
19
  };
19
20
  export function loadConfig() {
20
- if (!existsSync(CONFIG_FILE))
21
- return { ...DEFAULTS, access: { ...DEFAULT_ACCESS } };
21
+ if (!existsSync(CONFIG_FILE)) {
22
+ return { ...DEFAULTS, access: { ...DEFAULT_ACCESS }, backends: { ...DEFAULT_BACKENDS } };
23
+ }
22
24
  try {
23
25
  const raw = JSON.parse(readFileSync(CONFIG_FILE, 'utf-8'));
24
26
  return {
25
27
  ...DEFAULTS,
26
28
  ...raw,
27
- // Merge access so new store types always get a default even if the file predates them
29
+ // Merge so files that predate a field still get sane defaults
28
30
  access: { ...DEFAULT_ACCESS, ...(raw.access ?? {}) },
31
+ backends: { ...DEFAULT_BACKENDS, ...(raw.backends ?? {}) },
29
32
  };
30
33
  }
31
34
  catch {
32
- return { ...DEFAULTS, access: { ...DEFAULT_ACCESS } };
35
+ return { ...DEFAULTS, access: { ...DEFAULT_ACCESS }, backends: { ...DEFAULT_BACKENDS } };
33
36
  }
34
37
  }
35
38
  export function saveConfig(cfg) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAmC,MAAM,aAAa,CAAC;AAE9E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAYpD,MAAM,QAAQ,GAAoB;IAChC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC;IACzC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;IACxC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;IACpC,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC;IACjD,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE;CAC9B,CAAC;AAEF,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,CAAC;IACpF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAA6B,CAAC;QACvF,OAAO;YACL,GAAG,QAAQ;YACX,GAAG,GAAG;YACN,sFAAsF;YACtF,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE;SACrD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,CAAC;IACxD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAoB;IAC7C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAuD,MAAM,aAAa,CAAC;AAEpH,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAcpD,MAAM,QAAQ,GAAoB;IAChC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC;IACzC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;IACxC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;IACpC,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC;IACjD,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE;IAC7B,QAAQ,EAAE,EAAE,GAAG,gBAAgB,EAAE;CAClC,CAAC;AAEF,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,gBAAgB,EAAE,EAAE,CAAC;IAC3F,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAA6B,CAAC;QACvF,OAAO;YACL,GAAG,QAAQ;YACX,GAAG,GAAG;YACN,8DAA8D;YAC9D,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE;YACpD,QAAQ,EAAE,EAAE,GAAG,gBAAgB,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE;SAC3D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,gBAAgB,EAAE,EAAE,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAoB;IAC7C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/cli/dashboard.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAMH,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAM3E,OAAO,EAAc,KAAK,UAAU,EAAgB,MAAM,oBAAoB,CAAC;AAE/E,OAAO,KAAK,EAAc,UAAU,EAAa,MAAM,aAAa,CAAC;AA+MrE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,SAAK,GAAG,MAAM,EAAE,CAErG;AA4GD,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CA8B5D"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/cli/dashboard.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAMH,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAM3E,OAAO,EAAc,KAAK,UAAU,EAAgB,MAAM,oBAAoB,CAAC;AAK/E,OAAO,KAAK,EAAc,UAAU,EAA+C,MAAM,aAAa,CAAC;AAmOvG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,SAAK,GAAG,MAAM,EAAE,CAErG;AAsHD,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CA8B5D"}
@@ -19,6 +19,9 @@ import { FilesStore } from '../stores/files.js';
19
19
  import { VectorStore } from '../stores/vector.js';
20
20
  import { MarkdownStore } from '../stores/markdown.js';
21
21
  import { AuditStore } from '../stores/audit.js';
22
+ import { PostgresStore } from '../stores/postgres/structured.js';
23
+ import { PgVectorStore } from '../stores/postgres/pgvector.js';
24
+ import { createPgPool, safeConnLabel } from '../stores/postgres/client.js';
22
25
  // ─── Matrix-green palette (truecolor ANSI) ─────────────────────────────────────
23
26
  const G = {
24
27
  bright: '\x1b[38;2;0;255;65m', // #00FF41 — lead / highlights
@@ -181,16 +184,40 @@ function fmtSize(info) {
181
184
  return b + 'B';
182
185
  }
183
186
  // ─── Store factory ────────────────────────────────────────────────────────────
184
- function buildStores(cfg) {
187
+ // A Postgres pool the dashboard opens for live status when a pg backend is
188
+ // selected. Closed and rebuilt whenever the store list is rebuilt.
189
+ let dashPool;
190
+ async function buildStores(cfg) {
191
+ if (dashPool) {
192
+ await dashPool.end().catch(() => { });
193
+ dashPool = undefined;
194
+ }
195
+ const a = cfg.access;
196
+ const url = process.env['MMIND_POSTGRES_URL'];
197
+ const needsPg = cfg.backends.structured === 'postgres' || cfg.backends.vector === 'pgvector';
198
+ if (needsPg && url) {
199
+ try {
200
+ dashPool = await createPgPool(url);
201
+ }
202
+ catch {
203
+ dashPool = undefined;
204
+ }
205
+ }
206
+ const label = url ? safeConnLabel(url) : 'postgres';
207
+ const structured = cfg.backends.structured === 'postgres' && dashPool
208
+ ? new PostgresStore(dashPool, a.sqlite, label)
209
+ : new SqliteStore(cfg.sqlitePath, a.sqlite);
210
+ const vec = cfg.backends.vector === 'pgvector' && dashPool
211
+ ? new PgVectorStore(dashPool, a.vector, label)
212
+ : new VectorStore(cfg.vectorIndexPath, a.vector);
185
213
  // Markdown is a first-class store, always shown — it's the one that wraps
186
214
  // your existing notes in place, so it stays visible even before a vault is set.
187
- const a = cfg.access;
188
215
  return [
189
216
  new MarkdownStore(cfg.vaultPath, a.markdown),
190
- new SqliteStore(cfg.sqlitePath, a.sqlite),
217
+ structured,
191
218
  new LevelDbStore(cfg.leveldbPath, a.leveldb),
192
219
  new FilesStore(cfg.filesPath, a.files),
193
- new VectorStore(cfg.vectorIndexPath, a.vector),
220
+ vec,
194
221
  makeAudit(),
195
222
  ];
196
223
  }
@@ -234,7 +261,7 @@ function renderLines(infos, cfg, message = '') {
234
261
  ? 'no vault — press [5]'
235
262
  : (info.path ?? '(unset)');
236
263
  out.push(cols([
237
- { text: info.type, width: C_STORE, color: G.mid },
264
+ { text: info.backend ?? info.type, width: C_STORE, color: G.mid },
238
265
  { text: fmtStatus(info), width: C_STATUS, color: statusColor(info) },
239
266
  { text: fmtAccess(info), width: C_ACCESS, color: accessColor(info) },
240
267
  { text: info.entryCount?.toString() ?? '—', width: C_ENTRIES, color: G.mid },
@@ -262,6 +289,13 @@ function renderLines(infos, cfg, message = '') {
262
289
  G.dim + fit(val, VAL_W) + G.reset;
263
290
  out.push(line(content));
264
291
  }
292
+ // Backend selection line
293
+ const bStructured = cfg.backends?.structured ?? 'sqlite';
294
+ const bVector = cfg.backends?.vector ?? 'vectra';
295
+ const backendVal = `structured=${bStructured} · vector=${bVector}`;
296
+ out.push(line(G.bright + '[b] ' + G.reset +
297
+ G.green + fit('Backends', LABEL_W) + G.reset +
298
+ G.dim + fit(backendVal, VAL_W) + G.reset));
265
299
  out.push(rule('─'));
266
300
  const footer = G.bright + '[a]' + G.reset + G.green + ' Access ' + G.reset +
267
301
  G.bright + '[l]' + G.reset + G.green + ' Log ' + G.reset +
@@ -360,12 +394,14 @@ async function main() {
360
394
  process.stdout.write(G.hideCur);
361
395
  const cleanup = () => {
362
396
  process.stdout.write(G.showCur + G.reset + '\n');
397
+ if (dashPool)
398
+ dashPool.end().catch(() => { });
363
399
  process.exit(0);
364
400
  };
365
401
  process.on('SIGINT', cleanup);
366
402
  process.on('SIGTERM', cleanup);
367
403
  let cfg = loadConfig();
368
- let stores = buildStores(cfg);
404
+ let stores = await buildStores(cfg);
369
405
  let message = '';
370
406
  process.stdout.write(G.clear + '\n ' + G.mid + 'Loading store status…' + G.reset + '\n');
371
407
  let infos = await fetchStatus(stores);
@@ -393,7 +429,7 @@ async function main() {
393
429
  }
394
430
  if (key === 'r') {
395
431
  await Promise.allSettled(stores.map(s => s.close()));
396
- stores = buildStores(cfg);
432
+ stores = await buildStores(cfg);
397
433
  infos = await fetchStatus(stores);
398
434
  message = 'Status refreshed.';
399
435
  continue;
@@ -437,11 +473,30 @@ async function main() {
437
473
  cfg.access[st] = next;
438
474
  saveConfig(cfg);
439
475
  await Promise.allSettled(stores.map(s => s.close()));
440
- stores = buildStores(cfg);
476
+ stores = await buildStores(cfg);
441
477
  infos = await fetchStatus(stores);
442
478
  message = `${st} is now ${next === 'read' ? 'read-only' : 'read/write'}.`;
443
479
  continue;
444
480
  }
481
+ if (key === 'b') {
482
+ const sPick = await prompt('Structured backend — [1] sqlite (local) [2] postgres:');
483
+ if (sPick === '1' || sPick === '2') {
484
+ cfg.backends.structured = (sPick === '2' ? 'postgres' : 'sqlite');
485
+ }
486
+ const vPick = await prompt('Vector backend — [1] vectra (local) [2] pgvector:');
487
+ if (vPick === '1' || vPick === '2') {
488
+ cfg.backends.vector = (vPick === '2' ? 'pgvector' : 'vectra');
489
+ }
490
+ saveConfig(cfg);
491
+ await Promise.allSettled(stores.map(s => s.close()));
492
+ stores = await buildStores(cfg);
493
+ infos = await fetchStatus(stores);
494
+ const usingPg = cfg.backends.structured === 'postgres' || cfg.backends.vector === 'pgvector';
495
+ message = usingPg && !process.env['MMIND_POSTGRES_URL']
496
+ ? 'Saved. Set MMIND_POSTGRES_URL in the server env to connect Postgres.'
497
+ : `Saved: structured=${cfg.backends.structured}, vector=${cfg.backends.vector}.`;
498
+ continue;
499
+ }
445
500
  const field = fields[key];
446
501
  if (field) {
447
502
  const current = cfg[field] ?? '';
@@ -451,7 +506,7 @@ async function main() {
451
506
  val === '-' || val.toLowerCase() === 'none' ? null : val;
452
507
  saveConfig(cfg);
453
508
  await Promise.allSettled(stores.map(s => s.close()));
454
- stores = buildStores(cfg);
509
+ stores = await buildStores(cfg);
455
510
  infos = await fetchStatus(stores);
456
511
  message = `Saved ${field}.`;
457
512
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/cli/dashboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/cli/dashboard.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -15,11 +15,11 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
15
15
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
16
16
  import { createEmbeddingProvider } from './embeddings/index.js';
17
17
  import { RetrieveRouter } from './router/index.js';
18
- import { SqliteStore, LevelDbStore, MarkdownStore, FilesStore, VectorStore, AuditStore, } from './stores/index.js';
18
+ import { SqliteStore, LevelDbStore, MarkdownStore, FilesStore, VectorStore, AuditStore, PostgresStore, PgVectorStore, createPgPool, safeConnLabel, } from './stores/index.js';
19
19
  import { registerRetrieveTool } from './tools/retrieve.js';
20
20
  import { registerStoreTool } from './tools/store.js';
21
21
  import { registerSourcesTool } from './tools/sources.js';
22
- import { DEFAULT_ACCESS } from './types.js';
22
+ import { DEFAULT_ACCESS, DEFAULT_BACKENDS, } from './types.js';
23
23
  // ─── Config from environment ──────────────────────────────────────────────────
24
24
  // Store data lives under ~/.mmind by default so the server works no matter
25
25
  // which directory it is launched from (MCP clients set an arbitrary cwd).
@@ -35,19 +35,49 @@ function pkgVersion() {
35
35
  }
36
36
  }
37
37
  /**
38
- * Load per-store access modes from the dashboard config (~/.mmind/config.json)
39
- * so read/write permissions set in the dashboard actually govern the running
40
- * agent. Falls back to conservative defaults when no config exists.
38
+ * Load per-store access modes. Precedence (lowest highest):
39
+ * built-in defaults → ~/.mmind/config.json → MMIND_ACCESS_<STORE> env vars
40
+ * Env overrides let an MCP client config (or a deterministic test) pin
41
+ * permissions regardless of what the dashboard has saved.
41
42
  */
42
43
  function loadAccess() {
44
+ const map = { ...DEFAULT_ACCESS };
43
45
  try {
44
46
  const p = join(HOME_MMIND, 'config.json');
45
47
  const cfg = JSON.parse(readFileSync(p, 'utf-8'));
46
- return { ...DEFAULT_ACCESS, ...(cfg.access ?? {}) };
48
+ Object.assign(map, cfg.access ?? {});
47
49
  }
48
50
  catch {
49
- return { ...DEFAULT_ACCESS };
51
+ /* no config — keep defaults */
50
52
  }
53
+ for (const st of Object.keys(map)) {
54
+ const v = process.env[`MMIND_ACCESS_${st.toUpperCase()}`];
55
+ if (v === 'read' || v === 'readwrite')
56
+ map[st] = v;
57
+ }
58
+ return map;
59
+ }
60
+ /**
61
+ * Which engine backs each pluggable slot. Precedence:
62
+ * defaults → ~/.mmind/config.json → MMIND_BACKEND_* env vars.
63
+ */
64
+ function loadBackends() {
65
+ const b = { ...DEFAULT_BACKENDS };
66
+ try {
67
+ const p = join(HOME_MMIND, 'config.json');
68
+ const cfg = JSON.parse(readFileSync(p, 'utf-8'));
69
+ Object.assign(b, cfg.backends ?? {});
70
+ }
71
+ catch {
72
+ /* defaults */
73
+ }
74
+ const s = process.env['MMIND_BACKEND_STRUCTURED'];
75
+ if (s === 'sqlite' || s === 'postgres')
76
+ b.structured = s;
77
+ const v = process.env['MMIND_BACKEND_VECTOR'];
78
+ if (v === 'vectra' || v === 'pgvector')
79
+ b.vector = v;
80
+ return b;
51
81
  }
52
82
  function loadConfig() {
53
83
  // Vault path may be passed as the first positional argument, e.g.
@@ -68,12 +98,39 @@ function loadConfig() {
68
98
  async function main() {
69
99
  const config = loadConfig();
70
100
  const access = loadAccess();
71
- // Build the store list — markdown vault is optional
101
+ const backends = loadBackends();
102
+ // If a Postgres-backed slot is selected, open ONE shared pool that both the
103
+ // structured and vector stores reuse — "one connection covers both".
104
+ let pgPool;
105
+ const needsPg = backends.structured === 'postgres' || backends.vector === 'pgvector';
106
+ if (needsPg) {
107
+ const url = process.env['MMIND_POSTGRES_URL'];
108
+ if (url) {
109
+ try {
110
+ pgPool = await createPgPool(url);
111
+ console.error(`[mmind] postgres: connected to ${safeConnLabel(url)}`);
112
+ }
113
+ catch (err) {
114
+ console.error('[mmind] postgres: failed to connect —', err);
115
+ }
116
+ }
117
+ else {
118
+ console.error('[mmind] a postgres backend is selected but MMIND_POSTGRES_URL is not set — falling back to local stores');
119
+ }
120
+ }
121
+ // Structured slot: Postgres if selected and connected, else local SQLite.
122
+ const structuredStore = backends.structured === 'postgres' && pgPool
123
+ ? new PostgresStore(pgPool, access.sqlite, safeConnLabel(process.env['MMIND_POSTGRES_URL'] ?? ''))
124
+ : new SqliteStore(config.sqlitePath, access.sqlite);
125
+ // Vector slot: pgvector if selected and connected, else local Vectra.
126
+ const vectorStore = backends.vector === 'pgvector' && pgPool
127
+ ? new PgVectorStore(pgPool, access.vector, safeConnLabel(process.env['MMIND_POSTGRES_URL'] ?? ''))
128
+ : new VectorStore(config.vectorIndexPath, access.vector);
72
129
  const stores = [
73
- new SqliteStore(config.sqlitePath, access.sqlite),
130
+ structuredStore,
74
131
  new LevelDbStore(config.leveldbPath, access.leveldb),
75
132
  new FilesStore(config.filesPath, access.files),
76
- new VectorStore(config.vectorIndexPath, access.vector),
133
+ vectorStore,
77
134
  ];
78
135
  if (config.vaultPath) {
79
136
  stores.push(new MarkdownStore(config.vaultPath, access.markdown));
@@ -111,6 +168,8 @@ async function main() {
111
168
  // Graceful shutdown
112
169
  const shutdown = async () => {
113
170
  await Promise.allSettled(stores.map((s) => s.close()));
171
+ if (pgPool)
172
+ await pgPool.end().catch(() => { });
114
173
  process.exit(0);
115
174
  };
116
175
  process.on('SIGINT', shutdown);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,7 @@ export { MarkdownStore } from './markdown.js';
5
5
  export { FilesStore } from './files.js';
6
6
  export { VectorStore } from './vector.js';
7
7
  export { AuditStore, type AuditEvent, type AuditOp } from './audit.js';
8
+ export { PostgresStore } from './postgres/structured.js';
9
+ export { PgVectorStore } from './postgres/pgvector.js';
10
+ export { createPgPool, safeConnLabel, type SqlClient, type SqlPool } from './postgres/client.js';
8
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC"}
@@ -4,4 +4,7 @@ export { MarkdownStore } from './markdown.js';
4
4
  export { FilesStore } from './files.js';
5
5
  export { VectorStore } from './vector.js';
6
6
  export { AuditStore } from './audit.js';
7
+ export { PostgresStore } from './postgres/structured.js';
8
+ export { PgVectorStore } from './postgres/pgvector.js';
9
+ export { createPgPool, safeConnLabel } from './postgres/client.js';
7
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAiC,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAiC,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAgC,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Minimal SQL client abstraction shared by the Postgres-backed stores.
3
+ *
4
+ * Both `pg` (node-postgres, production — connects to your real Postgres server)
5
+ * and pglite (embedded Postgres, used in tests) satisfy this interface, so one
6
+ * adapter works against either.
7
+ *
8
+ * Copyright Old Cart Technology LLC — MIT License
9
+ */
10
+ export interface SqlClient {
11
+ query(text: string, params?: unknown[]): Promise<{
12
+ rows: any[];
13
+ }>;
14
+ }
15
+ /** A closable pool (production pg). */
16
+ export interface SqlPool extends SqlClient {
17
+ end(): Promise<void>;
18
+ }
19
+ /**
20
+ * Build a production Postgres connection pool from a connection string.
21
+ * The connection string is read from the MMIND_POSTGRES_URL environment
22
+ * variable — never stored on disk — so database credentials stay out of config.
23
+ */
24
+ export declare function createPgPool(connectionString: string): Promise<SqlPool>;
25
+ /** Redact credentials from a connection string for display (host/db only). */
26
+ export declare function safeConnLabel(connectionString: string): string;
27
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/stores/postgres/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAAC;CACnE;AAED,uCAAuC;AACvC,MAAM,WAAW,OAAQ,SAAQ,SAAS;IACxC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI7E;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAQ9D"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Minimal SQL client abstraction shared by the Postgres-backed stores.
3
+ *
4
+ * Both `pg` (node-postgres, production — connects to your real Postgres server)
5
+ * and pglite (embedded Postgres, used in tests) satisfy this interface, so one
6
+ * adapter works against either.
7
+ *
8
+ * Copyright Old Cart Technology LLC — MIT License
9
+ */
10
+ /**
11
+ * Build a production Postgres connection pool from a connection string.
12
+ * The connection string is read from the MMIND_POSTGRES_URL environment
13
+ * variable — never stored on disk — so database credentials stay out of config.
14
+ */
15
+ export async function createPgPool(connectionString) {
16
+ const pg = (await import('pg')).default;
17
+ const pool = new pg.Pool({ connectionString, max: 4, connectionTimeoutMillis: 8000 });
18
+ return pool;
19
+ }
20
+ /** Redact credentials from a connection string for display (host/db only). */
21
+ export function safeConnLabel(connectionString) {
22
+ try {
23
+ const u = new URL(connectionString);
24
+ const db = u.pathname.replace(/^\//, '');
25
+ return `${u.hostname}${u.port ? ':' + u.port : ''}/${db || '?'}`;
26
+ }
27
+ catch {
28
+ return 'postgres';
29
+ }
30
+ }
31
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/stores/postgres/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,gBAAwB;IACzD,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,CAAC;IACtF,OAAO,IAA0B,CAAC;AACpC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,gBAAwB;IACpD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAC;IACpB,CAAC;AACH,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * pgvector-backed semantic store — an alternative to the local Vectra index.
3
+ * Shares the same Postgres connection as the structured store, so one database
4
+ * can serve both your structured memory and your embeddings.
5
+ *
6
+ * Occupies the 'vector' slot. Requires the pgvector extension.
7
+ *
8
+ * Copyright Old Cart Technology LLC — MIT License
9
+ */
10
+ import type { AccessMode, MemoryEntry, RankedEntry, SourceInfo } from '../../types.js';
11
+ import type { MemoryStore } from '../base.js';
12
+ import type { SqlClient } from './client.js';
13
+ export declare class PgVectorStore implements MemoryStore {
14
+ private readonly db;
15
+ private readonly label;
16
+ readonly type: 'vector';
17
+ readonly name: string;
18
+ readonly access: AccessMode;
19
+ private ready;
20
+ constructor(db: SqlClient, access?: AccessMode, label?: string);
21
+ private ensure;
22
+ isAvailable(): Promise<boolean>;
23
+ search(query: string, embedding: number[], limit: number): Promise<RankedEntry[]>;
24
+ store(entry: Omit<MemoryEntry, 'id' | 'createdAt' | 'updatedAt'>): Promise<string>;
25
+ get(id: string): Promise<MemoryEntry | null>;
26
+ sources(): Promise<SourceInfo>;
27
+ close(): Promise<void>;
28
+ }
29
+ //# sourceMappingURL=pgvector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pgvector.d.ts","sourceRoot":"","sources":["../../../src/stores/postgres/pgvector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAK7C,qBAAa,aAAc,YAAW,WAAW;IAQ7C,OAAO,CAAC,QAAQ,CAAC,EAAE;IAEnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IATxB,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAE5B,OAAO,CAAC,KAAK,CAAS;IAEtB,YACmB,EAAE,EAAE,SAAS,EAC9B,MAAM,GAAE,UAAwB,EACf,KAAK,SAAa,EAIpC;YAEa,MAAM;IAWd,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAOpC;IAEK,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAiBtF;IAEK,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAcvF;IAEK,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAKjD;IAEK,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,CAgBnC;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * pgvector-backed semantic store — an alternative to the local Vectra index.
3
+ * Shares the same Postgres connection as the structured store, so one database
4
+ * can serve both your structured memory and your embeddings.
5
+ *
6
+ * Occupies the 'vector' slot. Requires the pgvector extension.
7
+ *
8
+ * Copyright Old Cart Technology LLC — MIT License
9
+ */
10
+ import { newId, nowIso, assertWritable } from '../utils.js';
11
+ const TABLE = 'mmind_vectors';
12
+ export class PgVectorStore {
13
+ db;
14
+ label;
15
+ type = 'vector';
16
+ name;
17
+ access;
18
+ ready = false;
19
+ constructor(db, access = 'readwrite', label = 'postgres') {
20
+ this.db = db;
21
+ this.label = label;
22
+ this.access = access;
23
+ this.name = `pgvector:${label}`;
24
+ }
25
+ async ensure() {
26
+ if (this.ready)
27
+ return;
28
+ await this.db.query('CREATE EXTENSION IF NOT EXISTS vector');
29
+ // Variable-dimension column so different embedding providers can coexist;
30
+ // queries filter to matching dimensions.
31
+ await this.db.query(`CREATE TABLE IF NOT EXISTS ${TABLE} (id text PRIMARY KEY, data jsonb NOT NULL, embedding vector)`);
32
+ this.ready = true;
33
+ }
34
+ async isAvailable() {
35
+ try {
36
+ await this.ensure();
37
+ return true;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ async search(query, embedding, limit) {
44
+ if (embedding.length === 0)
45
+ return [];
46
+ await this.ensure();
47
+ const vec = toVector(embedding);
48
+ const { rows } = await this.db.query(`SELECT data, 1 - (embedding <=> $1) AS score
49
+ FROM ${TABLE}
50
+ WHERE vector_dims(embedding) = vector_dims($1::vector)
51
+ ORDER BY embedding <=> $1
52
+ LIMIT $2`, [vec, limit]);
53
+ return rows.map((r) => ({
54
+ entry: (typeof r.data === 'string' ? JSON.parse(r.data) : r.data),
55
+ score: Number(r.score),
56
+ source: this.name,
57
+ }));
58
+ }
59
+ async store(entry) {
60
+ assertWritable(this.type, this.access);
61
+ if (!entry.embedding || entry.embedding.length === 0) {
62
+ throw new Error('PgVectorStore requires an embedding to store an entry');
63
+ }
64
+ await this.ensure();
65
+ const id = newId();
66
+ const now = nowIso();
67
+ const full = { ...entry, id, createdAt: now, updatedAt: now };
68
+ await this.db.query(`INSERT INTO ${TABLE} (id, data, embedding) VALUES ($1, $2, $3)`, [id, JSON.stringify(full), toVector(entry.embedding)]);
69
+ return id;
70
+ }
71
+ async get(id) {
72
+ await this.ensure();
73
+ const { rows } = await this.db.query(`SELECT data FROM ${TABLE} WHERE id = $1`, [id]);
74
+ if (!rows[0])
75
+ return null;
76
+ return (typeof rows[0].data === 'string' ? JSON.parse(rows[0].data) : rows[0].data);
77
+ }
78
+ async sources() {
79
+ try {
80
+ await this.ensure();
81
+ const { rows } = await this.db.query(`SELECT COUNT(*)::int AS n FROM ${TABLE}`);
82
+ return {
83
+ type: this.type,
84
+ name: this.name,
85
+ available: true,
86
+ access: this.access,
87
+ backend: 'pgvector',
88
+ path: this.label,
89
+ entryCount: rows[0].n,
90
+ };
91
+ }
92
+ catch (err) {
93
+ return { type: this.type, name: this.name, available: false, backend: 'pgvector', error: String(err) };
94
+ }
95
+ }
96
+ async close() {
97
+ // Pool lifecycle is owned by the caller (shared across stores).
98
+ }
99
+ }
100
+ function toVector(a) {
101
+ return '[' + a.join(',') + ']';
102
+ }
103
+ //# sourceMappingURL=pgvector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pgvector.js","sourceRoot":"","sources":["../../../src/stores/postgres/pgvector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Postgres-backed structured store — an alternative to the local SQLite file.
3
+ * Point it at your existing Postgres and mmind wraps it in place: read under
4
+ * permissions you set, every access audited, nothing migrated.
5
+ *
6
+ * Occupies the 'sqlite' (structured) slot, so permissions/audit key on it
7
+ * exactly as the SQLite store would.
8
+ *
9
+ * Copyright Old Cart Technology LLC — MIT License
10
+ */
11
+ import type { AccessMode, MemoryEntry, RankedEntry, SourceInfo } from '../../types.js';
12
+ import type { MemoryStore } from '../base.js';
13
+ import type { SqlClient } from './client.js';
14
+ export declare class PostgresStore implements MemoryStore {
15
+ private readonly db;
16
+ private readonly label;
17
+ readonly type: 'sqlite';
18
+ readonly name: string;
19
+ readonly access: AccessMode;
20
+ private ready;
21
+ constructor(db: SqlClient, access?: AccessMode, label?: string);
22
+ private ensure;
23
+ isAvailable(): Promise<boolean>;
24
+ search(query: string, embedding: number[], limit: number): Promise<RankedEntry[]>;
25
+ store(entry: Omit<MemoryEntry, 'id' | 'createdAt' | 'updatedAt'>): Promise<string>;
26
+ get(id: string): Promise<MemoryEntry | null>;
27
+ sources(): Promise<SourceInfo>;
28
+ close(): Promise<void>;
29
+ }
30
+ //# sourceMappingURL=structured.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured.d.ts","sourceRoot":"","sources":["../../../src/stores/postgres/structured.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAK7C,qBAAa,aAAc,YAAW,WAAW;IAQ7C,OAAO,CAAC,QAAQ,CAAC,EAAE;IAEnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IATxB,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAE5B,OAAO,CAAC,KAAK,CAAS;IAEtB,YACmB,EAAE,EAAE,SAAS,EAC9B,MAAM,GAAE,UAAwB,EACf,KAAK,SAAa,EAIpC;YAEa,MAAM;IAed,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAQpC;IAEK,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAmBtF;IAEK,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBvF;IAEK,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAIjD;IAEK,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,CAgBnC;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Postgres-backed structured store — an alternative to the local SQLite file.
3
+ * Point it at your existing Postgres and mmind wraps it in place: read under
4
+ * permissions you set, every access audited, nothing migrated.
5
+ *
6
+ * Occupies the 'sqlite' (structured) slot, so permissions/audit key on it
7
+ * exactly as the SQLite store would.
8
+ *
9
+ * Copyright Old Cart Technology LLC — MIT License
10
+ */
11
+ import { newId, nowIso, cosineSimilarity, keywordScore, assertWritable } from '../utils.js';
12
+ const TABLE = 'mmind_entries';
13
+ export class PostgresStore {
14
+ db;
15
+ label;
16
+ type = 'sqlite'; // structured slot
17
+ name;
18
+ access;
19
+ ready = false;
20
+ constructor(db, access = 'readwrite', label = 'postgres') {
21
+ this.db = db;
22
+ this.label = label;
23
+ this.access = access;
24
+ this.name = `postgres:${label}`;
25
+ }
26
+ async ensure() {
27
+ if (this.ready)
28
+ return;
29
+ await this.db.query(`
30
+ CREATE TABLE IF NOT EXISTS ${TABLE} (
31
+ id text PRIMARY KEY,
32
+ content text NOT NULL,
33
+ metadata jsonb NOT NULL DEFAULT '{}',
34
+ store_type text NOT NULL DEFAULT 'sqlite',
35
+ created_at timestamptz NOT NULL DEFAULT now(),
36
+ updated_at timestamptz NOT NULL DEFAULT now(),
37
+ embedding jsonb
38
+ )`);
39
+ this.ready = true;
40
+ }
41
+ async isAvailable() {
42
+ try {
43
+ await this.db.query('SELECT 1');
44
+ await this.ensure();
45
+ return true;
46
+ }
47
+ catch {
48
+ return false;
49
+ }
50
+ }
51
+ async search(query, embedding, limit) {
52
+ await this.ensure();
53
+ const { rows } = await this.db.query(`SELECT * FROM ${TABLE} ORDER BY created_at DESC LIMIT $1`, [Math.min(limit * 10, 500)]);
54
+ return rows
55
+ .map((row) => {
56
+ const entry = rowToEntry(row);
57
+ const vecScore = embedding.length > 0 && entry.embedding
58
+ ? cosineSimilarity(embedding, entry.embedding)
59
+ : 0;
60
+ const kwScore = keywordScore(entry.content, query);
61
+ const score = embedding.length > 0 ? vecScore * 0.7 + kwScore * 0.3 : kwScore;
62
+ return { entry, score, source: this.name };
63
+ })
64
+ .filter((r) => r.score > 0)
65
+ .sort((a, b) => b.score - a.score)
66
+ .slice(0, limit);
67
+ }
68
+ async store(entry) {
69
+ assertWritable(this.type, this.access);
70
+ await this.ensure();
71
+ const id = newId();
72
+ const now = nowIso();
73
+ await this.db.query(`INSERT INTO ${TABLE} (id, content, metadata, store_type, created_at, updated_at, embedding)
74
+ VALUES ($1, $2, $3, $4, $5, $6, $7)`, [
75
+ id,
76
+ entry.content,
77
+ JSON.stringify(entry.metadata),
78
+ entry.storeType,
79
+ now,
80
+ now,
81
+ entry.embedding ? JSON.stringify(entry.embedding) : null,
82
+ ]);
83
+ return id;
84
+ }
85
+ async get(id) {
86
+ await this.ensure();
87
+ const { rows } = await this.db.query(`SELECT * FROM ${TABLE} WHERE id = $1`, [id]);
88
+ return rows[0] ? rowToEntry(rows[0]) : null;
89
+ }
90
+ async sources() {
91
+ try {
92
+ await this.ensure();
93
+ const { rows } = await this.db.query(`SELECT COUNT(*)::int AS n FROM ${TABLE}`);
94
+ return {
95
+ type: this.type,
96
+ name: this.name,
97
+ available: true,
98
+ access: this.access,
99
+ backend: 'postgres',
100
+ path: this.label,
101
+ entryCount: rows[0].n,
102
+ };
103
+ }
104
+ catch (err) {
105
+ return { type: this.type, name: this.name, available: false, backend: 'postgres', error: String(err) };
106
+ }
107
+ }
108
+ async close() {
109
+ // Pool lifecycle is owned by the caller (shared across stores).
110
+ }
111
+ }
112
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
113
+ function rowToEntry(r) {
114
+ const meta = typeof r.metadata === 'string' ? JSON.parse(r.metadata) : (r.metadata ?? {});
115
+ const emb = r.embedding == null
116
+ ? undefined
117
+ : (typeof r.embedding === 'string' ? JSON.parse(r.embedding) : r.embedding);
118
+ const iso = (v) => (v instanceof Date ? v.toISOString() : String(v));
119
+ return {
120
+ id: r.id,
121
+ content: r.content,
122
+ metadata: meta,
123
+ storeType: r.store_type,
124
+ createdAt: iso(r.created_at),
125
+ updatedAt: iso(r.updated_at),
126
+ embedding: emb,
127
+ };
128
+ }
129
+ //# sourceMappingURL=structured.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured.js","sourceRoot":"","sources":["../../../src/stores/postgres/structured.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -12,6 +12,16 @@ export type AccessMode = 'read' | 'readwrite';
12
12
  * store is user-configurable from the dashboard.
13
13
  */
14
14
  export declare const DEFAULT_ACCESS: Record<StoreType, AccessMode>;
15
+ /** Engine backing the structured slot. */
16
+ export type StructuredBackend = 'sqlite' | 'postgres';
17
+ /** Engine backing the semantic (vector) slot. */
18
+ export type VectorBackend = 'vectra' | 'pgvector';
19
+ export interface BackendConfig {
20
+ structured: StructuredBackend;
21
+ vector: VectorBackend;
22
+ }
23
+ /** Local-first defaults — file-based, zero-config, nothing leaves the machine. */
24
+ export declare const DEFAULT_BACKENDS: BackendConfig;
15
25
  export interface MemoryEntry {
16
26
  id: string;
17
27
  content: string;
@@ -52,6 +62,10 @@ export interface SourceInfo {
52
62
  unconfigured?: boolean;
53
63
  /** Whether the agent may write to this store, or only read from it. */
54
64
  access?: AccessMode;
65
+ /** Concrete engine behind this store slot (e.g. 'sqlite', 'postgres',
66
+ * 'vectra', 'pgvector', 'leveldb'). Lets the dashboard show what's really
67
+ * running while the slot's type stays stable for permissions/audit. */
68
+ backend?: string;
55
69
  path?: string;
56
70
  entryCount?: number;
57
71
  sizeBytes?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAIzF,oEAAoE;AACpE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,WAAW,CAAC;AAE9C;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU,CAOxD,CAAC;AAIF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAID,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED,yCAAyC;AACzC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB;6EACyE;IACzE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;wFACoF;IACpF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,mBAAmB;IAClC,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAIzF,oEAAoE;AACpE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,WAAW,CAAC;AAE9C;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU,CAOxD,CAAC;AAIF,0CAA0C;AAC1C,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAAC;AACtD,iDAAiD;AACjD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,CAAC;AAElD,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,EAAE,aAG9B,CAAC;AAIF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAID,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED,yCAAyC;AACzC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB;6EACyE;IACzE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;wFACoF;IACpF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB;;4EAEwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,mBAAmB;IAClC,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
package/dist/types.js CHANGED
@@ -16,4 +16,9 @@ export const DEFAULT_ACCESS = {
16
16
  vector: 'readwrite',
17
17
  audit: 'read', // append-only, system-managed; the agent can never write to it
18
18
  };
19
+ /** Local-first defaults — file-based, zero-config, nothing leaves the machine. */
20
+ export const DEFAULT_BACKENDS = {
21
+ structured: 'sqlite',
22
+ vector: 'vectra',
23
+ };
19
24
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAkC;IAC3D,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,WAAW;IACpB,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,MAAM,EAAE,+DAA+D;CAC/E,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAkC;IAC3D,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,WAAW;IACpB,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,MAAM,EAAE,+DAA+D;CAC/E,CAAC;AAcF,kFAAkF;AAClF,MAAM,CAAC,MAAM,gBAAgB,GAAkB;IAC7C,UAAU,EAAE,QAAQ;IACpB,MAAM,EAAE,QAAQ;CACjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "multimodemind",
3
- "version": "0.2.3",
3
+ "version": "0.3.0",
4
4
  "description": "Multi-store memory layer for AI agents, exposed over MCP",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -47,6 +47,7 @@
47
47
  "gray-matter": "^4.0.3",
48
48
  "level": "^10.0.0",
49
49
  "openai": "^6.48.0",
50
+ "pg": "^8.22.0",
50
51
  "vectra": "^0.15.0",
51
52
  "zod": "^4.4.3"
52
53
  },
@@ -54,8 +55,10 @@
54
55
  "adm-zip": ">=0.6.0"
55
56
  },
56
57
  "devDependencies": {
58
+ "@electric-sql/pglite": "^0.2.17",
57
59
  "@types/better-sqlite3": "^7.6.13",
58
60
  "@types/node": "^26.1.1",
61
+ "@types/pg": "^8.20.0",
59
62
  "tsx": "^4.23.1",
60
63
  "typescript": "^7.0.2",
61
64
  "vitest": "^4.1.10"