@monoes/memory 1.0.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 (178) hide show
  1. package/README.md +902 -0
  2. package/dist/agent-memory-scope.d.ts +131 -0
  3. package/dist/agent-memory-scope.d.ts.map +1 -0
  4. package/dist/agent-memory-scope.js +230 -0
  5. package/dist/agent-memory-scope.js.map +1 -0
  6. package/dist/agentdb-adapter.d.ts +165 -0
  7. package/dist/agentdb-adapter.d.ts.map +1 -0
  8. package/dist/agentdb-adapter.js +836 -0
  9. package/dist/agentdb-adapter.js.map +1 -0
  10. package/dist/agentdb-backend.d.ts +218 -0
  11. package/dist/agentdb-backend.d.ts.map +1 -0
  12. package/dist/agentdb-backend.js +879 -0
  13. package/dist/agentdb-backend.js.map +1 -0
  14. package/dist/auto-memory-bridge.d.ts +230 -0
  15. package/dist/auto-memory-bridge.d.ts.map +1 -0
  16. package/dist/auto-memory-bridge.js +730 -0
  17. package/dist/auto-memory-bridge.js.map +1 -0
  18. package/dist/cache-manager.d.ts +134 -0
  19. package/dist/cache-manager.d.ts.map +1 -0
  20. package/dist/cache-manager.js +410 -0
  21. package/dist/cache-manager.js.map +1 -0
  22. package/dist/checkpointer.d.ts +78 -0
  23. package/dist/checkpointer.d.ts.map +1 -0
  24. package/dist/checkpointer.js +174 -0
  25. package/dist/checkpointer.js.map +1 -0
  26. package/dist/controller-registry.d.ts +216 -0
  27. package/dist/controller-registry.d.ts.map +1 -0
  28. package/dist/controller-registry.js +897 -0
  29. package/dist/controller-registry.js.map +1 -0
  30. package/dist/database-provider.d.ts +87 -0
  31. package/dist/database-provider.d.ts.map +1 -0
  32. package/dist/database-provider.js +434 -0
  33. package/dist/database-provider.js.map +1 -0
  34. package/dist/diskann-backend.d.ts +126 -0
  35. package/dist/diskann-backend.d.ts.map +1 -0
  36. package/dist/diskann-backend.js +324 -0
  37. package/dist/diskann-backend.js.map +1 -0
  38. package/dist/episodic-store.d.ts +58 -0
  39. package/dist/episodic-store.d.ts.map +1 -0
  40. package/dist/episodic-store.js +160 -0
  41. package/dist/episodic-store.js.map +1 -0
  42. package/dist/hnsw-index.d.ts +111 -0
  43. package/dist/hnsw-index.d.ts.map +1 -0
  44. package/dist/hnsw-index.js +778 -0
  45. package/dist/hnsw-index.js.map +1 -0
  46. package/dist/hnsw-lite.d.ts +29 -0
  47. package/dist/hnsw-lite.d.ts.map +1 -0
  48. package/dist/hnsw-lite.js +236 -0
  49. package/dist/hnsw-lite.js.map +1 -0
  50. package/dist/hybrid-backend.d.ts +299 -0
  51. package/dist/hybrid-backend.d.ts.map +1 -0
  52. package/dist/hybrid-backend.js +804 -0
  53. package/dist/hybrid-backend.js.map +1 -0
  54. package/dist/index.d.ts +228 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +379 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/knowledge/document-chunker.d.ts +22 -0
  59. package/dist/knowledge/document-chunker.d.ts.map +1 -0
  60. package/dist/knowledge/document-chunker.js +52 -0
  61. package/dist/knowledge/document-chunker.js.map +1 -0
  62. package/dist/knowledge/index.d.ts +12 -0
  63. package/dist/knowledge/index.d.ts.map +1 -0
  64. package/dist/knowledge/index.js +9 -0
  65. package/dist/knowledge/index.js.map +1 -0
  66. package/dist/knowledge/knowledge-retriever.d.ts +48 -0
  67. package/dist/knowledge/knowledge-retriever.d.ts.map +1 -0
  68. package/dist/knowledge/knowledge-retriever.js +80 -0
  69. package/dist/knowledge/knowledge-retriever.js.map +1 -0
  70. package/dist/knowledge/knowledge-store.d.ts +58 -0
  71. package/dist/knowledge/knowledge-store.d.ts.map +1 -0
  72. package/dist/knowledge/knowledge-store.js +121 -0
  73. package/dist/knowledge/knowledge-store.js.map +1 -0
  74. package/dist/learning-bridge.d.ts +162 -0
  75. package/dist/learning-bridge.d.ts.map +1 -0
  76. package/dist/learning-bridge.js +522 -0
  77. package/dist/learning-bridge.js.map +1 -0
  78. package/dist/memory-graph.d.ts +123 -0
  79. package/dist/memory-graph.d.ts.map +1 -0
  80. package/dist/memory-graph.js +412 -0
  81. package/dist/memory-graph.js.map +1 -0
  82. package/dist/migration.d.ts +68 -0
  83. package/dist/migration.d.ts.map +1 -0
  84. package/dist/migration.js +513 -0
  85. package/dist/migration.js.map +1 -0
  86. package/dist/partitioned-hnsw.d.ts +65 -0
  87. package/dist/partitioned-hnsw.d.ts.map +1 -0
  88. package/dist/partitioned-hnsw.js +209 -0
  89. package/dist/partitioned-hnsw.js.map +1 -0
  90. package/dist/persistent-sona.d.ts +144 -0
  91. package/dist/persistent-sona.d.ts.map +1 -0
  92. package/dist/persistent-sona.js +333 -0
  93. package/dist/persistent-sona.js.map +1 -0
  94. package/dist/procedural/action-record.d.ts +19 -0
  95. package/dist/procedural/action-record.d.ts.map +1 -0
  96. package/dist/procedural/action-record.js +51 -0
  97. package/dist/procedural/action-record.js.map +1 -0
  98. package/dist/procedural/action-sequence-extractor.d.ts +25 -0
  99. package/dist/procedural/action-sequence-extractor.d.ts.map +1 -0
  100. package/dist/procedural/action-sequence-extractor.js +91 -0
  101. package/dist/procedural/action-sequence-extractor.js.map +1 -0
  102. package/dist/procedural/index.d.ts +14 -0
  103. package/dist/procedural/index.d.ts.map +1 -0
  104. package/dist/procedural/index.js +13 -0
  105. package/dist/procedural/index.js.map +1 -0
  106. package/dist/procedural/learned-skill.d.ts +17 -0
  107. package/dist/procedural/learned-skill.d.ts.map +1 -0
  108. package/dist/procedural/learned-skill.js +73 -0
  109. package/dist/procedural/learned-skill.js.map +1 -0
  110. package/dist/procedural/procedure-extractor-worker.d.ts +27 -0
  111. package/dist/procedural/procedure-extractor-worker.d.ts.map +1 -0
  112. package/dist/procedural/procedure-extractor-worker.js +39 -0
  113. package/dist/procedural/procedure-extractor-worker.js.map +1 -0
  114. package/dist/procedural/skill-registry.d.ts +25 -0
  115. package/dist/procedural/skill-registry.d.ts.map +1 -0
  116. package/dist/procedural/skill-registry.js +56 -0
  117. package/dist/procedural/skill-registry.js.map +1 -0
  118. package/dist/procedural/types.d.ts +67 -0
  119. package/dist/procedural/types.d.ts.map +1 -0
  120. package/dist/procedural/types.js +15 -0
  121. package/dist/procedural/types.js.map +1 -0
  122. package/dist/prompt-version-store.d.ts +59 -0
  123. package/dist/prompt-version-store.d.ts.map +1 -0
  124. package/dist/prompt-version-store.js +175 -0
  125. package/dist/prompt-version-store.js.map +1 -0
  126. package/dist/query-builder.d.ts +52 -0
  127. package/dist/query-builder.d.ts.map +1 -0
  128. package/dist/query-builder.js +134 -0
  129. package/dist/query-builder.js.map +1 -0
  130. package/dist/rvf-backend.d.ts +51 -0
  131. package/dist/rvf-backend.d.ts.map +1 -0
  132. package/dist/rvf-backend.js +499 -0
  133. package/dist/rvf-backend.js.map +1 -0
  134. package/dist/rvf-learning-store.d.ts +141 -0
  135. package/dist/rvf-learning-store.d.ts.map +1 -0
  136. package/dist/rvf-learning-store.js +344 -0
  137. package/dist/rvf-learning-store.js.map +1 -0
  138. package/dist/rvf-migration.d.ts +45 -0
  139. package/dist/rvf-migration.d.ts.map +1 -0
  140. package/dist/rvf-migration.js +254 -0
  141. package/dist/rvf-migration.js.map +1 -0
  142. package/dist/sqlite-backend.d.ts +127 -0
  143. package/dist/sqlite-backend.d.ts.map +1 -0
  144. package/dist/sqlite-backend.js +618 -0
  145. package/dist/sqlite-backend.js.map +1 -0
  146. package/dist/sqljs-backend.d.ts +128 -0
  147. package/dist/sqljs-backend.d.ts.map +1 -0
  148. package/dist/sqljs-backend.js +611 -0
  149. package/dist/sqljs-backend.js.map +1 -0
  150. package/dist/tier-manager.d.ts +79 -0
  151. package/dist/tier-manager.d.ts.map +1 -0
  152. package/dist/tier-manager.js +169 -0
  153. package/dist/tier-manager.js.map +1 -0
  154. package/dist/tiers/contextual.d.ts +43 -0
  155. package/dist/tiers/contextual.d.ts.map +1 -0
  156. package/dist/tiers/contextual.js +102 -0
  157. package/dist/tiers/contextual.js.map +1 -0
  158. package/dist/tiers/entity.d.ts +46 -0
  159. package/dist/tiers/entity.d.ts.map +1 -0
  160. package/dist/tiers/entity.js +106 -0
  161. package/dist/tiers/entity.js.map +1 -0
  162. package/dist/tiers/index.d.ts +4 -0
  163. package/dist/tiers/index.d.ts.map +1 -0
  164. package/dist/tiers/index.js +4 -0
  165. package/dist/tiers/index.js.map +1 -0
  166. package/dist/tiers/short-term.d.ts +42 -0
  167. package/dist/tiers/short-term.d.ts.map +1 -0
  168. package/dist/tiers/short-term.js +89 -0
  169. package/dist/tiers/short-term.js.map +1 -0
  170. package/dist/types/checkpoint.d.ts +44 -0
  171. package/dist/types/checkpoint.d.ts.map +1 -0
  172. package/dist/types/checkpoint.js +8 -0
  173. package/dist/types/checkpoint.js.map +1 -0
  174. package/dist/types.d.ts +526 -0
  175. package/dist/types.d.ts.map +1 -0
  176. package/dist/types.js +58 -0
  177. package/dist/types.js.map +1 -0
  178. package/package.json +46 -0
