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.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +112 -0
  3. package/dist/db.d.ts +45 -0
  4. package/dist/db.js +381 -0
  5. package/dist/db.js.map +1 -0
  6. package/dist/diagnostics.d.ts +25 -0
  7. package/dist/diagnostics.js +29 -0
  8. package/dist/diagnostics.js.map +1 -0
  9. package/dist/embeddings.d.ts +14 -0
  10. package/dist/embeddings.js +91 -0
  11. package/dist/embeddings.js.map +1 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.js +97 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/metrics.d.ts +38 -0
  16. package/dist/metrics.js +105 -0
  17. package/dist/metrics.js.map +1 -0
  18. package/dist/tools/mm_delete.d.ts +6 -0
  19. package/dist/tools/mm_delete.js +9 -0
  20. package/dist/tools/mm_delete.js.map +1 -0
  21. package/dist/tools/mm_feedback.d.ts +8 -0
  22. package/dist/tools/mm_feedback.js +6 -0
  23. package/dist/tools/mm_feedback.js.map +1 -0
  24. package/dist/tools/mm_handoff_create.d.ts +9 -0
  25. package/dist/tools/mm_handoff_create.js +16 -0
  26. package/dist/tools/mm_handoff_create.js.map +1 -0
  27. package/dist/tools/mm_handoff_load.d.ts +1 -0
  28. package/dist/tools/mm_handoff_load.js +9 -0
  29. package/dist/tools/mm_handoff_load.js.map +1 -0
  30. package/dist/tools/mm_init.d.ts +5 -0
  31. package/dist/tools/mm_init.js +6 -0
  32. package/dist/tools/mm_init.js.map +1 -0
  33. package/dist/tools/mm_metrics.d.ts +1 -0
  34. package/dist/tools/mm_metrics.js +6 -0
  35. package/dist/tools/mm_metrics.js.map +1 -0
  36. package/dist/tools/mm_read.d.ts +3 -0
  37. package/dist/tools/mm_read.js +24 -0
  38. package/dist/tools/mm_read.js.map +1 -0
  39. package/dist/tools/mm_recall.d.ts +11 -0
  40. package/dist/tools/mm_recall.js +71 -0
  41. package/dist/tools/mm_recall.js.map +1 -0
  42. package/dist/tools/mm_status.d.ts +1 -0
  43. package/dist/tools/mm_status.js +18 -0
  44. package/dist/tools/mm_status.js.map +1 -0
  45. package/dist/tools/mm_store.d.ts +12 -0
  46. package/dist/tools/mm_store.js +20 -0
  47. package/dist/tools/mm_store.js.map +1 -0
  48. package/dist/tools/mm_update.d.ts +10 -0
  49. package/dist/tools/mm_update.js +42 -0
  50. package/dist/tools/mm_update.js.map +1 -0
  51. package/dist/types.d.ts +38 -0
  52. package/dist/types.js +2 -0
  53. package/dist/types.js.map +1 -0
  54. 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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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
+ }