moltmind 0.1.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/LICENSE +21 -0
- package/README.md +112 -0
- package/dist/db.d.ts +45 -0
- package/dist/db.js +381 -0
- package/dist/db.js.map +1 -0
- package/dist/diagnostics.d.ts +25 -0
- package/dist/diagnostics.js +29 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/embeddings.d.ts +14 -0
- package/dist/embeddings.js +91 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +97 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics.d.ts +38 -0
- package/dist/metrics.js +105 -0
- package/dist/metrics.js.map +1 -0
- package/dist/tools/mm_delete.d.ts +6 -0
- package/dist/tools/mm_delete.js +9 -0
- package/dist/tools/mm_delete.js.map +1 -0
- package/dist/tools/mm_feedback.d.ts +8 -0
- package/dist/tools/mm_feedback.js +6 -0
- package/dist/tools/mm_feedback.js.map +1 -0
- package/dist/tools/mm_handoff_create.d.ts +9 -0
- package/dist/tools/mm_handoff_create.js +16 -0
- package/dist/tools/mm_handoff_create.js.map +1 -0
- package/dist/tools/mm_handoff_load.d.ts +1 -0
- package/dist/tools/mm_handoff_load.js +9 -0
- package/dist/tools/mm_handoff_load.js.map +1 -0
- package/dist/tools/mm_init.d.ts +5 -0
- package/dist/tools/mm_init.js +6 -0
- package/dist/tools/mm_init.js.map +1 -0
- package/dist/tools/mm_metrics.d.ts +1 -0
- package/dist/tools/mm_metrics.js +6 -0
- package/dist/tools/mm_metrics.js.map +1 -0
- package/dist/tools/mm_read.d.ts +3 -0
- package/dist/tools/mm_read.js +24 -0
- package/dist/tools/mm_read.js.map +1 -0
- package/dist/tools/mm_recall.d.ts +11 -0
- package/dist/tools/mm_recall.js +71 -0
- package/dist/tools/mm_recall.js.map +1 -0
- package/dist/tools/mm_status.d.ts +1 -0
- package/dist/tools/mm_status.js +18 -0
- package/dist/tools/mm_status.js.map +1 -0
- package/dist/tools/mm_store.d.ts +12 -0
- package/dist/tools/mm_store.js +20 -0
- package/dist/tools/mm_store.js.map +1 -0
- package/dist/tools/mm_update.d.ts +10 -0
- package/dist/tools/mm_update.js +42 -0
- package/dist/tools/mm_update.js.map +1 -0
- package/dist/types.d.ts +38 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getMemoryStats } from "../db.js";
|
|
2
|
+
import { getHealthScore } from "../diagnostics.js";
|
|
3
|
+
import { isModelReady } from "../embeddings.js";
|
|
4
|
+
const startTime = Date.now();
|
|
5
|
+
export async function handleMmStatus() {
|
|
6
|
+
const stats = getMemoryStats();
|
|
7
|
+
const healthScore = getHealthScore();
|
|
8
|
+
const uptimeSeconds = Math.floor((Date.now() - startTime) / 1000);
|
|
9
|
+
return {
|
|
10
|
+
success: true,
|
|
11
|
+
version: "0.1.0",
|
|
12
|
+
db_stats: stats,
|
|
13
|
+
health_score: healthScore,
|
|
14
|
+
embedding_model_ready: isModelReady(),
|
|
15
|
+
uptime_seconds: uptimeSeconds,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=mm_status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mm_status.js","sourceRoot":"","sources":["../../src/tools/mm_status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;IAElE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,WAAW;QACzB,qBAAqB,EAAE,YAAY,EAAE;QACrC,cAAc,EAAE,aAAa;KAC9B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MemoryType } from "../types.js";
|
|
2
|
+
export declare function handleMmStore(args: {
|
|
3
|
+
title: string;
|
|
4
|
+
content: string;
|
|
5
|
+
type?: MemoryType;
|
|
6
|
+
tags?: string[];
|
|
7
|
+
metadata?: Record<string, unknown>;
|
|
8
|
+
}): Promise<{
|
|
9
|
+
success: boolean;
|
|
10
|
+
id?: string;
|
|
11
|
+
message?: string;
|
|
12
|
+
}>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { insertMemory } from "../db.js";
|
|
2
|
+
import { embed, embeddingToBuffer } from "../embeddings.js";
|
|
3
|
+
export async function handleMmStore(args) {
|
|
4
|
+
const type = args.type ?? "raw";
|
|
5
|
+
const tags = args.tags ?? [];
|
|
6
|
+
const metadata = args.metadata ?? {};
|
|
7
|
+
const embedding = await embed(`${args.title} ${args.content}`);
|
|
8
|
+
const embeddingBuf = embedding ? embeddingToBuffer(embedding) : null;
|
|
9
|
+
const memory = insertMemory({
|
|
10
|
+
type,
|
|
11
|
+
title: args.title,
|
|
12
|
+
content: args.content,
|
|
13
|
+
tags,
|
|
14
|
+
metadata,
|
|
15
|
+
embedding: embeddingBuf,
|
|
16
|
+
tier: "hot",
|
|
17
|
+
});
|
|
18
|
+
return { success: true, id: memory.id, message: `Memory stored: ${memory.title}` };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=mm_store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mm_store.js","sourceRoot":"","sources":["../../src/tools/mm_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAMnC;IACC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IAErC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAErE,MAAM,MAAM,GAAG,YAAY,CAAC;QAC1B,IAAI;QACJ,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI;QACJ,QAAQ;QACR,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,kBAAkB,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;AACrF,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { MemoryType, MemoryTier } from "../types.js";
|
|
2
|
+
export declare function handleMmUpdate(args: {
|
|
3
|
+
id: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
content?: string;
|
|
6
|
+
type?: MemoryType;
|
|
7
|
+
tags?: string[];
|
|
8
|
+
metadata?: Record<string, unknown>;
|
|
9
|
+
tier?: MemoryTier;
|
|
10
|
+
}): Promise<Record<string, unknown>>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { updateMemory } from "../db.js";
|
|
2
|
+
import { embed, embeddingToBuffer } from "../embeddings.js";
|
|
3
|
+
export async function handleMmUpdate(args) {
|
|
4
|
+
const updates = {};
|
|
5
|
+
if (args.title !== undefined)
|
|
6
|
+
updates.title = args.title;
|
|
7
|
+
if (args.content !== undefined)
|
|
8
|
+
updates.content = args.content;
|
|
9
|
+
if (args.type !== undefined)
|
|
10
|
+
updates.type = args.type;
|
|
11
|
+
if (args.tags !== undefined)
|
|
12
|
+
updates.tags = args.tags;
|
|
13
|
+
if (args.metadata !== undefined)
|
|
14
|
+
updates.metadata = args.metadata;
|
|
15
|
+
if (args.tier !== undefined)
|
|
16
|
+
updates.tier = args.tier;
|
|
17
|
+
// Re-embed if content changed
|
|
18
|
+
if (args.content !== undefined) {
|
|
19
|
+
const text = `${args.title ?? ""} ${args.content}`;
|
|
20
|
+
const embedding = await embed(text);
|
|
21
|
+
if (embedding) {
|
|
22
|
+
updates.embedding = embeddingToBuffer(embedding);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const updated = updateMemory(args.id, updates);
|
|
26
|
+
if (!updated) {
|
|
27
|
+
return { success: false, message: "Memory not found" };
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
success: true,
|
|
31
|
+
memory: {
|
|
32
|
+
id: updated.id,
|
|
33
|
+
type: updated.type,
|
|
34
|
+
title: updated.title,
|
|
35
|
+
content: updated.content,
|
|
36
|
+
tags: updated.tags,
|
|
37
|
+
tier: updated.tier,
|
|
38
|
+
updated_at: updated.updated_at,
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=mm_update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mm_update.js","sourceRoot":"","sources":["../../src/tools/mm_update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAQpC;IACC,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC/D,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAClE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAEtD,8BAA8B;IAC9B,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;IACzD,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM,EAAE;YACN,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B;KACF,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type MemoryType = "learning" | "error" | "decision" | "plan" | "raw";
|
|
2
|
+
export type MemoryTier = "hot" | "warm" | "cold" | "archived";
|
|
3
|
+
export interface Memory {
|
|
4
|
+
id: string;
|
|
5
|
+
type: MemoryType;
|
|
6
|
+
title: string;
|
|
7
|
+
content: string;
|
|
8
|
+
tags: string[];
|
|
9
|
+
metadata: Record<string, unknown>;
|
|
10
|
+
embedding: Buffer | null;
|
|
11
|
+
tier: MemoryTier;
|
|
12
|
+
created_at: string;
|
|
13
|
+
updated_at: string;
|
|
14
|
+
accessed_at: string;
|
|
15
|
+
access_count: number;
|
|
16
|
+
decay_score: number;
|
|
17
|
+
}
|
|
18
|
+
export interface Handoff {
|
|
19
|
+
id: string;
|
|
20
|
+
goal: string;
|
|
21
|
+
current_state: string;
|
|
22
|
+
next_action: string;
|
|
23
|
+
constraints: string[];
|
|
24
|
+
known_unknowns: string[];
|
|
25
|
+
artifacts: string[];
|
|
26
|
+
stop_conditions: string[];
|
|
27
|
+
session_id: string;
|
|
28
|
+
created_at: string;
|
|
29
|
+
}
|
|
30
|
+
export interface SearchResult {
|
|
31
|
+
id: string;
|
|
32
|
+
title: string;
|
|
33
|
+
content: string;
|
|
34
|
+
type: MemoryType;
|
|
35
|
+
score: number;
|
|
36
|
+
tags: string[];
|
|
37
|
+
created_at: string;
|
|
38
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "moltmind",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Agent Memory MCP Server — persistent semantic memory for AI agents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"moltmind": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsx watch src/index.ts",
|
|
13
|
+
"test": "tsx --test tests/**/*.test.ts",
|
|
14
|
+
"lint": "tsc --noEmit",
|
|
15
|
+
"clean": "rm -rf dist"
|
|
16
|
+
},
|
|
17
|
+
"engines": {
|
|
18
|
+
"node": ">=18"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"mcp",
|
|
22
|
+
"memory",
|
|
23
|
+
"ai",
|
|
24
|
+
"agent",
|
|
25
|
+
"semantic-search",
|
|
26
|
+
"embeddings",
|
|
27
|
+
"sqlite"
|
|
28
|
+
],
|
|
29
|
+
"files": [
|
|
30
|
+
"dist/",
|
|
31
|
+
"README.md",
|
|
32
|
+
"LICENSE"
|
|
33
|
+
],
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "https://github.com/ariv14/moltmind.git"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
41
|
+
"better-sqlite3": "^11.0.0",
|
|
42
|
+
"@xenova/transformers": "^2.17.0"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"typescript": "^5.5.0",
|
|
46
|
+
"@types/better-sqlite3": "^7.6.0",
|
|
47
|
+
"@types/node": "^22.0.0",
|
|
48
|
+
"tsx": "^4.19.0"
|
|
49
|
+
}
|
|
50
|
+
}
|