@@ -0,0 +1,58 @@
1
+ /**
2
+ * JSONL-backed knowledge store for per-agent knowledge base.
3
+ *
4
+ * Stores document metadata and text chunks as JSON-lines files,
5
+ * avoiding any native SQLite dependency.
6
+ *
7
+ * @module @monomind/memory/knowledge/knowledge-store
8
+ */
9
+ /** Metadata record persisted in metadata.jsonl */
10
+ export interface MetadataRecord {
11
+ filePath: string;
12
+ scope: string;
13
+ contentHash: string;
14
+ chunkCount: number;
15
+ indexedAt: string;
16
+ }
17
+ /** Chunk record persisted in chunks.jsonl */
18
+ export interface ChunkRecord {
19
+ chunkId: string;
20
+ namespace: string;
21
+ text: string;
22
+ metadata: Record<string, unknown>;
23
+ }
24
+ export declare class KnowledgeStore {
25
+ private readonly dirPath;
26
+ constructor(dirPath: string);
27
+ /**
28
+ * Map a scope string to a knowledge-namespaced partition name.
29
+ */
30
+ getPartitionNamespace(scope: string): string;
31
+ /**
32
+ * Check whether a file needs to be (re-)indexed by comparing its current
33
+ * content hash against the stored hash.
34
+ */
35
+ documentNeedsReindex(filePath: string, scope: string): boolean;
36
+ /**
37
+ * Index a document: read it, hash, chunk, and persist metadata + chunks as JSONL.
38
+ */
39
+ indexDocument(filePath: string, scope: string): {
40
+ chunksIndexed: number;
41
+ };
42
+ /**
43
+ * Remove all stored data (chunks + metadata) for a given document/scope.
44
+ */
45
+ removeDocument(filePath: string, scope: string): void;
46
+ /**
47
+ * Read all chunk records for a given namespace.
48
+ */
49
+ getChunks(namespace: string): ChunkRecord[];
50
+ private metadataPath;
51
+ private chunksPath;
52
+ private hashFile;
53
+ private findMetadata;
54
+ private appendJsonl;
55
+ private readJsonl;
56
+ private filterJsonl;
57
+ }
58
+ //# sourceMappingURL=knowledge-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-store.d.ts","sourceRoot":"","sources":["../../src/knowledge/knowledge-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,kDAAkD;AAClD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,6CAA6C;AAC7C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,MAAM;IAK3B;;OAEG;IACH,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI5C;;;OAGG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAO9D;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE;IA0CzE;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAgBrD;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE;IAQ3C,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,WAAW;CAKpB"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * JSONL-backed knowledge store for per-agent knowledge base.
3
+ *
4
+ * Stores document metadata and text chunks as JSON-lines files,
5
+ * avoiding any native SQLite dependency.
6
+ *
7
+ * @module @monomind/memory/knowledge/knowledge-store
8
+ */
9
+ import * as fs from 'node:fs';
10
+ import * as path from 'node:path';
11
+ import * as crypto from 'node:crypto';
12
+ import { chunkDocument } from './document-chunker.js';
13
+ export class KnowledgeStore {
14
+ dirPath;
15
+ constructor(dirPath) {
16
+ this.dirPath = dirPath;
17
+ fs.mkdirSync(dirPath, { recursive: true });
18
+ }
19
+ /**
20
+ * Map a scope string to a knowledge-namespaced partition name.
21
+ */
22
+ getPartitionNamespace(scope) {
23
+ return scope === 'shared' ? 'knowledge:shared' : `knowledge:${scope}`;
24
+ }
25
+ /**
26
+ * Check whether a file needs to be (re-)indexed by comparing its current
27
+ * content hash against the stored hash.
28
+ */
29
+ documentNeedsReindex(filePath, scope) {
30
+ const currentHash = this.hashFile(filePath);
31
+ const stored = this.findMetadata(filePath, scope);
32
+ if (!stored)
33
+ return true;
34
+ return stored.contentHash !== currentHash;
35
+ }
36
+ /**
37
+ * Index a document: read it, hash, chunk, and persist metadata + chunks as JSONL.
38
+ */
39
+ indexDocument(filePath, scope) {
40
+ const content = fs.readFileSync(filePath, 'utf-8');
41
+ const contentHash = crypto.createHash('sha256').update(content).digest('hex');
42
+ const namespace = this.getPartitionNamespace(scope);
43
+ const docId = `${scope}:${filePath}`;
44
+ // Remove any existing data for this doc before re-indexing
45
+ this.removeDocument(filePath, scope);
46
+ const chunks = chunkDocument(docId, content);
47
+ // Persist chunk records
48
+ for (const chunk of chunks) {
49
+ const record = {
50
+ chunkId: chunk.chunkId,
51
+ namespace,
52
+ text: chunk.text,
53
+ metadata: {
54
+ filePath,
55
+ scope,
56
+ docId,
57
+ chunkIndex: chunk.chunkIndex,
58
+ startChar: chunk.startChar,
59
+ endChar: chunk.endChar,
60
+ },
61
+ };
62
+ this.appendJsonl(this.chunksPath(), record);
63
+ }
64
+ // Persist metadata
65
+ const meta = {
66
+ filePath,
67
+ scope,
68
+ contentHash,
69
+ chunkCount: chunks.length,
70
+ indexedAt: new Date().toISOString(),
71
+ };
72
+ this.appendJsonl(this.metadataPath(), meta);
73
+ return { chunksIndexed: chunks.length };
74
+ }
75
+ /**
76
+ * Remove all stored data (chunks + metadata) for a given document/scope.
77
+ */
78
+ removeDocument(filePath, scope) {
79
+ const namespace = this.getPartitionNamespace(scope);
80
+ // Filter out matching metadata records
81
+ this.filterJsonl(this.metadataPath(), (r) => !(r.filePath === filePath && r.scope === scope));
82
+ // Filter out matching chunk records
83
+ this.filterJsonl(this.chunksPath(), (r) => !(r.namespace === namespace && r.metadata?.filePath === filePath));
84
+ }
85
+ /**
86
+ * Read all chunk records for a given namespace.
87
+ */
88
+ getChunks(namespace) {
89
+ return this.readJsonl(this.chunksPath()).filter((r) => r.namespace === namespace);
90
+ }
91
+ // ── private helpers ──────────────────────────────────────────────
92
+ metadataPath() {
93
+ return path.join(this.dirPath, 'metadata.jsonl');
94
+ }
95
+ chunksPath() {
96
+ return path.join(this.dirPath, 'chunks.jsonl');
97
+ }
98
+ hashFile(filePath) {
99
+ const content = fs.readFileSync(filePath, 'utf-8');
100
+ return crypto.createHash('sha256').update(content).digest('hex');
101
+ }
102
+ findMetadata(filePath, scope) {
103
+ const records = this.readJsonl(this.metadataPath());
104
+ return records.find((r) => r.filePath === filePath && r.scope === scope);
105
+ }
106
+ appendJsonl(file, record) {
107
+ fs.appendFileSync(file, JSON.stringify(record) + '\n', 'utf-8');
108
+ }
109
+ readJsonl(file) {
110
+ if (!fs.existsSync(file))
111
+ return [];
112
+ const lines = fs.readFileSync(file, 'utf-8').split('\n').filter(Boolean);
113
+ return lines.map((line) => JSON.parse(line));
114
+ }
115
+ filterJsonl(file, predicate) {
116
+ const records = this.readJsonl(file);
117
+ const filtered = records.filter(predicate);
118
+ fs.writeFileSync(file, filtered.map((r) => JSON.stringify(r)).join('\n') + (filtered.length ? '\n' : ''), 'utf-8');
119
+ }
120
+ }
121
+ //# sourceMappingURL=knowledge-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-store.js","sourceRoot":"","sources":["../../src/knowledge/knowledge-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,aAAa,EAAkB,MAAM,uBAAuB,CAAC;AAmBtE,MAAM,OAAO,cAAc;IACR,OAAO,CAAS;IAEjC,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,KAAa;QACjC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,aAAa,KAAK,EAAE,CAAC;IACxE,CAAC;IAED;;;OAGG;IACH,oBAAoB,CAAC,QAAgB,EAAE,KAAa;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,MAAM,CAAC,WAAW,KAAK,WAAW,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAgB,EAAE,KAAa;QAC3C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9E,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,GAAG,KAAK,IAAI,QAAQ,EAAE,CAAC;QAErC,2DAA2D;QAC3D,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAErC,MAAM,MAAM,GAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAE1D,wBAAwB;QACxB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAgB;gBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,SAAS;gBACT,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,QAAQ,EAAE;oBACR,QAAQ;oBACR,KAAK;oBACL,KAAK;oBACL,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;aACF,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;QAC9C,CAAC;QAED,mBAAmB;QACnB,MAAM,IAAI,GAAmB;YAC3B,QAAQ;YACR,KAAK;YACL,WAAW;YACX,UAAU,EAAE,MAAM,CAAC,MAAM;YACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC;QAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAgB,EAAE,KAAa;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAEpD,uCAAuC;QACvC,IAAI,CAAC,WAAW,CACd,IAAI,CAAC,YAAY,EAAE,EACnB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CACvD,CAAC;QAEF,oCAAoC;QACpC,IAAI,CAAC,WAAW,CACd,IAAI,CAAC,UAAU,EAAE,EACjB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,IAAK,CAAC,CAAC,QAAQ,EAAE,QAAmB,KAAK,QAAQ,CAAC,CACrF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,SAAiB;QACzB,OAAO,IAAI,CAAC,SAAS,CAAc,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAC1D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CACjC,CAAC;IACJ,CAAC;IAED,oEAAoE;IAE5D,YAAY;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IACnD,CAAC;IAEO,UAAU;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACjD,CAAC;IAEO,QAAQ,CAAC,QAAgB;QAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IAEO,YAAY,CAAC,QAAgB,EAAE,KAAa;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAiB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACpE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAC3E,CAAC;IAEO,WAAW,CAAI,IAAY,EAAE,MAAS;QAC5C,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IAEO,SAAS,CAAI,IAAY;QAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC,CAAC;IACpD,CAAC;IAEO,WAAW,CAAI,IAAY,EAAE,SAAiC;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAI,IAAI,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3C,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IACrH,CAAC;CACF"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * LearningBridge - Connects AutoMemoryBridge to NeuralLearningSystem
3
+ *
4
+ * When insights are recorded via AutoMemoryBridge, this module triggers
5
+ * neural learning trajectories so the system continuously improves from
6
+ * its own discoveries. The NeuralLearningSystem dependency is optional:
7
+ * when unavailable, all operations degrade gracefully to no-ops.
8
+ *
9
+ * @module @monomind/memory/learning-bridge
10
+ */
11
+ import { EventEmitter } from 'node:events';
12
+ import type { IMemoryBackend, SONAMode } from './types.js';
13
+ import type { MemoryInsight } from './auto-memory-bridge.js';
14
+ /**
15
+ * Factory function that returns a neural system instance.
16
+ * Used for dependency injection so tests can supply a mock.
17
+ */
18
+ export type NeuralLoader = () => Promise<any>;
19
+ /** Configuration for the LearningBridge */
20
+ export interface LearningBridgeConfig {
21
+ /** SONA operating mode (default: 'balanced') */
22
+ sonaMode?: SONAMode;
23
+ /** Per-hour confidence decay rate (default: 0.005) */
24
+ confidenceDecayRate?: number;
25
+ /** Confidence boost per access (default: 0.03) */
26
+ accessBoostAmount?: number;
27
+ /** Maximum confidence value (default: 1.0) */
28
+ maxConfidence?: number;
29
+ /** Minimum confidence floor (default: 0.1) */
30
+ minConfidence?: number;
31
+ /** EWC regularization strength (default: 2000) */
32
+ ewcLambda?: number;
33
+ /** Min active trajectories before consolidation runs (default: 10) */
34
+ consolidationThreshold?: number;
35
+ /** Enable the bridge (default: true). When false all methods are no-ops */
36
+ enabled?: boolean;
37
+ /**
38
+ * Optional factory for the neural learning system.
39
+ * When provided, this replaces the default dynamic import of @monomind/neural.
40
+ * Primarily used for testing.
41
+ */
42
+ neuralLoader?: NeuralLoader;
43
+ /**
44
+ * Optional real embedder function injected by the CLI.
45
+ * When provided, replaces the cross-package dynamic import of memory-bridge.js,
46
+ * eliminating the architectural coupling between @monomind/memory and @monomind/cli.
47
+ * Signature: (text: string) => Promise<number[]>
48
+ */
49
+ embedder?: (text: string) => Promise<number[]>;
50
+ }
51
+ /** Aggregated learning statistics */
52
+ export interface LearningStats {
53
+ totalTrajectories: number;
54
+ completedTrajectories: number;
55
+ activeTrajectories: number;
56
+ totalConsolidations: number;
57
+ totalDecays: number;
58
+ avgConfidenceBoost: number;
59
+ neuralAvailable: boolean;
60
+ }
61
+ /** Result returned by consolidate() */
62
+ export interface ConsolidateResult {
63
+ trajectoriesCompleted: number;
64
+ patternsLearned: number;
65
+ entriesUpdated: number;
66
+ durationMs: number;
67
+ }
68
+ /** A single pattern match returned by findSimilarPatterns() */
69
+ export interface PatternMatch {
70
+ content: string;
71
+ similarity: number;
72
+ category: string;
73
+ confidence: number;
74
+ }
75
+ /**
76
+ * Connects AutoMemoryBridge insights to the NeuralLearningSystem.
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * const bridge = new LearningBridge(memoryBackend);
81
+ * await bridge.onInsightRecorded(insight, entryId);
82
+ * await bridge.onInsightAccessed(entryId);
83
+ * const result = await bridge.consolidate();
84
+ * ```
85
+ */
86
+ export declare class LearningBridge extends EventEmitter {
87
+ private neural;
88
+ private backend;
89
+ private config;
90
+ private activeTrajectories;
91
+ private stats;
92
+ private destroyed;
93
+ private neuralInitPromise;
94
+ private backfillInProgress;
95
+ constructor(backend: IMemoryBackend, config?: LearningBridgeConfig);
96
+ /**
97
+ * Notify the bridge that an insight has been recorded in AgentDB.
98
+ * Creates a learning trajectory so the neural system can track the
99
+ * insight's lifecycle.
100
+ */
101
+ onInsightRecorded(insight: MemoryInsight, entryId: string): Promise<void>;
102
+ /**
103
+ * Notify the bridge that an insight entry was accessed.
104
+ * Boosts confidence in the backend and records a step in the
105
+ * trajectory if one exists.
106
+ */
107
+ onInsightAccessed(entryId: string): Promise<void>;
108
+ /**
109
+ * Consolidate active trajectories by completing them in the neural system.
110
+ * Only runs when there are enough active trajectories to justify the cost.
111
+ */
112
+ consolidate(): Promise<ConsolidateResult>;
113
+ /**
114
+ * Apply time-based confidence decay to entries in the given namespace.
115
+ * Entries not accessed for more than one hour see their confidence reduced
116
+ * proportionally to the hours elapsed, down to minConfidence.
117
+ *
118
+ * @returns number of entries whose confidence was lowered
119
+ */
120
+ decayConfidences(namespace: string): Promise<number>;
121
+ /**
122
+ * Find patterns similar to the given content using the neural system.
123
+ * Returns an empty array when the neural system is unavailable.
124
+ */
125
+ findSimilarPatterns(content: string, k?: number): Promise<PatternMatch[]>;
126
+ /** Return aggregated learning statistics */
127
+ getStats(): LearningStats;
128
+ /** Tear down the bridge. Subsequent method calls become no-ops. */
129
+ destroy(): void;
130
+ /**
131
+ * Lazily attempt to load and initialize the NeuralLearningSystem.
132
+ * The promise is cached so that repeated calls do not re-attempt
133
+ * after a failure.
134
+ */
135
+ private initNeural;
136
+ private loadNeural;
137
+ /**
138
+ * Write PatternLearner patterns to .monomind/neural/patterns.json so that
139
+ * intelligence.ts (Pipeline B) can find them via findSimilarPatterns / getAllPatterns.
140
+ * This is the Pipeline A→B bridge: automatic session learning → routing.
141
+ */
142
+ private flushNeuralPatternsToFile;
143
+ /**
144
+ * Background task: generate embeddings for patterns written with empty
145
+ * embedding arrays. Runs fire-and-forget after flushNeuralPatternsToFile.
146
+ * Non-fatal — any error is silently swallowed.
147
+ */
148
+ private backfillEmbeddings;
149
+ /**
150
+ * Generate a real semantic embedding via the memory bridge embedder,
151
+ * falling back to a deterministic hash embedding when unavailable.
152
+ * V1: using real embeddings is critical for meaningful LoRA weight updates.
153
+ */
154
+ private createEmbedding;
155
+ /**
156
+ * Deterministic hash-based embedding fallback.
157
+ * Used only when no real embedder is available.
158
+ */
159
+ private createHashEmbedding;
160
+ }
161
+ export default LearningBridge;
162
+ //# sourceMappingURL=learning-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-bridge.d.ts","sourceRoot":"","sources":["../src/learning-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAe,QAAQ,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,yBAAyB,CAAC;AAI9E;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;AAE9C,2CAA2C;AAC3C,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAChD;AAED,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,uCAAuC;AACvC,MAAM,WAAW,iBAAiB;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAyBD;;;;;;;;;;GAUG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,KAAK,CAOX;IACF,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,kBAAkB,CAAS;gBAEvB,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,oBAAoB;IAQlE;;;;OAIG;IACG,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B/E;;;;OAIG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqCvD;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAoE/C;;;;;;OAMG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8C1D;;;OAGG;IACG,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAwBlF,4CAA4C;IAC5C,QAAQ,IAAI,aAAa;IAiBzB,mEAAmE;IACnE,OAAO,IAAI,IAAI;IAmBf;;;;OAIG;YACW,UAAU;YAWV,UAAU;IA0BxB;;;;OAIG;YACW,yBAAyB;IAgEvC;;;;OAIG;YACW,kBAAkB;IAqDhC;;;;OAIG;YACW,eAAe;IA0C7B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CA0B5B;AAED,eAAe,cAAc,CAAC"}