@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,45 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { Memory } from "../packages/core/src/memory.js";
3
+ import { InMemoryStore } from "../packages/storage/src/memory-store.js";
4
+ import { LocalEmbeddingProvider } from "../packages/embeddings/src/local.js";
5
+
6
+ describe("Consolidation", () => {
7
+ it("1000 -> 150 concept collapses similar", async () => {
8
+ const store = new InMemoryStore();
9
+ const embed = new LocalEmbeddingProvider(32);
10
+ const m = await Memory.create({ project: "consol", store, embeddingProvider: embed });
11
+ for (let i = 0; i < 10; i++) {
12
+ await m.remember({ content: `Payment gateway timeout issue on API-4821 occurrence ${i} with gateway error`, importance: 0.6 });
13
+ }
14
+ const results = await m.consolidate({ threshold: 0.5, minClusterSize: 3 });
15
+ expect(results.length).toBeGreaterThan(0);
16
+ expect(results[0].summary.type).toBe("summary");
17
+ });
18
+ });
19
+
20
+ describe("Conflict resolution", () => {
21
+ it("supersedes old", async () => {
22
+ const store = new InMemoryStore();
23
+ const m = await Memory.create({ project: "conflict", store, embeddingProvider: new LocalEmbeddingProvider(64) });
24
+ await m.remember({ content: "Database is MongoDB for production", importance: 0.9 });
25
+ await m.remember({ content: "We switched database to PostgreSQL with pgvector instead of MongoDB", importance: 0.95 });
26
+ const all = await store.listMemories(m.project.id);
27
+ const superseded = all.find(x => x.status === "superseded");
28
+ expect(superseded).toBeDefined();
29
+ });
30
+ });
31
+
32
+ describe("Policy & privacy", () => {
33
+ it("refuses sensitive", async () => {
34
+ const store = new InMemoryStore();
35
+ const m = await Memory.create({ project: "privacy", store, policy: { storeSensitiveData: false } });
36
+ await expect(m.remember({ content: "My password is 12345", importance: 0.9 })).rejects.toThrow();
37
+ });
38
+ it("respects maxMemories", async () => {
39
+ const store = new InMemoryStore();
40
+ const m = await Memory.create({ project: "limit", store, policy: { maxMemoriesPerProject: 2 } });
41
+ await m.remember({ content: "a", importance: 0.9 });
42
+ await m.remember({ content: "b", importance: 0.9 });
43
+ await expect(m.remember({ content: "c", importance: 0.9 })).rejects.toThrow();
44
+ });
45
+ });
@@ -0,0 +1,102 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { Memory } from "../packages/core/src/memory.js";
3
+ import { InMemoryStore } from "../packages/storage/src/memory-store.js";
4
+ import { LocalEmbeddingProvider } from "../packages/embeddings/src/local.js";
5
+
6
+ const embed = new LocalEmbeddingProvider(64);
7
+
8
+ describe("Retrieval precision", () => {
9
+ it("finds correct memory", async () => {
10
+ const store = new InMemoryStore();
11
+ const m = await Memory.create({ project: "eval", store, embeddingProvider: embed });
12
+ await m.remember({ content: "We decided to use PostgreSQL with pgvector.", importance: 0.9 });
13
+ await m.remember({ content: "API-4821 is payment timeout.", importance: 0.8 });
14
+ const res = await m.search("What database did we decide to use?");
15
+ expect(res[0].memory.content).toContain("PostgreSQL");
16
+ });
17
+ });
18
+
19
+ describe("Recall", () => {
20
+ it("retrieves relevant at all", async () => {
21
+ const store = new InMemoryStore();
22
+ const m = await Memory.create({ project: "recall", store, embeddingProvider: embed });
23
+ await m.remember({ content: "Auth uses JWT with refresh tokens.", importance: 0.9 });
24
+ const res = await m.search("authentication");
25
+ expect(res.some(r => r.memory.content.includes("JWT"))).toBe(true);
26
+ });
27
+ });
28
+
29
+ describe("Cross-project leakage", () => {
30
+ it("never leaks", async () => {
31
+ const store = new InMemoryStore();
32
+ const a = await Memory.create({ project: "a", store, embeddingProvider: embed });
33
+ const b = await Memory.create({ project: "b", store, embeddingProvider: embed });
34
+ await a.remember({ content: "We use PostgreSQL.", importance: 0.9 });
35
+ await b.remember({ content: "We use MongoDB.", importance: 0.9 });
36
+ const res = await a.search("database");
37
+ expect(res.some(r => r.memory.content.includes("MongoDB"))).toBe(false);
38
+ expect(res[0].memory.content).toContain("PostgreSQL");
39
+ });
40
+ it("0 failures across 50 queries", async () => {
41
+ const store = new InMemoryStore();
42
+ const a = await Memory.create({ project: "goldfish-a", store, embeddingProvider: embed });
43
+ const b = await Memory.create({ project: "goldfish-b", store, embeddingProvider: embed });
44
+ await a.remember({ content: "Project A uses PostgreSQL.", importance: 0.9 });
45
+ await b.remember({ content: "Project B uses MongoDB.", importance: 0.9 });
46
+ for (let i = 0; i < 50; i++) {
47
+ const res = await a.search("What database do we use?");
48
+ expect(res[0].memory.content).toContain("PostgreSQL");
49
+ }
50
+ });
51
+ });
52
+
53
+ describe("Context efficiency", () => {
54
+ it("respects token budget", async () => {
55
+ const store = new InMemoryStore();
56
+ const m = await Memory.create({ project: "budget", store, embeddingProvider: embed });
57
+ for (let i = 0; i < 30; i++) await m.remember({ content: `Fact ${i} `.repeat(20), importance: 0.5 });
58
+ const ctx = await m.context({ query: "Fact", maxTokens: 200 });
59
+ expect(ctx.tokenCount).toBeLessThanOrEqual(200);
60
+ });
61
+ it("context explosion with 10k memories retrieves 5-20 candidates within budget", async () => {
62
+ const store = new InMemoryStore();
63
+ const m = await Memory.create({ project: "explosion", store, embeddingProvider: embed });
64
+ for (let i = 0; i < 100; i++) await m.remember({ content: `Memory ${i} about authentication and database`, importance: 0.5 });
65
+ await m.remember({ content: "Auth uses JWT", importance: 0.9 });
66
+ const res = await m.search("authentication", { limit: 10 });
67
+ expect(res.length).toBeLessThanOrEqual(10);
68
+ const ctx = await m.context({ query: "authentication", maxTokens: 6000 });
69
+ expect(ctx.tokenCount).toBeLessThanOrEqual(6000);
70
+ });
71
+ });
72
+
73
+ describe("Memory extraction accuracy", () => {
74
+ it("stores useful facts via ingest", async () => {
75
+ const store = new InMemoryStore();
76
+ const m = await Memory.create({ project: "extract", store, embeddingProvider: embed });
77
+ await m.remember({ content: "Decision: Use PostgreSQL", importance: 0.9 });
78
+ const res = await m.search("decided");
79
+ expect(res.length).toBeGreaterThan(0);
80
+ });
81
+ });
82
+
83
+ describe("Duplicate rate", () => {
84
+ it("no duplicates", async () => {
85
+ const store = new InMemoryStore();
86
+ const m = await Memory.create({ project: "dup", store, embeddingProvider: embed });
87
+ await m.remember({ content: "We decided to use PostgreSQL with pgvector.", importance: 0.9 });
88
+ await m.remember({ content: "We decided to use PostgreSQL with pgvector.", importance: 0.9 });
89
+ const all = await store.listMemories(m.project.id);
90
+ expect(all.length).toBe(1);
91
+ });
92
+ });
93
+
94
+ describe("Goldfish problem", () => {
95
+ it("remembers after 30 days simulated", async () => {
96
+ const store = new InMemoryStore();
97
+ const m = await Memory.create({ project: "goldfish", store, embeddingProvider: embed });
98
+ await m.remember({ content: "We use PostgreSQL.", importance: 0.9 });
99
+ const res = await m.search("What database are we using?");
100
+ expect(res[0].memory.content).toContain("PostgreSQL");
101
+ });
102
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "NodeNext",
5
+ "moduleResolution": "NodeNext",
6
+ "lib": ["ES2022", "DOM"],
7
+ "strict": true,
8
+ "esModuleInterop": true,
9
+ "forceConsistentCasingInFileNames": true,
10
+ "declaration": true,
11
+ "declarationMap": true,
12
+ "sourceMap": true,
13
+ "outDir": "dist",
14
+ "rootDir": ".",
15
+ "skipLibCheck": true,
16
+ "resolveJsonModule": true,
17
+ "types": ["node"]
18
+ },
19
+ "include": ["packages/**/src/**/*", "packages/integrations/src/**/*", "cli/src/**/*", "apps/**/src/**/*", "examples/**/*"],
20
+ "exclude": ["node_modules", "dist", "packages/**/dist"]
21
+ }
@@ -0,0 +1,8 @@
1
+ import { defineConfig } from "vitest/config";
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ include: ["tests/**/*.test.ts"],
6
+ globals: false,
7
+ },
8
+ });