@bip-krishna/agentmind 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 (169) hide show
  1. package/.agentmind/memory.db +0 -0
  2. package/.context-memory/memory.db +0 -0
  3. package/README.md +176 -0
  4. package/apps/dashboard/src/server.ts +369 -0
  5. package/cli/src/index.ts +163 -0
  6. package/dist/apps/dashboard/src/server.d.ts +6 -0
  7. package/dist/apps/dashboard/src/server.d.ts.map +1 -0
  8. package/dist/apps/dashboard/src/server.js +360 -0
  9. package/dist/apps/dashboard/src/server.js.map +1 -0
  10. package/dist/cli/src/index.d.ts +3 -0
  11. package/dist/cli/src/index.d.ts.map +1 -0
  12. package/dist/cli/src/index.js +162 -0
  13. package/dist/cli/src/index.js.map +1 -0
  14. package/dist/examples/advanced.d.ts +2 -0
  15. package/dist/examples/advanced.d.ts.map +1 -0
  16. package/dist/examples/advanced.js +41 -0
  17. package/dist/examples/advanced.js.map +1 -0
  18. package/dist/examples/basic.d.ts +2 -0
  19. package/dist/examples/basic.d.ts.map +1 -0
  20. package/dist/examples/basic.js +22 -0
  21. package/dist/examples/basic.js.map +1 -0
  22. package/dist/packages/core/src/consolidation.d.ts +27 -0
  23. package/dist/packages/core/src/consolidation.d.ts.map +1 -0
  24. package/dist/packages/core/src/consolidation.js +97 -0
  25. package/dist/packages/core/src/consolidation.js.map +1 -0
  26. package/dist/packages/core/src/events.d.ts +18 -0
  27. package/dist/packages/core/src/events.d.ts.map +1 -0
  28. package/dist/packages/core/src/events.js +13 -0
  29. package/dist/packages/core/src/events.js.map +1 -0
  30. package/dist/packages/core/src/extraction.d.ts +32 -0
  31. package/dist/packages/core/src/extraction.d.ts.map +1 -0
  32. package/dist/packages/core/src/extraction.js +65 -0
  33. package/dist/packages/core/src/extraction.js.map +1 -0
  34. package/dist/packages/core/src/index.d.ts +10 -0
  35. package/dist/packages/core/src/index.d.ts.map +1 -0
  36. package/dist/packages/core/src/index.js +7 -0
  37. package/dist/packages/core/src/index.js.map +1 -0
  38. package/dist/packages/core/src/memory-store.d.ts +36 -0
  39. package/dist/packages/core/src/memory-store.d.ts.map +1 -0
  40. package/dist/packages/core/src/memory-store.js +2 -0
  41. package/dist/packages/core/src/memory-store.js.map +1 -0
  42. package/dist/packages/core/src/memory.d.ts +75 -0
  43. package/dist/packages/core/src/memory.d.ts.map +1 -0
  44. package/dist/packages/core/src/memory.js +402 -0
  45. package/dist/packages/core/src/memory.js.map +1 -0
  46. package/dist/packages/core/src/policy.d.ts +17 -0
  47. package/dist/packages/core/src/policy.d.ts.map +1 -0
  48. package/dist/packages/core/src/policy.js +22 -0
  49. package/dist/packages/core/src/policy.js.map +1 -0
  50. package/dist/packages/core/src/types.d.ts +102 -0
  51. package/dist/packages/core/src/types.d.ts.map +1 -0
  52. package/dist/packages/core/src/types.js +23 -0
  53. package/dist/packages/core/src/types.js.map +1 -0
  54. package/dist/packages/embeddings/src/index.d.ts +4 -0
  55. package/dist/packages/embeddings/src/index.d.ts.map +1 -0
  56. package/dist/packages/embeddings/src/index.js +4 -0
  57. package/dist/packages/embeddings/src/index.js.map +1 -0
  58. package/dist/packages/embeddings/src/local.d.ts +15 -0
  59. package/dist/packages/embeddings/src/local.d.ts.map +1 -0
  60. package/dist/packages/embeddings/src/local.js +45 -0
  61. package/dist/packages/embeddings/src/local.js.map +1 -0
  62. package/dist/packages/embeddings/src/openai.d.ts +17 -0
  63. package/dist/packages/embeddings/src/openai.d.ts.map +1 -0
  64. package/dist/packages/embeddings/src/openai.js +41 -0
  65. package/dist/packages/embeddings/src/openai.js.map +1 -0
  66. package/dist/packages/embeddings/src/provider.d.ts +8 -0
  67. package/dist/packages/embeddings/src/provider.d.ts.map +1 -0
  68. package/dist/packages/embeddings/src/provider.js +12 -0
  69. package/dist/packages/embeddings/src/provider.js.map +1 -0
  70. package/dist/packages/integrations/src/anthropic.d.ts +15 -0
  71. package/dist/packages/integrations/src/anthropic.d.ts.map +1 -0
  72. package/dist/packages/integrations/src/anthropic.js +25 -0
  73. package/dist/packages/integrations/src/anthropic.js.map +1 -0
  74. package/dist/packages/integrations/src/index.d.ts +4 -0
  75. package/dist/packages/integrations/src/index.d.ts.map +1 -0
  76. package/dist/packages/integrations/src/index.js +4 -0
  77. package/dist/packages/integrations/src/index.js.map +1 -0
  78. package/dist/packages/integrations/src/openai.d.ts +27 -0
  79. package/dist/packages/integrations/src/openai.d.ts.map +1 -0
  80. package/dist/packages/integrations/src/openai.js +26 -0
  81. package/dist/packages/integrations/src/openai.js.map +1 -0
  82. package/dist/packages/integrations/src/vercel.d.ts +24 -0
  83. package/dist/packages/integrations/src/vercel.d.ts.map +1 -0
  84. package/dist/packages/integrations/src/vercel.js +20 -0
  85. package/dist/packages/integrations/src/vercel.js.map +1 -0
  86. package/dist/packages/retrieval/src/index.d.ts +3 -0
  87. package/dist/packages/retrieval/src/index.d.ts.map +1 -0
  88. package/dist/packages/retrieval/src/index.js +3 -0
  89. package/dist/packages/retrieval/src/index.js.map +1 -0
  90. package/dist/packages/retrieval/src/ranker.d.ts +21 -0
  91. package/dist/packages/retrieval/src/ranker.d.ts.map +1 -0
  92. package/dist/packages/retrieval/src/ranker.js +54 -0
  93. package/dist/packages/retrieval/src/ranker.js.map +1 -0
  94. package/dist/packages/retrieval/src/token.d.ts +3 -0
  95. package/dist/packages/retrieval/src/token.d.ts.map +1 -0
  96. package/dist/packages/retrieval/src/token.js +7 -0
  97. package/dist/packages/retrieval/src/token.js.map +1 -0
  98. package/dist/packages/storage/src/config.d.ts +14 -0
  99. package/dist/packages/storage/src/config.d.ts.map +1 -0
  100. package/dist/packages/storage/src/config.js +41 -0
  101. package/dist/packages/storage/src/config.js.map +1 -0
  102. package/dist/packages/storage/src/index.d.ts +4 -0
  103. package/dist/packages/storage/src/index.d.ts.map +1 -0
  104. package/dist/packages/storage/src/index.js +4 -0
  105. package/dist/packages/storage/src/index.js.map +1 -0
  106. package/dist/packages/storage/src/memory-store.d.ts +37 -0
  107. package/dist/packages/storage/src/memory-store.d.ts.map +1 -0
  108. package/dist/packages/storage/src/memory-store.js +107 -0
  109. package/dist/packages/storage/src/memory-store.js.map +1 -0
  110. package/dist/packages/storage/src/migrations.d.ts +12 -0
  111. package/dist/packages/storage/src/migrations.d.ts.map +1 -0
  112. package/dist/packages/storage/src/migrations.js +89 -0
  113. package/dist/packages/storage/src/migrations.js.map +1 -0
  114. package/dist/packages/storage/src/postgres-store.d.ts +45 -0
  115. package/dist/packages/storage/src/postgres-store.d.ts.map +1 -0
  116. package/dist/packages/storage/src/postgres-store.js +282 -0
  117. package/dist/packages/storage/src/postgres-store.js.map +1 -0
  118. package/dist/packages/storage/src/sqlite-store.d.ts +36 -0
  119. package/dist/packages/storage/src/sqlite-store.d.ts.map +1 -0
  120. package/dist/packages/storage/src/sqlite-store.js +243 -0
  121. package/dist/packages/storage/src/sqlite-store.js.map +1 -0
  122. package/examples/advanced.ts +46 -0
  123. package/examples/basic.ts +25 -0
  124. package/package.json +52 -0
  125. package/packages/core/package.json +13 -0
  126. package/packages/core/src/consolidation.ts +104 -0
  127. package/packages/core/src/events.ts +25 -0
  128. package/packages/core/src/extraction.ts +81 -0
  129. package/packages/core/src/index.ts +22 -0
  130. package/packages/core/src/memory-store.ts +50 -0
  131. package/packages/core/src/memory.ts +447 -0
  132. package/packages/core/src/policy.ts +36 -0
  133. package/packages/core/src/types.ts +119 -0
  134. package/packages/core/tsconfig.json +6 -0
  135. package/packages/embeddings/package.json +9 -0
  136. package/packages/embeddings/src/index.ts +3 -0
  137. package/packages/embeddings/src/local.ts +47 -0
  138. package/packages/embeddings/src/openai.ts +50 -0
  139. package/packages/embeddings/src/provider.d.ts.map +1 -0
  140. package/packages/embeddings/src/provider.js.map +1 -0
  141. package/packages/embeddings/src/provider.ts +17 -0
  142. package/packages/embeddings/tsconfig.json +6 -0
  143. package/packages/integrations/package.json +7 -0
  144. package/packages/integrations/src/anthropic.ts +34 -0
  145. package/packages/integrations/src/index.ts +3 -0
  146. package/packages/integrations/src/openai.ts +52 -0
  147. package/packages/integrations/src/vercel.ts +26 -0
  148. package/packages/retrieval/package.json +8 -0
  149. package/packages/retrieval/src/index.ts +2 -0
  150. package/packages/retrieval/src/ranker.d.ts.map +1 -0
  151. package/packages/retrieval/src/ranker.js.map +1 -0
  152. package/packages/retrieval/src/ranker.ts +77 -0
  153. package/packages/retrieval/src/token.d.ts.map +1 -0
  154. package/packages/retrieval/src/token.js.map +1 -0
  155. package/packages/retrieval/src/token.ts +5 -0
  156. package/packages/retrieval/tsconfig.json +6 -0
  157. package/packages/storage/package.json +11 -0
  158. package/packages/storage/src/config.ts +44 -0
  159. package/packages/storage/src/index.ts +3 -0
  160. package/packages/storage/src/memory-store.ts +100 -0
  161. package/packages/storage/src/migrations.ts +96 -0
  162. package/packages/storage/src/postgres-store.ts +299 -0
  163. package/packages/storage/src/sqlite-store.ts +298 -0
  164. package/packages/storage/tsconfig.json +6 -0
  165. package/test-mvp.mjs +82 -0
  166. package/tests/consolidation.test.ts +45 -0
  167. package/tests/eval.test.ts +102 -0
  168. package/tsconfig.json +21 -0
  169. package/vitest.config.ts +8 -0
