multimodemind 0.1.3 → 0.2.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/dist/cli/config.d.ts +3 -0
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +11 -3
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/dashboard.d.ts +2 -0
- package/dist/cli/dashboard.d.ts.map +1 -1
- package/dist/cli/dashboard.js +130 -30
- package/dist/cli/dashboard.js.map +1 -1
- package/dist/index.js +30 -9
- package/dist/index.js.map +1 -1
- package/dist/router/index.d.ts +3 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +7 -1
- package/dist/router/index.js.map +1 -1
- package/dist/stores/audit.d.ts +45 -0
- package/dist/stores/audit.d.ts.map +1 -0
- package/dist/stores/audit.js +104 -0
- package/dist/stores/audit.js.map +1 -0
- package/dist/stores/base.d.ts +3 -1
- package/dist/stores/base.d.ts.map +1 -1
- package/dist/stores/files.d.ts +3 -2
- package/dist/stores/files.d.ts.map +1 -1
- package/dist/stores/files.js +6 -2
- package/dist/stores/files.js.map +1 -1
- package/dist/stores/index.d.ts +1 -0
- package/dist/stores/index.d.ts.map +1 -1
- package/dist/stores/index.js +1 -0
- package/dist/stores/index.js.map +1 -1
- package/dist/stores/leveldb.d.ts +3 -2
- package/dist/stores/leveldb.d.ts.map +1 -1
- package/dist/stores/leveldb.js +7 -2
- package/dist/stores/leveldb.js.map +1 -1
- package/dist/stores/markdown.d.ts +5 -2
- package/dist/stores/markdown.d.ts.map +1 -1
- package/dist/stores/markdown.js +26 -4
- package/dist/stores/markdown.js.map +1 -1
- package/dist/stores/sqlite.d.ts +3 -2
- package/dist/stores/sqlite.d.ts.map +1 -1
- package/dist/stores/sqlite.js +6 -2
- package/dist/stores/sqlite.js.map +1 -1
- package/dist/stores/utils.d.ts +6 -0
- package/dist/stores/utils.d.ts.map +1 -1
- package/dist/stores/utils.js +9 -0
- package/dist/stores/utils.js.map +1 -1
- package/dist/stores/vector.d.ts +3 -2
- package/dist/stores/vector.d.ts.map +1 -1
- package/dist/stores/vector.js +6 -2
- package/dist/stores/vector.js.map +1 -1
- package/dist/tools/sources.d.ts.map +1 -1
- package/dist/tools/sources.js +4 -1
- package/dist/tools/sources.js.map +1 -1
- package/dist/tools/store.d.ts +2 -1
- package/dist/tools/store.d.ts.map +1 -1
- package/dist/tools/store.js +33 -7
- package/dist/tools/store.js.map +1 -1
- package/dist/types.d.ts +15 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +14 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -1
package/dist/stores/utils.js
CHANGED
|
@@ -3,6 +3,15 @@
|
|
|
3
3
|
* Copyright Old Cart Technology LLC — MIT License
|
|
4
4
|
*/
|
|
5
5
|
import { randomUUID } from 'crypto';
|
|
6
|
+
/**
|
|
7
|
+
* Throw a clear, consistent error when a write is attempted on a read-only store.
|
|
8
|
+
* Call at the top of every store()/mutating method.
|
|
9
|
+
*/
|
|
10
|
+
export function assertWritable(type, access) {
|
|
11
|
+
if (access === 'read') {
|
|
12
|
+
throw new Error(`The ${type} store is read-only. Enable read/write for it in the dashboard to allow the agent to store here.`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
6
15
|
export function newId() {
|
|
7
16
|
return randomUUID();
|
|
8
17
|
}
|
package/dist/stores/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/stores/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/stores/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGpC;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAe,EAAE,MAAkB;IAChE,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,OAAO,IAAI,kGAAkG,CAC9G,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAW,EAAE,CAAW;IACvD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IACxE,IAAI,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACtB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IACxB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,KAAa;IACzD,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5D,OAAO,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAC9B,CAAC"}
|
package/dist/stores/vector.d.ts
CHANGED
|
@@ -7,14 +7,15 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Copyright Old Cart Technology LLC — MIT License
|
|
9
9
|
*/
|
|
10
|
-
import type { MemoryEntry, RankedEntry, SourceInfo } from '../types.js';
|
|
10
|
+
import type { AccessMode, MemoryEntry, RankedEntry, SourceInfo } from '../types.js';
|
|
11
11
|
import type { MemoryStore } from './base.js';
|
|
12
12
|
export declare class VectorStore implements MemoryStore {
|
|
13
13
|
readonly type: 'vector';
|
|
14
14
|
readonly name: string;
|
|
15
15
|
private index;
|
|
16
16
|
private readonly indexPath;
|
|
17
|
-
|
|
17
|
+
readonly access: AccessMode;
|
|
18
|
+
constructor(indexPath?: string, access?: AccessMode);
|
|
18
19
|
private getIndex;
|
|
19
20
|
isAvailable(): Promise<boolean>;
|
|
20
21
|
search(query: string, embedding: number[], limit: number): Promise<RankedEntry[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector.d.ts","sourceRoot":"","sources":["../../src/stores/vector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"vector.d.ts","sourceRoot":"","sources":["../../src/stores/vector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAS7C,qBAAa,WAAY,YAAW,WAAW;IAC7C,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAE5B,YAAY,SAAS,SAAe,EAAE,MAAM,GAAE,UAAwB,EAIrE;YAEa,QAAQ;IAShB,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,CAkBtF;IAEK,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAevF;IAEK,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CASjD;IAEK,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,CAenC;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
|
package/dist/stores/vector.js
CHANGED
|
@@ -8,15 +8,17 @@
|
|
|
8
8
|
* Copyright Old Cart Technology LLC — MIT License
|
|
9
9
|
*/
|
|
10
10
|
import { LocalIndex } from 'vectra';
|
|
11
|
-
import { newId, nowIso } from './utils.js';
|
|
11
|
+
import { newId, nowIso, assertWritable } from './utils.js';
|
|
12
12
|
const DEFAULT_PATH = '.mmind/vector-index';
|
|
13
13
|
export class VectorStore {
|
|
14
14
|
type = 'vector';
|
|
15
15
|
name;
|
|
16
16
|
index = null;
|
|
17
17
|
indexPath;
|
|
18
|
-
|
|
18
|
+
access;
|
|
19
|
+
constructor(indexPath = DEFAULT_PATH, access = 'readwrite') {
|
|
19
20
|
this.indexPath = indexPath;
|
|
21
|
+
this.access = access;
|
|
20
22
|
this.name = `vector:${indexPath}`;
|
|
21
23
|
}
|
|
22
24
|
async getIndex() {
|
|
@@ -57,6 +59,7 @@ export class VectorStore {
|
|
|
57
59
|
.filter((r) => r !== null);
|
|
58
60
|
}
|
|
59
61
|
async store(entry) {
|
|
62
|
+
assertWritable(this.type, this.access);
|
|
60
63
|
if (!entry.embedding || entry.embedding.length === 0) {
|
|
61
64
|
throw new Error('VectorStore requires an embedding to store an entry');
|
|
62
65
|
}
|
|
@@ -91,6 +94,7 @@ export class VectorStore {
|
|
|
91
94
|
type: this.type,
|
|
92
95
|
name: this.name,
|
|
93
96
|
available: true,
|
|
97
|
+
access: this.access,
|
|
94
98
|
path: this.indexPath,
|
|
95
99
|
entryCount: stats.length,
|
|
96
100
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector.js","sourceRoot":"","sources":["../../src/stores/vector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGpC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"vector.js","sourceRoot":"","sources":["../../src/stores/vector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../src/tools/sources.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../src/tools/sources.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAqClF"}
|
package/dist/tools/sources.js
CHANGED
|
@@ -14,13 +14,16 @@ export function registerSourcesTool(server, stores) {
|
|
|
14
14
|
if (result.status === 'fulfilled') {
|
|
15
15
|
const info = result.value;
|
|
16
16
|
const status = info.available ? '✓' : '✗';
|
|
17
|
+
const access = info.access
|
|
18
|
+
? ` | ${info.access === 'read' ? 'read-only' : 'read/write'}`
|
|
19
|
+
: '';
|
|
17
20
|
const count = info.entryCount !== undefined ? ` | ${info.entryCount} entries` : '';
|
|
18
21
|
const size = info.sizeBytes !== undefined
|
|
19
22
|
? ` | ${(info.sizeBytes / 1024).toFixed(1)}KB`
|
|
20
23
|
: '';
|
|
21
24
|
const path = info.path ? ` | path: ${info.path}` : '';
|
|
22
25
|
const err = info.error ? ` | error: ${info.error}` : '';
|
|
23
|
-
lines.push(`${status} **${info.type}** (${info.name})${count}${size}${path}${err}`);
|
|
26
|
+
lines.push(`${status} **${info.type}** (${info.name})${access}${count}${size}${path}${err}`);
|
|
24
27
|
}
|
|
25
28
|
else {
|
|
26
29
|
lines.push(`✗ **${store.type}** — failed to query: ${String(result.reason)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/tools/sources.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAqB;IAC1E,MAAM,CAAC,IAAI,CACT,SAAS,EACT,0EAA0E,EAC1E,EAAE,EAAE,kBAAkB;IACtB,KAAK,IAAI,EAAE;QACT,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEzE,MAAM,KAAK,GAAa,CAAC,oBAAoB,CAAC,CAAC;QAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;YAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS;oBACvC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;oBAC9C,CAAC,CAAC,EAAE,CAAC;gBACP,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,MAAM,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/tools/sources.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAqB;IAC1E,MAAM,CAAC,IAAI,CACT,SAAS,EACT,0EAA0E,EAC1E,EAAE,EAAE,kBAAkB;IACtB,KAAK,IAAI,EAAE;QACT,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEzE,MAAM,KAAK,GAAa,CAAC,oBAAoB,CAAC,CAAC;QAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;YAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;oBACxB,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,EAAE;oBAC7D,CAAC,CAAC,EAAE,CAAC;gBACP,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS;oBACvC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;oBAC9C,CAAC,CAAC,EAAE,CAAC;gBACP,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,MAAM,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,IAAI,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;YAC/F,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,yBAAyB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SAC7D,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/tools/store.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
7
|
import type { MemoryStore } from '../stores/base.js';
|
|
8
|
+
import type { AuditStore } from '../stores/audit.js';
|
|
8
9
|
import type { EmbeddingProvider } from '../embeddings/base.js';
|
|
9
|
-
export declare function registerStoreTool(server: McpServer, stores: MemoryStore[], embedder: EmbeddingProvider): void;
|
|
10
|
+
export declare function registerStoreTool(server: McpServer, stores: MemoryStore[], embedder: EmbeddingProvider, audit?: AuditStore): void;
|
|
10
11
|
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/tools/store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/tools/store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAc/D,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,WAAW,EAAE,EACrB,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,CAAC,EAAE,UAAU,GACjB,IAAI,CAqEN"}
|
package/dist/tools/store.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Copyright Old Cart Technology LLC — MIT License
|
|
5
5
|
*/
|
|
6
6
|
import { z } from 'zod';
|
|
7
|
+
// Note: 'audit' is intentionally excluded — the agent cannot write to the audit log.
|
|
7
8
|
const STORE_TYPES = ['sqlite', 'leveldb', 'markdown', 'files', 'vector'];
|
|
8
9
|
const StoreInput = z.object({
|
|
9
10
|
content: z.string().min(1).describe('The text content to store in memory'),
|
|
@@ -12,7 +13,7 @@ const StoreInput = z.object({
|
|
|
12
13
|
store: z.enum(STORE_TYPES).optional()
|
|
13
14
|
.describe('Target store type. Omit to use auto-routing (sqlite by default in v1)'),
|
|
14
15
|
});
|
|
15
|
-
export function registerStoreTool(server, stores, embedder) {
|
|
16
|
+
export function registerStoreTool(server, stores, embedder, audit) {
|
|
16
17
|
server.tool('store', 'Persist content to agent memory with optional metadata and target store.', StoreInput.shape, async ({ content, metadata = {}, store: storeType }) => {
|
|
17
18
|
// Auto-route: in v1, default to sqlite; v2 will classify content type
|
|
18
19
|
const targetType = storeType ?? 'sqlite';
|
|
@@ -26,6 +27,18 @@ export function registerStoreTool(server, stores, embedder) {
|
|
|
26
27
|
isError: true,
|
|
27
28
|
};
|
|
28
29
|
}
|
|
30
|
+
// Respect read-only stores — the agent may not change data it wasn't granted write to.
|
|
31
|
+
// A denied attempt is recorded in the audit log — the knock on the locked door matters.
|
|
32
|
+
if (target.access === 'read') {
|
|
33
|
+
audit?.logDenied(targetType, 'store is read-only', content);
|
|
34
|
+
return {
|
|
35
|
+
content: [{
|
|
36
|
+
type: 'text',
|
|
37
|
+
text: `The ${targetType} store is read-only. The user has not granted write access to it. Nothing was stored.`,
|
|
38
|
+
}],
|
|
39
|
+
isError: true,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
29
42
|
// Generate embedding
|
|
30
43
|
let embedding;
|
|
31
44
|
try {
|
|
@@ -34,12 +47,25 @@ export function registerStoreTool(server, stores, embedder) {
|
|
|
34
47
|
catch (err) {
|
|
35
48
|
console.warn('[mmind:store] Embedding failed, storing without vector:', err);
|
|
36
49
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
50
|
+
// Any failure to persist is also audited as a denied write
|
|
51
|
+
let id;
|
|
52
|
+
try {
|
|
53
|
+
id = await target.store({
|
|
54
|
+
content,
|
|
55
|
+
metadata: metadata,
|
|
56
|
+
storeType: targetType,
|
|
57
|
+
embedding,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
62
|
+
audit?.logDenied(targetType, reason, content);
|
|
63
|
+
return {
|
|
64
|
+
content: [{ type: 'text', text: `Could not store to ${targetType}: ${reason}` }],
|
|
65
|
+
isError: true,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
audit?.logWrite(targetType, id, content);
|
|
43
69
|
return {
|
|
44
70
|
content: [{
|
|
45
71
|
type: 'text',
|
package/dist/tools/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/tools/store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/tools/store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,qFAAqF;AACrF,MAAM,WAAW,GAAgC,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAEtG,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC1E,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;SACnD,QAAQ,CAAC,sDAAsD,CAAC;IACnE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE;SAClC,QAAQ,CAAC,uEAAuE,CAAC;CACrF,CAAC,CAAC;AAEH,MAAM,UAAU,iBAAiB,CAC/B,MAAiB,EACjB,MAAqB,EACrB,QAA2B,EAC3B,KAAkB;IAElB,MAAM,CAAC,IAAI,CACT,OAAO,EACP,0EAA0E,EAC1E,UAAU,CAAC,KAAK,EAChB,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;QACrD,sEAAsE;QACtE,MAAM,UAAU,GAAc,SAAS,IAAI,QAAQ,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAEzD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,sBAAsB,UAAU,sBAAsB;qBAC7D,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,uFAAuF;QACvF,wFAAwF;QACxF,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7B,KAAK,EAAE,SAAS,CAAC,UAAU,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAC5D,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,OAAO,UAAU,uFAAuF;qBAC/G,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,qBAAqB;QACrB,IAAI,SAA+B,CAAC;QACpC,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,yDAAyD,EAAE,GAAG,CAAC,CAAC;QAC/E,CAAC;QAED,2DAA2D;QAC3D,IAAI,EAAU,CAAC;QACf,IAAI,CAAC;YACH,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;gBACtB,OAAO;gBACP,QAAQ,EAAE,QAAmC;gBAC7C,SAAS,EAAE,UAAU;gBACrB,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,KAAK,EAAE,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,sBAAsB,UAAU,KAAK,MAAM,EAAE,EAAE,CAAC;gBACzF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAEzC,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,aAAa,UAAU,SAAS,EAAE,GAAG;iBAC5C,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -2,7 +2,16 @@
|
|
|
2
2
|
* Core types for Multimode Mind
|
|
3
3
|
* Copyright Old Cart Technology LLC — MIT License
|
|
4
4
|
*/
|
|
5
|
-
export type StoreType = 'sqlite' | 'leveldb' | 'markdown' | 'files' | 'vector';
|
|
5
|
+
export type StoreType = 'sqlite' | 'leveldb' | 'markdown' | 'files' | 'vector' | 'audit';
|
|
6
|
+
/** Whether the agent may only read a store, or also write to it. */
|
|
7
|
+
export type AccessMode = 'read' | 'readwrite';
|
|
8
|
+
/**
|
|
9
|
+
* Conservative defaults: the agent does NOT get to change your data by default.
|
|
10
|
+
* The Markdown vault (your existing notes) is read-only; mmind's own memory
|
|
11
|
+
* stores are writable because storing new memories is their purpose. Every
|
|
12
|
+
* store is user-configurable from the dashboard.
|
|
13
|
+
*/
|
|
14
|
+
export declare const DEFAULT_ACCESS: Record<StoreType, AccessMode>;
|
|
6
15
|
export interface MemoryEntry {
|
|
7
16
|
id: string;
|
|
8
17
|
content: string;
|
|
@@ -38,6 +47,11 @@ export interface SourceInfo {
|
|
|
38
47
|
/** Store exists and is healthy but is held open by another process
|
|
39
48
|
* (e.g. the live MCP server holding the single-writer LevelDB lock). */
|
|
40
49
|
locked?: boolean;
|
|
50
|
+
/** Store is available in principle but has not been configured yet
|
|
51
|
+
* (e.g. the Markdown vault before a vault path is set). Neutral, not a failure. */
|
|
52
|
+
unconfigured?: boolean;
|
|
53
|
+
/** Whether the agent may write to this store, or only read from it. */
|
|
54
|
+
access?: AccessMode;
|
|
41
55
|
path?: string;
|
|
42
56
|
entryCount?: number;
|
|
43
57
|
sizeBytes?: number;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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,CAAC;
|
|
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"}
|
package/dist/types.js
CHANGED
|
@@ -2,5 +2,18 @@
|
|
|
2
2
|
* Core types for Multimode Mind
|
|
3
3
|
* Copyright Old Cart Technology LLC — MIT License
|
|
4
4
|
*/
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Conservative defaults: the agent does NOT get to change your data by default.
|
|
7
|
+
* The Markdown vault (your existing notes) is read-only; mmind's own memory
|
|
8
|
+
* stores are writable because storing new memories is their purpose. Every
|
|
9
|
+
* store is user-configurable from the dashboard.
|
|
10
|
+
*/
|
|
11
|
+
export const DEFAULT_ACCESS = {
|
|
12
|
+
markdown: 'read',
|
|
13
|
+
sqlite: 'readwrite',
|
|
14
|
+
leveldb: 'readwrite',
|
|
15
|
+
files: 'readwrite',
|
|
16
|
+
vector: 'readwrite',
|
|
17
|
+
audit: 'read', // append-only, system-managed; the agent can never write to it
|
|
18
|
+
};
|
|
6
19
|
//# 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"}
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "multimodemind",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
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",
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"typecheck": "tsc --noEmit",
|
|
25
25
|
"lint": "tsc --noEmit",
|
|
26
26
|
"dashboard": "tsx src/cli/dashboard.ts",
|
|
27
|
+
"test:mcp": "npm run build && node tests/mcp-smoke.mjs",
|
|
27
28
|
"prepublishOnly": "npm run build"
|
|
28
29
|
},
|
|
29
30
|
"keywords": [
|