@@ -0,0 +1,163 @@
1
+ #!/usr/bin/env node
2
+ import { Memory } from "../../packages/core/src/memory.js";
3
+ import { SqliteMemoryStore } from "../../packages/storage/src/sqlite-store.js";
4
+ import { LocalEmbeddingProvider } from "../../packages/embeddings/src/local.js";
5
+ import * as fs from "node:fs";
6
+
7
+ const DB_PATH = process.env.AGENTMIND_DB ?? process.env.CTX_MEMORY_DB ?? "./.agentmind/memory.db";
8
+ const store = new SqliteMemoryStore({ path: DB_PATH });
9
+ const embed = new LocalEmbeddingProvider();
10
+
11
+ const [,, cmd, ...args] = process.argv;
12
+
13
+ function help() {
14
+ console.log(`
15
+ agentmind (formerly context-memory)
16
+
17
+ Usage:
18
+ agentmind init [--project <name>]
19
+ agentmind project list
20
+ agentmind project create <name>
21
+ agentmind project delete <name>
22
+ agentmind memory list --project <name> [--type <type>] [--limit <n>]
23
+ agentmind memory search --project <name> --query "text" [--limit 5]
24
+ agentmind memory show <id>
25
+ agentmind memory delete <id>
26
+ agentmind memory consolidate --project <name>
27
+ agentmind ingest --project <name> --content "text" [--role user]
28
+ agentmind export --project <name> [--include-archived]
29
+ agentmind dashboard [--port 4317]
30
+
31
+ Aliases: context-memory (legacy)
32
+ `);
33
+ }
34
+
35
+ async function main() {
36
+ if (!cmd || cmd === "help" || cmd === "--help") return help();
37
+
38
+ if (cmd === "init") {
39
+ fs.mkdirSync("./.agentmind", { recursive: true });
40
+ // legacy compat
41
+ if (!fs.existsSync("./.context-memory")) fs.mkdirSync("./.context-memory", { recursive: true });
42
+ console.log("Initialized .agentmind/");
43
+ console.log(`DB: ${DB_PATH}`);
44
+ const pIdx = args.indexOf("--project");
45
+ if (pIdx !== -1) {
46
+ const name = args[pIdx+1];
47
+ const mem = await Memory.create({ project: name, store });
48
+ console.log(`Project: ${mem.project.name} (${mem.project.id})`);
49
+ }
50
+ return;
51
+ }
52
+
53
+ if (cmd === "project") {
54
+ const sub = args[0];
55
+ if (sub === "list") {
56
+ const projects = await store.listProjects();
57
+ console.log(JSON.stringify(projects, null, 2));
58
+ return;
59
+ }
60
+ if (sub === "create") {
61
+ const name = args[1];
62
+ if (!name) throw new Error("name required");
63
+ const mem = await Memory.create({ project: name, store });
64
+ console.log(`Created project: ${mem.project.name} (${mem.project.id})`);
65
+ return;
66
+ }
67
+ if (sub === "delete") {
68
+ const name = args[1];
69
+ if (!name) throw new Error("name required");
70
+ const proj = await store.getProjectByName(name) ?? await store.getProject(name);
71
+ if (!proj) throw new Error("not found");
72
+ await store.deleteProject(proj.id);
73
+ console.log(`Deleted ${name}`);
74
+ return;
75
+ }
76
+ }
77
+
78
+ if (cmd === "memory") {
79
+ const sub = args[0];
80
+ if (sub === "list") {
81
+ const pIdx = args.indexOf("--project");
82
+ const project = pIdx !== -1 ? args[pIdx+1] : null;
83
+ if (!project) throw new Error("--project required");
84
+ const mem = await Memory.create({ project, store });
85
+ const exported = await mem.export();
86
+ console.log(JSON.stringify(exported.memories, null, 2));
87
+ return;
88
+ }
89
+ if (sub === "search") {
90
+ const pIdx = args.indexOf("--project");
91
+ const qIdx = args.indexOf("--query");
92
+ const lIdx = args.indexOf("--limit");
93
+ const project = pIdx !== -1 ? args[pIdx+1] : null;
94
+ const query = qIdx !== -1 ? args[qIdx+1] : null;
95
+ const limit = lIdx !== -1 ? Number(args[lIdx+1]) : 5;
96
+ if (!project || !query) throw new Error("--project and --query required");
97
+ const mem = await Memory.create({ project, store, embeddingProvider: embed });
98
+ const results = await mem.search(query, { limit });
99
+ console.log(JSON.stringify(results, null, 2));
100
+ return;
101
+ }
102
+ if (sub === "consolidate") {
103
+ const pIdx = args.indexOf("--project");
104
+ const project = pIdx !== -1 ? args[pIdx+1] : null;
105
+ if (!project) throw new Error("--project required");
106
+ const mem = await Memory.create({ project, store, embeddingProvider: embed });
107
+ const results = await mem.consolidate();
108
+ console.log(JSON.stringify(results, null, 2));
109
+ return;
110
+ }
111
+ if (sub === "show") {
112
+ const id = args[1];
113
+ const m = await store.getMemory(id);
114
+ console.log(JSON.stringify(m, null, 2));
115
+ return;
116
+ }
117
+ if (sub === "delete") {
118
+ const id = args[1];
119
+ await store.deleteMemory(id);
120
+ console.log(`Deleted ${id}`);
121
+ return;
122
+ }
123
+ }
124
+
125
+ if (cmd === "ingest") {
126
+ const pIdx = args.indexOf("--project");
127
+ const cIdx = args.indexOf("--content");
128
+ const rIdx = args.indexOf("--role");
129
+ const project = pIdx !== -1 ? args[pIdx+1] : null;
130
+ const content = cIdx !== -1 ? args[cIdx+1] : null;
131
+ const role = rIdx !== -1 ? args[rIdx+1] : "user";
132
+ if (!project || !content) throw new Error("--project and --content required");
133
+ const mem = await Memory.create({ project, store });
134
+ const res = await mem.ingest({ role, content });
135
+ console.log(JSON.stringify(res, null, 2));
136
+ return;
137
+ }
138
+
139
+ if (cmd === "export") {
140
+ const pIdx = args.indexOf("--project");
141
+ const project = pIdx !== -1 ? args[pIdx+1] : null;
142
+ if (!project) throw new Error("--project required");
143
+ const includeArchived = args.includes("--include-archived");
144
+ const mem = await Memory.create({ project, store });
145
+ const data = await mem.export({ includeArchived });
146
+ const out = `${project}.export.json`;
147
+ fs.writeFileSync(out, JSON.stringify(data, null, 2));
148
+ console.log(`Exported to ${out} (${data.memories.length} memories)`);
149
+ return;
150
+ }
151
+
152
+ if (cmd === "dashboard") {
153
+ const pIdx = args.indexOf("--port");
154
+ const port = pIdx !== -1 ? args[pIdx+1] : "4317";
155
+ process.env.PORT = port;
156
+ await import("../../apps/dashboard/src/server.js");
157
+ return;
158
+ }
159
+
160
+ help();
161
+ }
162
+
163
+ main().catch(e => { console.error(e.message); process.exit(1); });
@@ -0,0 +1,6 @@
1
+ import { IncomingMessage, ServerResponse } from "node:http";
2
+ import { SqliteMemoryStore } from "../../../packages/storage/src/sqlite-store.js";
3
+ declare const store: SqliteMemoryStore;
4
+ declare const server: import("http").Server<typeof IncomingMessage, typeof ServerResponse>;
5
+ export { server, store };
6
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../apps/dashboard/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAQlF,QAAA,MAAM,KAAK,mBAA2C,CAAC;AAkBvD,QAAA,MAAM,MAAM,sEAsJV,CAAC;AA8LH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,360 @@
1
+ import { createServer } from "node:http";
2
+ import { Memory } from "../../../packages/core/src/memory.js";
3
+ import { SqliteMemoryStore } from "../../../packages/storage/src/sqlite-store.js";
4
+ import { LocalEmbeddingProvider } from "../../../packages/embeddings/src/local.js";
5
+ import * as fs from "node:fs";
6
+ import * as path from "node:path";
7
+ const PORT = Number(process.env.PORT ?? 4317);
8
+ const DB_PATH = process.env.AGENTMIND_DB ?? process.env.CTX_MEMORY_DB ?? "./.agentmind/memory.db";
9
+ const store = new SqliteMemoryStore({ path: DB_PATH });
10
+ const embed = new LocalEmbeddingProvider();
11
+ function json(res, data, status = 200) {
12
+ res.writeHead(status, { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET,POST,PATCH,DELETE,OPTIONS", "Access-Control-Allow-Headers": "Content-Type" });
13
+ res.end(JSON.stringify(data, null, 2));
14
+ }
15
+ function parseBody(req) {
16
+ return new Promise((resolve, reject) => {
17
+ let body = "";
18
+ req.on("data", (chunk) => (body += chunk));
19
+ req.on("end", () => {
20
+ try {
21
+ resolve(body ? JSON.parse(body) : {});
22
+ }
23
+ catch (e) {
24
+ reject(e);
25
+ }
26
+ });
27
+ });
28
+ }
29
+ const server = createServer(async (req, res) => {
30
+ if (req.method === "OPTIONS") {
31
+ res.writeHead(204, { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET,POST,PATCH,DELETE,OPTIONS", "Access-Control-Allow-Headers": "Content-Type" });
32
+ return res.end();
33
+ }
34
+ const url = new URL(req.url ?? "/", `http://localhost:${PORT}`);
35
+ const pathname = url.pathname;
36
+ try {
37
+ // GET /api/projects
38
+ if (req.method === "GET" && pathname === "/api/projects") {
39
+ const projects = await store.listProjects();
40
+ return json(res, projects);
41
+ }
42
+ // GET /api/projects/:id/stats
43
+ if (req.method === "GET" && pathname.match(/^\/api\/projects\/[^/]+\/stats$/)) {
44
+ const projectId = pathname.split("/")[3];
45
+ const memories = await store.listMemories(projectId);
46
+ const byType = {};
47
+ for (const m of memories)
48
+ byType[m.type] = (byType[m.type] ?? 0) + 1;
49
+ return json(res, { projectId, total: memories.length, active: memories.filter(m => !m.archived && m.status === "active").length, archived: memories.filter(m => m.archived).length, superseded: memories.filter(m => m.status === "superseded").length, byType });
50
+ }
51
+ // GET /api/projects/:id/memories
52
+ if (req.method === "GET" && pathname.match(/^\/api\/projects\/[^/]+\/memories$/)) {
53
+ const projectId = pathname.split("/")[3];
54
+ const type = url.searchParams.get("type");
55
+ const importance = url.searchParams.get("minImportance");
56
+ let memories = await store.listMemories(projectId);
57
+ if (type)
58
+ memories = memories.filter(m => m.type === type);
59
+ if (importance)
60
+ memories = memories.filter(m => m.importance >= Number(importance));
61
+ if (url.searchParams.get("archived") === "false")
62
+ memories = memories.filter(m => !m.archived);
63
+ return json(res, memories);
64
+ }
65
+ // POST /api/projects/:id/consolidate
66
+ if (req.method === "POST" && pathname.match(/^\/api\/projects\/[^/]+\/consolidate$/)) {
67
+ const projectId = pathname.split("/")[3];
68
+ const mem = await Memory.create({ project: projectId, store, embeddingProvider: embed });
69
+ // Try to resolve project id to name; if fails use id
70
+ const results = await mem.consolidate();
71
+ return json(res, results);
72
+ }
73
+ // GET /api/memories/:id
74
+ if (req.method === "GET" && pathname.match(/^\/api\/memories\/[^/]+$/)) {
75
+ const id = pathname.split("/")[3];
76
+ const mem = await store.getMemory(id);
77
+ if (!mem)
78
+ return json(res, { error: "not found" }, 404);
79
+ const emb = await store.getEmbedding(id);
80
+ const source = mem.sourceId ? await store.getSource(mem.sourceId) : null;
81
+ return json(res, { ...mem, embedding: emb ? { model: emb.model, dimensions: emb.vector.length, preview: emb.vector.slice(0, 5) } : null, source });
82
+ }
83
+ // PATCH /api/memories/:id
84
+ if (req.method === "PATCH" && pathname.match(/^\/api\/memories\/[^/]+$/)) {
85
+ const id = pathname.split("/")[3];
86
+ const body = await parseBody(req);
87
+ await store.updateMemory(id, body);
88
+ const mem = await store.getMemory(id);
89
+ return json(res, mem);
90
+ }
91
+ // DELETE /api/memories/:id
92
+ if (req.method === "DELETE" && pathname.match(/^\/api\/memories\/[^/]+$/)) {
93
+ const id = pathname.split("/")[3];
94
+ await store.deleteMemory(id);
95
+ return json(res, { ok: true });
96
+ }
97
+ // DELETE /api/projects/:id
98
+ if (req.method === "DELETE" && pathname.match(/^\/api\/projects\/[^/]+$/)) {
99
+ const id = pathname.split("/")[3];
100
+ await store.deleteProject(id);
101
+ return json(res, { ok: true });
102
+ }
103
+ // GET /api/projects/:id/export
104
+ if (req.method === "GET" && pathname.match(/^\/api\/projects\/[^/]+\/export$/)) {
105
+ const id = pathname.split("/")[3];
106
+ const memories = await store.listMemories(id);
107
+ return json(res, { projectId: id, memories });
108
+ }
109
+ // POST /api/search
110
+ if (req.method === "POST" && pathname === "/api/search") {
111
+ const body = await parseBody(req);
112
+ const { project, query, limit = 5, types } = body;
113
+ if (!project || !query)
114
+ return json(res, { error: "project and query required" }, 400);
115
+ const mem = await Memory.create({ project, store, embeddingProvider: embed });
116
+ const results = await mem.search(query, { limit, types });
117
+ return json(res, results);
118
+ }
119
+ // POST /api/context — Context Inspector
120
+ if (req.method === "POST" && pathname === "/api/context") {
121
+ const body = await parseBody(req);
122
+ const { project, query, maxTokens = 6000, limit = 10 } = body;
123
+ if (!project || !query)
124
+ return json(res, { error: "project and query required" }, 400);
125
+ const mem = await Memory.create({ project, store, embeddingProvider: embed });
126
+ const ctx = await mem.context({ query, maxTokens, limit });
127
+ // Also return retrieval details for inspector
128
+ const searchResults = await mem.search(query, { limit });
129
+ return json(res, { ...ctx, retrieval: searchResults.map(r => ({ id: r.memory.id, content: r.memory.content, score: r.score, semanticScore: r.semanticScore, keywordScore: r.keywordScore, type: r.memory.type, importance: r.memory.importance })) });
130
+ }
131
+ // POST /api/ingest
132
+ if (req.method === "POST" && pathname === "/api/ingest") {
133
+ const body = await parseBody(req);
134
+ const { project, role = "user", content, type = "conversation" } = body;
135
+ if (!project || !content)
136
+ return json(res, { error: "project and content required" }, 400);
137
+ const mem = await Memory.create({ project, store, embeddingProvider: embed });
138
+ const result = await mem.ingest({ role, content, sourceType: type });
139
+ return json(res, result);
140
+ }
141
+ // POST /api/remember
142
+ if (req.method === "POST" && pathname === "/api/remember") {
143
+ const body = await parseBody(req);
144
+ const { project, content, type = "fact", importance = 0.5 } = body;
145
+ if (!project || !content)
146
+ return json(res, { error: "project and content required" }, 400);
147
+ const mem = await Memory.create({ project, store, embeddingProvider: embed });
148
+ const created = await mem.remember({ content, type, importance });
149
+ return json(res, created);
150
+ }
151
+ // GET /api/retrievals/:projectId
152
+ if (req.method === "GET" && pathname.match(/^\/api\/retrievals\/[^/]+$/)) {
153
+ const projectId = pathname.split("/")[3];
154
+ const events = await store.listRetrievals(projectId);
155
+ return json(res, events);
156
+ }
157
+ // Static dashboard
158
+ if (pathname === "/" || pathname === "/index.html") {
159
+ const htmlPath = path.join(import.meta.dirname ?? ".", "dashboard.html");
160
+ if (fs.existsSync(htmlPath)) {
161
+ res.writeHead(200, { "Content-Type": "text/html" });
162
+ return res.end(fs.readFileSync(htmlPath, "utf-8"));
163
+ }
164
+ res.writeHead(200, { "Content-Type": "text/html" });
165
+ return res.end(DASHBOARD_HTML);
166
+ }
167
+ json(res, { error: "not found", path: pathname }, 404);
168
+ }
169
+ catch (e) {
170
+ json(res, { error: e.message ?? String(e), stack: e.stack }, 500);
171
+ }
172
+ });
173
+ const DASHBOARD_HTML = `<!doctype html>
174
+ <html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
175
+ <title>AgentMind Dashboard</title>
176
+ <script src="https://cdn.tailwindcss.com"></script>
177
+ <style>
178
+ ::-webkit-scrollbar{width:6px;height:6px} ::-webkit-scrollbar-thumb{background:#3f3f46;border-radius:3px}
179
+ </style>
180
+ </head><body class="bg-zinc-950 text-zinc-100 min-h-screen">
181
+ <div class="max-w-7xl mx-auto p-6">
182
+ <header class="flex items-center justify-between mb-6">
183
+ <h1 class="text-2xl font-bold tracking-tight">AgentMind <span class="text-zinc-500 font-normal">localhost</span></h1>
184
+ <div class="flex gap-2">
185
+ <select id="projectSelect" class="bg-zinc-900 border border-zinc-800 rounded px-3 py-1.5 text-sm"></select>
186
+ <button onclick="loadProjects()" class="bg-zinc-800 hover:bg-zinc-700 px-3 py-1.5 rounded text-sm">Refresh</button>
187
+ </div>
188
+ </header>
189
+
190
+ <!-- Overview -->
191
+ <div id="overview" class="grid grid-cols-4 gap-4 mb-6">
192
+ <div class="bg-zinc-900 border border-zinc-800 rounded-lg p-4"><div class="text-xs text-zinc-500">Total Memories</div><div id="stat-total" class="text-2xl font-mono">-</div></div>
193
+ <div class="bg-zinc-900 border border-zinc-800 rounded-lg p-4"><div class="text-xs text-zinc-500">Active / Archived</div><div id="stat-active" class="text-2xl font-mono">-</div></div>
194
+ <div class="bg-zinc-900 border border-zinc-800 rounded-lg p-4"><div class="text-xs text-zinc-500">By Type</div><div id="stat-types" class="text-xs font-mono">-</div></div>
195
+ <div class="bg-zinc-900 border border-zinc-800 rounded-lg p-4"><div class="text-xs text-zinc-500">Embedding</div><div class="text-xs font-mono">Local hash 256d<br>pgvector ready</div></div>
196
+ </div>
197
+
198
+ <!-- Tabs -->
199
+ <div class="flex gap-2 mb-4 border-b border-zinc-800">
200
+ <button onclick="showTab('memories')" id="tab-memories" class="px-4 py-2 text-sm font-medium border-b-2 border-white">Memories</button>
201
+ <button onclick="showTab('inspector')" id="tab-inspector" class="px-4 py-2 text-sm font-medium border-b-2 border-transparent text-zinc-400">Context Inspector</button>
202
+ <button onclick="showTab('retrieval')" id="tab-retrieval" class="px-4 py-2 text-sm font-medium border-b-2 border-transparent text-zinc-400">Retrieval Logs</button>
203
+ <button onclick="showTab('consolidate')" id="tab-consolidate" class="px-4 py-2 text-sm font-medium border-b-2 border-transparent text-zinc-400">Consolidation</button>
204
+ </div>
205
+
206
+ <!-- Memories -->
207
+ <div id="view-memories">
208
+ <div class="flex gap-2 mb-3">
209
+ <input id="memSearch" placeholder="Search memories..." class="flex-1 bg-zinc-900 border border-zinc-800 rounded px-3 py-2 text-sm" oninput="filterMemories()">
210
+ <select id="typeFilter" class="bg-zinc-900 border border-zinc-800 rounded px-3 py-2 text-sm" onchange="filterMemories()">
211
+ <option value="">All types</option><option>fact</option><option>decision</option><option>knowledge</option><option>preference</option><option>procedure</option><option>task</option><option>summary</option>
212
+ </select>
213
+ <button onclick="loadMemories()" class="bg-white text-black px-4 py-2 rounded text-sm font-medium">Search</button>
214
+ </div>
215
+ <div id="memoryList" class="grid gap-3"></div>
216
+ </div>
217
+
218
+ <!-- Inspector -->
219
+ <div id="view-inspector" class="hidden">
220
+ <div class="bg-zinc-900 border border-zinc-800 rounded-lg p-4 mb-4">
221
+ <div class="text-sm font-medium mb-2">Ask your memory</div>
222
+ <div class="flex gap-2">
223
+ <input id="inspectorQuery" placeholder="What database did we decide to use?" class="flex-1 bg-zinc-950 border border-zinc-800 rounded px-3 py-2 text-sm">
224
+ <button onclick="runInspector()" class="bg-white text-black px-4 py-2 rounded text-sm font-medium">Run</button>
225
+ </div>
226
+ </div>
227
+ <div class="grid grid-cols-2 gap-4">
228
+ <div class="bg-zinc-900 border border-zinc-800 rounded-lg p-4">
229
+ <div class="text-xs text-zinc-500 mb-2">RETRIEVED MEMORIES</div>
230
+ <div id="inspectorRetrieved" class="space-y-2 text-sm"></div>
231
+ </div>
232
+ <div class="bg-zinc-900 border border-zinc-800 rounded-lg p-4">
233
+ <div class="text-xs text-zinc-500 mb-2">FINAL CONTEXT <span id="inspectorTokens" class="font-mono"></span></div>
234
+ <pre id="inspectorContext" class="text-xs font-mono whitespace-pre-wrap bg-zinc-950 p-3 rounded"></pre>
235
+ </div>
236
+ </div>
237
+ </div>
238
+
239
+ <!-- Retrieval -->
240
+ <div id="view-retrieval" class="hidden">
241
+ <div id="retrievalList" class="space-y-2"></div>
242
+ </div>
243
+
244
+ <!-- Consolidate -->
245
+ <div id="view-consolidate" class="hidden">
246
+ <div class="bg-zinc-900 border border-zinc-800 rounded-lg p-4">
247
+ <button onclick="runConsolidate()" class="bg-white text-black px-4 py-2 rounded text-sm font-medium">Run consolidation</button>
248
+ <div id="consolidateResult" class="mt-4 text-sm font-mono"></div>
249
+ </div>
250
+ </div>
251
+
252
+ <!-- Memory detail modal -->
253
+ <dialog id="detailModal" class="bg-zinc-900 text-zinc-100 p-6 rounded-lg max-w-2xl w-full border border-zinc-800">
254
+ <div id="detailContent"></div>
255
+ <button onclick="this.closest('dialog').close()" class="mt-4 bg-zinc-800 px-4 py-2 rounded text-sm">Close</button>
256
+ </dialog>
257
+ </div>
258
+
259
+ <script>
260
+ let currentProject = null;
261
+ let allMemories = [];
262
+
263
+ async function loadProjects(){
264
+ const projects = await fetch('/api/projects').then(r=>r.json());
265
+ const sel = document.getElementById('projectSelect');
266
+ sel.innerHTML = projects.map(p=>\`<option value="\${p.id}">\${p.name}</option>\`).join('');
267
+ if(projects[0]){ currentProject = projects[0].id; sel.value = currentProject; loadOverview(); loadMemories(); loadRetrievals(); }
268
+ sel.onchange = e=>{ currentProject = e.target.value; loadOverview(); loadMemories(); loadRetrievals(); };
269
+ }
270
+ async function loadOverview(){
271
+ if(!currentProject) return;
272
+ const stats = await fetch('/api/projects/'+currentProject+'/stats').then(r=>r.json());
273
+ document.getElementById('stat-total').textContent = stats.total;
274
+ document.getElementById('stat-active').textContent = stats.active + ' / ' + stats.archived;
275
+ document.getElementById('stat-types').innerHTML = Object.entries(stats.byType).map(([k,v])=>\`\${k}: \${v}\`).join('<br>');
276
+ }
277
+ async function loadMemories(){
278
+ if(!currentProject) return;
279
+ const memories = await fetch('/api/projects/'+currentProject+'/memories').then(r=>r.json());
280
+ allMemories = memories;
281
+ renderMemories(memories);
282
+ }
283
+ function renderMemories(memories){
284
+ const typeFilter = document.getElementById('typeFilter').value;
285
+ const q = document.getElementById('memSearch').value.toLowerCase();
286
+ let filtered = memories;
287
+ if(typeFilter) filtered = filtered.filter(m=>m.type===typeFilter);
288
+ if(q) filtered = filtered.filter(m=>m.content.toLowerCase().includes(q));
289
+ document.getElementById('memoryList').innerHTML = filtered.map(m=>\`
290
+ <div class="bg-zinc-900 border border-zinc-800 rounded-lg p-4 hover:border-zinc-700 cursor-pointer" onclick="showDetail('\${m.id}')">
291
+ <div class="flex items-center gap-2 mb-1">
292
+ <span class="text-xs px-2 py-0.5 rounded bg-zinc-800 border border-zinc-700">\${m.type}</span>
293
+ <span class="text-xs \${m.status==='active'?'text-emerald-400':m.status==='superseded'?'text-amber-400':'text-zinc-500'}">\${m.status}</span>
294
+ <span class="text-xs text-zinc-500 ml-auto">\${m.importance.toFixed(2)} · \${m.accessCount} uses</span>
295
+ </div>
296
+ <div class="text-sm">\${m.content}</div>
297
+ <div class="text-xs text-zinc-500 mt-1">\${new Date(m.createdAt).toLocaleDateString()} · \${m.archived?'archived':''}</div>
298
+ </div>\`).join('') || '<div class="text-sm text-zinc-500">No memories</div>';
299
+ }
300
+ function filterMemories(){ renderMemories(allMemories); }
301
+ async function showDetail(id){
302
+ const m = await fetch('/api/memories/'+id).then(r=>r.json());
303
+ document.getElementById('detailContent').innerHTML = \`
304
+ <div class="text-xs text-zinc-500">\${m.type} · \${m.status}</div>
305
+ <div class="text-lg mt-2">\${m.content}</div>
306
+ <div class="grid grid-cols-2 gap-4 mt-4 text-xs font-mono">
307
+ <div>Importance: \${m.importance}<br>Confidence: \${m.confidence}<br>Status: \${m.status}<br>Access: \${m.accessCount}</div>
308
+ <div>Created: \${new Date(m.createdAt).toLocaleString()}<br>Updated: \${new Date(m.updatedAt).toLocaleString()}<br>Project: \${m.projectId.slice(0,8)}</div>
309
+ </div>
310
+ <div class="mt-3 text-xs">\${m.source ? 'Source: '+m.source.content : ''}</div>
311
+ <div class="mt-3 text-xs">Embedding: \${m.embedding ? m.embedding.model + ' ' + m.embedding.dimensions + 'd preview ' + JSON.stringify(m.embedding.preview) : 'none'}</div>
312
+ <button onclick="deleteMemory('\${m.id}')" class="mt-4 bg-red-900 hover:bg-red-800 px-3 py-1.5 rounded text-sm">Delete</button>
313
+ \`;
314
+ document.getElementById('detailModal').showModal();
315
+ }
316
+ async function deleteMemory(id){ await fetch('/api/memories/'+id,{method:'DELETE'}); document.getElementById('detailModal').close(); loadMemories(); loadOverview(); }
317
+ function showTab(name){
318
+ ['memories','inspector','retrieval','consolidate'].forEach(t=>{
319
+ document.getElementById('view-'+t).classList.toggle('hidden', t!==name);
320
+ document.getElementById('tab-'+t).className = t===name ? 'px-4 py-2 text-sm font-medium border-b-2 border-white' : 'px-4 py-2 text-sm font-medium border-b-2 border-transparent text-zinc-400';
321
+ });
322
+ if(name==='retrieval') loadRetrievals();
323
+ }
324
+ async function runInspector(){
325
+ const query = document.getElementById('inspectorQuery').value;
326
+ if(!query) return;
327
+ const res = await fetch('/api/context',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({project: currentProject, query})}).then(r=>r.json());
328
+ document.getElementById('inspectorTokens').textContent = '['+res.tokenCount+' tokens]';
329
+ document.getElementById('inspectorContext').textContent = res.text || '(no relevant memories)';
330
+ document.getElementById('inspectorRetrieved').innerHTML = (res.retrieval||[]).map((r,i)=>\`
331
+ <div class="bg-zinc-950 border border-zinc-800 rounded p-2">
332
+ <div class="flex justify-between text-xs"><span>#\${i+1} \${r.type}</span><span class="font-mono">score \${r.score.toFixed(3)} · sem \${r.semanticScore.toFixed(2)} · kw \${r.keywordScore.toFixed(2)}</span></div>
333
+ <div class="text-sm mt-1">\${r.content}</div>
334
+ </div>\`).join('');
335
+ }
336
+ async function loadRetrievals(){
337
+ if(!currentProject) return;
338
+ const events = await fetch('/api/retrievals/'+currentProject).then(r=>r.json());
339
+ document.getElementById('retrievalList').innerHTML = events.map(e=>\`
340
+ <div class="bg-zinc-900 border border-zinc-800 rounded p-3">
341
+ <div class="text-sm">Query: "\${e.query}"</div>
342
+ <div class="text-xs text-zinc-500">\${new Date(e.createdAt).toLocaleString()} · \${e.retrievedMemoryIds.length} memories · \${e.finalContextTokens} tokens</div>
343
+ <div class="text-xs font-mono mt-1">scores: \${JSON.stringify(e.scores).slice(0,120)}</div>
344
+ </div>\`).join('') || '<div class="text-sm text-zinc-500">No retrievals yet</div>';
345
+ }
346
+ async function runConsolidate(){
347
+ const res = await fetch('/api/projects/'+currentProject+'/consolidate',{method:'POST'}).then(r=>r.json());
348
+ document.getElementById('consolidateResult').textContent = JSON.stringify(res,null,2);
349
+ loadMemories(); loadOverview();
350
+ }
351
+
352
+ loadProjects();
353
+ </script>
354
+ </body></html>`;
355
+ server.listen(PORT, () => {
356
+ console.log(`AgentMind dashboard at http://localhost:${PORT}`);
357
+ console.log(`DB: ${DB_PATH}`);
358
+ });
359
+ export { server, store };
360
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../apps/dashboard/src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../cli/src/index.ts"],"names":[],"mappings":""}