anno-extension 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 (199) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +30 -0
  3. package/THIRD_PARTY_NOTICES.md +8 -0
  4. package/dist/browser-fs.d.ts +14 -0
  5. package/dist/browser-fs.d.ts.map +1 -0
  6. package/dist/browser-fs.js +69 -0
  7. package/dist/browser-fs.js.map +1 -0
  8. package/dist/config.d.ts +81 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +82 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/consolidate-v2.d.ts +15 -0
  13. package/dist/consolidate-v2.d.ts.map +1 -0
  14. package/dist/consolidate-v2.js +125 -0
  15. package/dist/consolidate-v2.js.map +1 -0
  16. package/dist/consolidation.d.ts +12 -0
  17. package/dist/consolidation.d.ts.map +1 -0
  18. package/dist/consolidation.js +199 -0
  19. package/dist/consolidation.js.map +1 -0
  20. package/dist/dedup.d.ts +18 -0
  21. package/dist/dedup.d.ts.map +1 -0
  22. package/dist/dedup.js +85 -0
  23. package/dist/dedup.js.map +1 -0
  24. package/dist/diagnostics.d.ts +24 -0
  25. package/dist/diagnostics.d.ts.map +1 -0
  26. package/dist/diagnostics.js +53 -0
  27. package/dist/diagnostics.js.map +1 -0
  28. package/dist/embedding-index.d.ts +27 -0
  29. package/dist/embedding-index.d.ts.map +1 -0
  30. package/dist/embedding-index.js +111 -0
  31. package/dist/embedding-index.js.map +1 -0
  32. package/dist/engine-archive.d.ts +37 -0
  33. package/dist/engine-archive.d.ts.map +1 -0
  34. package/dist/engine-archive.js +155 -0
  35. package/dist/engine-archive.js.map +1 -0
  36. package/dist/engine-episode-sync.d.ts +19 -0
  37. package/dist/engine-episode-sync.d.ts.map +1 -0
  38. package/dist/engine-episode-sync.js +186 -0
  39. package/dist/engine-episode-sync.js.map +1 -0
  40. package/dist/engine-injection-text.d.ts +46 -0
  41. package/dist/engine-injection-text.d.ts.map +1 -0
  42. package/dist/engine-injection-text.js +271 -0
  43. package/dist/engine-injection-text.js.map +1 -0
  44. package/dist/engine-insights.d.ts +22 -0
  45. package/dist/engine-insights.d.ts.map +1 -0
  46. package/dist/engine-insights.js +127 -0
  47. package/dist/engine-insights.js.map +1 -0
  48. package/dist/engine-links.d.ts +43 -0
  49. package/dist/engine-links.d.ts.map +1 -0
  50. package/dist/engine-links.js +223 -0
  51. package/dist/engine-links.js.map +1 -0
  52. package/dist/engine-recall-select.d.ts +84 -0
  53. package/dist/engine-recall-select.d.ts.map +1 -0
  54. package/dist/engine-recall-select.js +127 -0
  55. package/dist/engine-recall-select.js.map +1 -0
  56. package/dist/engine-reinforce.d.ts +18 -0
  57. package/dist/engine-reinforce.d.ts.map +1 -0
  58. package/dist/engine-reinforce.js +116 -0
  59. package/dist/engine-reinforce.js.map +1 -0
  60. package/dist/engine-scoring-v2.d.ts +35 -0
  61. package/dist/engine-scoring-v2.d.ts.map +1 -0
  62. package/dist/engine-scoring-v2.js +178 -0
  63. package/dist/engine-scoring-v2.js.map +1 -0
  64. package/dist/engine-v2-mapping.d.ts +17 -0
  65. package/dist/engine-v2-mapping.d.ts.map +1 -0
  66. package/dist/engine-v2-mapping.js +190 -0
  67. package/dist/engine-v2-mapping.js.map +1 -0
  68. package/dist/engine.d.ts +339 -0
  69. package/dist/engine.d.ts.map +1 -0
  70. package/dist/engine.js +1964 -0
  71. package/dist/engine.js.map +1 -0
  72. package/dist/eviction.d.ts +14 -0
  73. package/dist/eviction.d.ts.map +1 -0
  74. package/dist/eviction.js +26 -0
  75. package/dist/eviction.js.map +1 -0
  76. package/dist/extraction.d.ts +11 -0
  77. package/dist/extraction.d.ts.map +1 -0
  78. package/dist/extraction.js +261 -0
  79. package/dist/extraction.js.map +1 -0
  80. package/dist/full-insights-html.d.ts +9 -0
  81. package/dist/full-insights-html.d.ts.map +1 -0
  82. package/dist/full-insights-html.js +422 -0
  83. package/dist/full-insights-html.js.map +1 -0
  84. package/dist/full-insights-sections.d.ts +48 -0
  85. package/dist/full-insights-sections.d.ts.map +1 -0
  86. package/dist/full-insights-sections.js +231 -0
  87. package/dist/full-insights-sections.js.map +1 -0
  88. package/dist/full-insights.d.ts +22 -0
  89. package/dist/full-insights.d.ts.map +1 -0
  90. package/dist/full-insights.js +370 -0
  91. package/dist/full-insights.js.map +1 -0
  92. package/dist/hash-embedding.d.ts +9 -0
  93. package/dist/hash-embedding.d.ts.map +1 -0
  94. package/dist/hash-embedding.js +44 -0
  95. package/dist/hash-embedding.js.map +1 -0
  96. package/dist/human-insights.d.ts +28 -0
  97. package/dist/human-insights.d.ts.map +1 -0
  98. package/dist/human-insights.js +260 -0
  99. package/dist/human-insights.js.map +1 -0
  100. package/dist/i18n.d.ts +64 -0
  101. package/dist/i18n.d.ts.map +1 -0
  102. package/dist/i18n.js +367 -0
  103. package/dist/i18n.js.map +1 -0
  104. package/dist/index.d.ts +27 -0
  105. package/dist/index.d.ts.map +1 -0
  106. package/dist/index.js +21 -0
  107. package/dist/index.js.map +1 -0
  108. package/dist/insights-html.d.ts +9 -0
  109. package/dist/insights-html.d.ts.map +1 -0
  110. package/dist/insights-html.js +432 -0
  111. package/dist/insights-html.js.map +1 -0
  112. package/dist/linking.d.ts +22 -0
  113. package/dist/linking.d.ts.map +1 -0
  114. package/dist/linking.js +192 -0
  115. package/dist/linking.js.map +1 -0
  116. package/dist/llm-json.d.ts +10 -0
  117. package/dist/llm-json.d.ts.map +1 -0
  118. package/dist/llm-json.js +193 -0
  119. package/dist/llm-json.js.map +1 -0
  120. package/dist/privacy.d.ts +17 -0
  121. package/dist/privacy.d.ts.map +1 -0
  122. package/dist/privacy.js +53 -0
  123. package/dist/privacy.js.map +1 -0
  124. package/dist/procedural-v2.d.ts +9 -0
  125. package/dist/procedural-v2.d.ts.map +1 -0
  126. package/dist/procedural-v2.js +123 -0
  127. package/dist/procedural-v2.js.map +1 -0
  128. package/dist/reconsolidate-v2.d.ts +19 -0
  129. package/dist/reconsolidate-v2.d.ts.map +1 -0
  130. package/dist/reconsolidate-v2.js +115 -0
  131. package/dist/reconsolidate-v2.js.map +1 -0
  132. package/dist/scoring.d.ts +32 -0
  133. package/dist/scoring.d.ts.map +1 -0
  134. package/dist/scoring.js +108 -0
  135. package/dist/scoring.js.map +1 -0
  136. package/dist/store-v2.d.ts +35 -0
  137. package/dist/store-v2.d.ts.map +1 -0
  138. package/dist/store-v2.js +98 -0
  139. package/dist/store-v2.js.map +1 -0
  140. package/dist/store.d.ts +22 -0
  141. package/dist/store.d.ts.map +1 -0
  142. package/dist/store.js +116 -0
  143. package/dist/store.js.map +1 -0
  144. package/dist/turn-context.d.ts +37 -0
  145. package/dist/turn-context.d.ts.map +1 -0
  146. package/dist/turn-context.js +31 -0
  147. package/dist/turn-context.js.map +1 -0
  148. package/dist/types-v2.d.ts +190 -0
  149. package/dist/types-v2.d.ts.map +1 -0
  150. package/dist/types-v2.js +8 -0
  151. package/dist/types-v2.js.map +1 -0
  152. package/dist/types.d.ts +330 -0
  153. package/dist/types.d.ts.map +1 -0
  154. package/dist/types.js +8 -0
  155. package/dist/types.js.map +1 -0
  156. package/dist/update.d.ts +31 -0
  157. package/dist/update.d.ts.map +1 -0
  158. package/dist/update.js +250 -0
  159. package/dist/update.js.map +1 -0
  160. package/package.json +34 -0
  161. package/src/browser-fs.ts +67 -0
  162. package/src/config.ts +138 -0
  163. package/src/consolidate-v2.ts +158 -0
  164. package/src/consolidation.ts +229 -0
  165. package/src/dedup.ts +91 -0
  166. package/src/diagnostics.ts +81 -0
  167. package/src/embedding-index.ts +138 -0
  168. package/src/engine-archive.ts +167 -0
  169. package/src/engine-episode-sync.ts +237 -0
  170. package/src/engine-injection-text.ts +334 -0
  171. package/src/engine-insights.ts +182 -0
  172. package/src/engine-links.ts +311 -0
  173. package/src/engine-recall-select.ts +298 -0
  174. package/src/engine-reinforce.ts +154 -0
  175. package/src/engine-scoring-v2.ts +188 -0
  176. package/src/engine-v2-mapping.ts +204 -0
  177. package/src/engine.ts +2499 -0
  178. package/src/eviction.ts +38 -0
  179. package/src/extraction.ts +300 -0
  180. package/src/full-insights-html.ts +474 -0
  181. package/src/full-insights-sections.ts +305 -0
  182. package/src/full-insights.ts +423 -0
  183. package/src/hash-embedding.ts +48 -0
  184. package/src/human-insights.ts +345 -0
  185. package/src/i18n.ts +455 -0
  186. package/src/index.ts +117 -0
  187. package/src/insights-html.ts +478 -0
  188. package/src/linking.ts +228 -0
  189. package/src/llm-json.ts +194 -0
  190. package/src/privacy.ts +54 -0
  191. package/src/procedural-v2.ts +142 -0
  192. package/src/reconsolidate-v2.ts +145 -0
  193. package/src/scoring.ts +156 -0
  194. package/src/store-v2.ts +138 -0
  195. package/src/store.ts +137 -0
  196. package/src/turn-context.ts +56 -0
  197. package/src/types-v2.ts +244 -0
  198. package/src/types.ts +372 -0
  199. package/src/update.ts +271 -0
package/LICENSE ADDED
@@ -0,0 +1,7 @@
1
+ This package is distributed under the GNU General Public License, version 3.
2
+
3
+ The complete license text is available at:
4
+ https://www.gnu.org/licenses/gpl-3.0.txt
5
+
6
+ The upstream license text is also included in the ANNO repository at
7
+ licenses/Catui-GPL-3.0.txt.
package/README.md ADDED
@@ -0,0 +1,30 @@
1
+ # anno-extension
2
+
3
+ Browser-native NanoMem memory engine for Chrome extensions and other web
4
+ applications. It stores the engine's logical JSON files in IndexedDB and
5
+ provides layered memory recall, consolidation, privacy filtering, embedding
6
+ indexes, and HTML insights rendering.
7
+
8
+ ## Install
9
+
10
+ ```sh
11
+ npm install anno-extension
12
+ ```
13
+
14
+ ## Import
15
+
16
+ ```ts
17
+ import { NanoMemEngine, createHashedEmbeddingFn } from "anno-extension";
18
+ ```
19
+
20
+ The package is browser-oriented and has no runtime dependency on Node.js. The
21
+ public API and all implementation source are included in the published
22
+ package. Model calls are supplied by the host application through the exported
23
+ configuration and callback types; this package does not contain API keys or a
24
+ hosted service.
25
+
26
+ ## License and attribution
27
+
28
+ `anno-extension` is released under GPL-3.0-only. The engine is a browser
29
+ adaptation of CatUI's memory core; see `THIRD_PARTY_NOTICES.md` and the
30
+ repository's `licenses/Catui-GPL-3.0.txt` for attribution and license details.
@@ -0,0 +1,8 @@
1
+ # Third-party notices
2
+
3
+ The memory engine in this package is adapted from CatUI's `mem-core` package.
4
+ The corresponding upstream package is identified as GPL-3.0 licensed. This
5
+ package preserves that license for the adapted engine.
6
+
7
+ The full license text is available at:
8
+ https://www.gnu.org/licenses/gpl-3.0.txt
@@ -0,0 +1,14 @@
1
+ export declare function join(...parts: string[]): string;
2
+ export declare function dirname(path: string): string;
3
+ export declare function mkdir(_path: string, _options?: {
4
+ recursive?: boolean;
5
+ }): Promise<void>;
6
+ export declare function readFile(path: string): Promise<string>;
7
+ export declare function writeFile(path: string, text: string): Promise<void>;
8
+ export declare function withMemoryLock<T>(name: string, action: () => Promise<T>): Promise<T>;
9
+ export declare function readdir(path: string): Promise<string[]>;
10
+ export declare function cp(source: string, target: string, options?: {
11
+ recursive?: boolean;
12
+ }): Promise<void>;
13
+ export declare function removeTree(path: string): Promise<void>;
14
+ //# sourceMappingURL=browser-fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-fs.d.ts","sourceRoot":"","sources":["../src/browser-fs.ts"],"names":[],"mappings":"AA2BA,wBAAgB,IAAI,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAE/C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAuD;AACpG,wBAAsB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAwC;AACrI,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI5D;AACD,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAgE;AAE1I,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEpF;AACD,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAI7D;AACD,wBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAKzG;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW5D"}
@@ -0,0 +1,69 @@
1
+ const DB_NAME = 'anno-nanomem-files-v1';
2
+ const STORE = 'files';
3
+ let databasePromise;
4
+ function database() {
5
+ if (!databasePromise)
6
+ databasePromise = new Promise((resolve, reject) => {
7
+ const request = indexedDB.open(DB_NAME, 1);
8
+ request.onupgradeneeded = () => request.result.createObjectStore(STORE);
9
+ request.onsuccess = () => resolve(request.result);
10
+ request.onerror = () => reject(request.error);
11
+ });
12
+ return databasePromise;
13
+ }
14
+ function transact(mode, action) {
15
+ return database().then(db => new Promise((resolve, reject) => {
16
+ const transaction = db.transaction(STORE, mode);
17
+ const request = action(transaction.objectStore(STORE));
18
+ let value;
19
+ request.onsuccess = () => { value = request.result; };
20
+ request.onerror = () => reject(request.error);
21
+ transaction.onerror = () => reject(transaction.error);
22
+ transaction.onabort = () => reject(transaction.error);
23
+ transaction.oncomplete = () => resolve(value);
24
+ }));
25
+ }
26
+ export function join(...parts) {
27
+ return parts.join('/').replace(/\/+/g, '/');
28
+ }
29
+ export function dirname(path) { return path.slice(0, path.lastIndexOf('/')) || '/'; }
30
+ export async function mkdir(_path, _options) { }
31
+ export async function readFile(path) {
32
+ const value = await transact('readonly', store => store.get(path));
33
+ if (value === undefined)
34
+ throw new Error(`File not found: ${path}`);
35
+ return value;
36
+ }
37
+ export async function writeFile(path, text) { await transact('readwrite', store => store.put(text, path)); }
38
+ // Web Locks coordinate extension pages and the MV3 service worker.
39
+ export function withMemoryLock(name, action) {
40
+ return navigator.locks.request(`anno:${name}`, action).then(result => result);
41
+ }
42
+ export async function readdir(path) {
43
+ const keys = await transact('readonly', store => store.getAllKeys());
44
+ const prefix = path.replace(/\/+$/, '') + '/';
45
+ return [...new Set(keys.map(String).filter(key => key.startsWith(prefix)).map(key => key.slice(prefix.length).split('/')[0]))];
46
+ }
47
+ export async function cp(source, target, options) {
48
+ const keys = await transact('readonly', store => store.getAllKeys());
49
+ const matching = keys.map(String).filter(key => key === source || (options?.recursive && key.startsWith(source.replace(/\/+$/, '') + '/')));
50
+ if (!matching.length)
51
+ throw new Error(`File not found: ${source}`);
52
+ for (const key of matching)
53
+ await writeFile(target + key.slice(source.length), await readFile(key));
54
+ }
55
+ export async function removeTree(path) {
56
+ const keys = await transact('readonly', store => store.getAllKeys());
57
+ const prefix = path.replace(/\/+$/, '') + '/';
58
+ await database().then(db => new Promise((resolve, reject) => {
59
+ const transaction = db.transaction(STORE, 'readwrite');
60
+ const store = transaction.objectStore(STORE);
61
+ for (const key of keys.map(String))
62
+ if (key === path || key.startsWith(prefix))
63
+ store.delete(key);
64
+ transaction.oncomplete = () => resolve();
65
+ transaction.onerror = () => reject(transaction.error);
66
+ transaction.onabort = () => reject(transaction.error);
67
+ }));
68
+ }
69
+ //# sourceMappingURL=browser-fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-fs.js","sourceRoot":"","sources":["../src/browser-fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * [WHO]: ProgressiveRecallConfig, NanomemConfig, getConfig, BudgetConfig, ScoreWeights
3
+ * [FROM]: Depends on browser-fs.ts and ./types.js
4
+ * [TO]: Consumed by packages/mem-core/src/index.ts
5
+ * [HERE]: packages/mem-core/src/config.ts - configuration management for memory system
6
+ */
7
+ import type { MemoryScope } from "./types.js";
8
+ export interface ProgressiveRecallConfig {
9
+ /** Score threshold for Active tier — inject full detail */
10
+ thresholdActive: number;
11
+ /** Score threshold for Cue tier — inject name + summary + id */
12
+ thresholdCue: number;
13
+ /** Budget ratio for Active tier (default 0.15 = 15%) */
14
+ budgetActive: number;
15
+ /** Budget ratio for Cue tier (default 0.70 = 70%) */
16
+ budgetCue: number;
17
+ /** Force entries created within this many hours to Active tier */
18
+ forceRecentHours: number;
19
+ /** Force entries with importance >= this value to Active tier */
20
+ forceImportanceMin: number;
21
+ }
22
+ export interface EmbeddingConfig {
23
+ enabled: boolean;
24
+ model: string;
25
+ dim: number;
26
+ autoSync: boolean;
27
+ }
28
+ export interface NanomemConfig {
29
+ memoryDir: string;
30
+ tokenBudget: number;
31
+ budget: {
32
+ lessons: number;
33
+ knowledge: number;
34
+ events: number;
35
+ episodes: number;
36
+ preferences: number;
37
+ work: number;
38
+ facets: number;
39
+ };
40
+ halfLife: Record<string, number>;
41
+ maxEntries: {
42
+ knowledge: number;
43
+ lessons: number;
44
+ events: number;
45
+ preferences: number;
46
+ work: number;
47
+ facets: number;
48
+ };
49
+ consolidationThreshold: number;
50
+ /** Stanford-style retrieval scoring weights */
51
+ scoreWeights: {
52
+ recency: number;
53
+ importance: number;
54
+ relevance: number;
55
+ };
56
+ /** Utility-weighted eviction: access frequency vs base impact */
57
+ evictionWeights: {
58
+ accessFrequency: number;
59
+ baseImpact: number;
60
+ };
61
+ /** Default scope for all operations */
62
+ defaultScope?: MemoryScope;
63
+ /** Locale for LLM prompts and injection templates */
64
+ locale: "en" | "zh";
65
+ /** Strength growth factor on each successful recall (spaced repetition) */
66
+ strengthGrowthFactor: number;
67
+ /** Progressive recall injection configuration */
68
+ progressiveRecall: ProgressiveRecallConfig;
69
+ /** Default forgetting windows for less important memories */
70
+ forgetting: {
71
+ ambientTtlDays: number;
72
+ workTtlDays: number;
73
+ reviveCooldownDays: number;
74
+ };
75
+ /** Embedding configuration for semantic episodic/procedural recall */
76
+ embeddings: EmbeddingConfig;
77
+ /** Weight for SAL structural proximity boost in V2 recall scoring (0 = disabled). */
78
+ structuralWeight: number;
79
+ }
80
+ export declare function getConfig(overrides?: Partial<NanomemConfig>): NanomemConfig;
81
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,uBAAuB;IACvC,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,gBAAgB,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,kBAAkB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpI,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACtH,sBAAsB,EAAE,MAAM,CAAC;IAC/B,+CAA+C;IAC/C,YAAY,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACzE,iEAAiE;IACjE,eAAe,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,uCAAuC;IACvC,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,qDAAqD;IACrD,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC;IACpB,2EAA2E;IAC3E,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iDAAiD;IACjD,iBAAiB,EAAE,uBAAuB,CAAC;IAC3C,6DAA6D;IAC7D,UAAU,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAAC;IACxF,sEAAsE;IACtE,UAAU,EAAE,eAAe,CAAC;IAC5B,qFAAqF;IACrF,gBAAgB,EAAE,MAAM,CAAC;CACzB;AAiDD,wBAAgB,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CA8B3E"}
package/dist/config.js ADDED
@@ -0,0 +1,82 @@
1
+ /**
2
+ * [WHO]: ProgressiveRecallConfig, NanomemConfig, getConfig, BudgetConfig, ScoreWeights
3
+ * [FROM]: Depends on browser-fs.ts and ./types.js
4
+ * [TO]: Consumed by packages/mem-core/src/index.ts
5
+ * [HERE]: packages/mem-core/src/config.ts - configuration management for memory system
6
+ */
7
+ import { join } from "./browser-fs.js";
8
+ const DEFAULT_BUDGET = {
9
+ lessons: 0.18,
10
+ knowledge: 0.17,
11
+ events: 0.15,
12
+ episodes: 0.18,
13
+ preferences: 0.1,
14
+ work: 0.2,
15
+ facets: 0.12,
16
+ };
17
+ const DEFAULT_HALF_LIFE = {
18
+ lesson: 90,
19
+ fact: 60,
20
+ episode: 14,
21
+ preference: 120,
22
+ decision: 45,
23
+ entity: 30,
24
+ event: 180,
25
+ work: 45,
26
+ pattern: 180,
27
+ struggle: 120,
28
+ };
29
+ const DEFAULT_MAX_ENTRIES = { knowledge: 1000, lessons: 500, events: 300, preferences: 200, work: 400, facets: 400 };
30
+ const DEFAULT_SCORE_WEIGHTS = { recency: 1, importance: 1, relevance: 1 };
31
+ const DEFAULT_EVICTION_WEIGHTS = { accessFrequency: 0.4, baseImpact: 0.6 };
32
+ const DEFAULT_PROGRESSIVE_RECALL = {
33
+ thresholdActive: 0.7,
34
+ thresholdCue: 0.35,
35
+ budgetActive: 0.15,
36
+ budgetCue: 0.70,
37
+ forceRecentHours: 24,
38
+ forceImportanceMin: 9,
39
+ };
40
+ const DEFAULT_FORGETTING = {
41
+ ambientTtlDays: 45,
42
+ workTtlDays: 21,
43
+ reviveCooldownDays: 7,
44
+ };
45
+ const DEFAULT_EMBEDDINGS = {
46
+ enabled: true,
47
+ model: "local-hash-v1",
48
+ dim: 256,
49
+ autoSync: true,
50
+ };
51
+ const DEFAULT_STRUCTURAL_WEIGHT = 0.15;
52
+ export function getConfig(overrides) {
53
+ const tokenBudget = 6000;
54
+ const memoryDir = overrides?.memoryDir || join("anno", "memory");
55
+ const locale = overrides?.locale || "en";
56
+ const embeddingsDim = DEFAULT_EMBEDDINGS.dim;
57
+ const embeddingsModel = DEFAULT_EMBEDDINGS.model;
58
+ return {
59
+ memoryDir,
60
+ tokenBudget: overrides?.tokenBudget ?? tokenBudget,
61
+ budget: overrides?.budget ?? { ...DEFAULT_BUDGET },
62
+ halfLife: overrides?.halfLife ?? { ...DEFAULT_HALF_LIFE },
63
+ maxEntries: overrides?.maxEntries ?? { ...DEFAULT_MAX_ENTRIES },
64
+ consolidationThreshold: overrides?.consolidationThreshold ?? 10,
65
+ scoreWeights: overrides?.scoreWeights ?? { ...DEFAULT_SCORE_WEIGHTS },
66
+ evictionWeights: overrides?.evictionWeights ?? { ...DEFAULT_EVICTION_WEIGHTS },
67
+ defaultScope: overrides?.defaultScope,
68
+ locale,
69
+ strengthGrowthFactor: overrides?.strengthGrowthFactor ?? 1.5,
70
+ progressiveRecall: overrides?.progressiveRecall ?? { ...DEFAULT_PROGRESSIVE_RECALL },
71
+ forgetting: overrides?.forgetting ?? { ...DEFAULT_FORGETTING },
72
+ embeddings: overrides?.embeddings ??
73
+ {
74
+ enabled: DEFAULT_EMBEDDINGS.enabled,
75
+ model: embeddingsModel,
76
+ dim: embeddingsDim,
77
+ autoSync: DEFAULT_EMBEDDINGS.autoSync,
78
+ },
79
+ structuralWeight: overrides?.structuralWeight ?? DEFAULT_STRUCTURAL_WEIGHT,
80
+ };
81
+ }
82
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * [WHO]: consolidateV2Memories
3
+ * [FROM]: Depends on ./config.js, ./scoring.js, ./store.js, ./types.js, ./types-v2.js
4
+ * [TO]: Consumed by packages/mem-core/src/index.ts
5
+ * [HERE]: packages/mem-core/src/consolidate-v2.ts - v2 episodic/procedural to semantic consolidation
6
+ */
7
+ import type { NanomemConfig } from "./config.js";
8
+ import type { MemoryEntry } from "./types.js";
9
+ import type { EpisodeFacet, EpisodeMemory, ProceduralMemory, SemanticMemory } from "./types-v2.js";
10
+ export declare function consolidateV2Memories(episodes: EpisodeMemory[], facets: EpisodeFacet[], procedural: ProceduralMemory[], cfg: NanomemConfig): {
11
+ entries: MemoryEntry[];
12
+ semantic: SemanticMemory[];
13
+ episodeSemanticMap: Map<string, string[]>;
14
+ };
15
+ //# sourceMappingURL=consolidate-v2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consolidate-v2.d.ts","sourceRoot":"","sources":["../src/consolidate-v2.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAyEnG,wBAAgB,qBAAqB,CACpC,QAAQ,EAAE,aAAa,EAAE,EACzB,MAAM,EAAE,YAAY,EAAE,EACtB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,GAAG,EAAE,aAAa,GAChB;IACF,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC1C,CAgEA"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * [WHO]: consolidateV2Memories
3
+ * [FROM]: Depends on ./config.js, ./scoring.js, ./store.js, ./types.js, ./types-v2.js
4
+ * [TO]: Consumed by packages/mem-core/src/index.ts
5
+ * [HERE]: packages/mem-core/src/consolidate-v2.ts - v2 episodic/procedural to semantic consolidation
6
+ */
7
+ import { extractTags } from "./scoring.js";
8
+ import { deriveNameFromContent, deriveSummaryFromContent } from "./store.js";
9
+ function makeId(prefix) {
10
+ return `${prefix}:${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
11
+ }
12
+ function toMemoryEntry(type, project, content, importance, cfg) {
13
+ const detail = content.trim();
14
+ const name = deriveNameFromContent(detail);
15
+ const summary = deriveSummaryFromContent(detail);
16
+ const now = new Date().toISOString();
17
+ return {
18
+ id: makeId("mem"),
19
+ type,
20
+ name,
21
+ summary,
22
+ detail,
23
+ content: detail,
24
+ tags: extractTags(`${name} ${summary} ${detail}`),
25
+ project,
26
+ importance,
27
+ strength: cfg.halfLife[type] ?? 30,
28
+ created: now,
29
+ eventTime: now,
30
+ accessCount: 0,
31
+ relatedIds: [],
32
+ scope: cfg.defaultScope,
33
+ retention: type === "event" || type === "lesson" || type === "decision" ? "key-event" : "ambient",
34
+ salience: Math.max(4, importance),
35
+ stability: type === "event" ? "stable" : "situational",
36
+ };
37
+ }
38
+ function toSemanticMemory(semanticType, project, content, importance, sourceEpisodeIds) {
39
+ const detail = content.trim();
40
+ const name = deriveNameFromContent(detail);
41
+ const summary = deriveSummaryFromContent(detail);
42
+ const now = new Date().toISOString();
43
+ return {
44
+ id: makeId("semantic"),
45
+ kind: "semantic",
46
+ semanticType,
47
+ name,
48
+ summary,
49
+ detail,
50
+ accessCount: 0,
51
+ importance,
52
+ salience: Math.max(4, importance),
53
+ confidence: 0.78,
54
+ retention: semanticType === "event" || semanticType === "lesson" || semanticType === "decision" ? "key-event" : "ambient",
55
+ stability: semanticType === "event" ? "stable" : "situational",
56
+ tags: extractTags(`${name} ${summary} ${detail}`),
57
+ sourceEpisodeIds,
58
+ evidence: [],
59
+ scope: { project },
60
+ createdAt: now,
61
+ updatedAt: now,
62
+ abstractionLevel: "generalization",
63
+ };
64
+ }
65
+ export function consolidateV2Memories(episodes, facets, procedural, cfg) {
66
+ const entries = [];
67
+ const semantic = [];
68
+ const episodeSemanticMap = new Map();
69
+ for (const episode of episodes) {
70
+ if (episode.derivedSemanticIds?.length)
71
+ continue;
72
+ const episodeFacets = facets.filter((facet) => facet.episodeId === episode.id);
73
+ const producedIds = [];
74
+ const project = episode.scope?.project || "unknown";
75
+ if (episode.importance >= 8 || episode.salience >= 8) {
76
+ const content = [episode.summary, episode.userGoal ? `Goal: ${episode.userGoal}` : "", episode.outcome ? `Outcome: ${episode.outcome}` : ""]
77
+ .filter(Boolean)
78
+ .join("\n");
79
+ const entry = toMemoryEntry("event", project, content, Math.max(8, episode.importance), cfg);
80
+ const sem = toSemanticMemory("event", project, content, Math.max(8, episode.importance), [episode.id]);
81
+ entries.push(entry);
82
+ semantic.push(sem);
83
+ producedIds.push(sem.id);
84
+ }
85
+ for (const facet of episodeFacets) {
86
+ if (facet.facetType === "error") {
87
+ const content = `Recurring failure mode: ${facet.searchText}${facet.anchorText ? `\nContext: ${facet.anchorText}` : ""}`;
88
+ const entry = toMemoryEntry("lesson", project, content, Math.max(7, facet.importance), cfg);
89
+ const sem = toSemanticMemory("lesson", project, content, Math.max(7, facet.importance), [episode.id]);
90
+ entries.push(entry);
91
+ semantic.push(sem);
92
+ producedIds.push(sem.id);
93
+ }
94
+ if (facet.facetType === "insight") {
95
+ const content = `Useful insight: ${facet.searchText}${facet.anchorText ? `\nFrom: ${facet.anchorText}` : ""}`;
96
+ const entry = toMemoryEntry("fact", project, content, Math.max(6, facet.importance), cfg);
97
+ const sem = toSemanticMemory("fact", project, content, Math.max(6, facet.importance), [episode.id]);
98
+ entries.push(entry);
99
+ semantic.push(sem);
100
+ producedIds.push(sem.id);
101
+ }
102
+ if (facet.facetType === "goal" && facet.searchText) {
103
+ const content = `Goal pattern: ${facet.searchText}`;
104
+ const sem = toSemanticMemory("decision", project, content, Math.max(5, facet.importance), [episode.id]);
105
+ semantic.push(sem);
106
+ producedIds.push(sem.id);
107
+ }
108
+ }
109
+ for (const proc of procedural.filter((item) => item.sourceEpisodeIds?.includes(episode.id))) {
110
+ const content = [proc.name, proc.summary, proc.boundaries ? `Boundaries: ${proc.boundaries}` : "", proc.steps.slice(0, 4).map((step) => step.text).join("\n")]
111
+ .filter(Boolean)
112
+ .join("\n");
113
+ const entry = toMemoryEntry("decision", project, content, Math.max(7, proc.importance), cfg);
114
+ const sem = toSemanticMemory("decision", project, content, Math.max(7, proc.importance), [episode.id]);
115
+ entries.push(entry);
116
+ semantic.push(sem);
117
+ producedIds.push(sem.id);
118
+ }
119
+ if (producedIds.length) {
120
+ episodeSemanticMap.set(episode.id, producedIds);
121
+ }
122
+ }
123
+ return { entries, semantic, episodeSemanticMap };
124
+ }
125
+ //# sourceMappingURL=consolidate-v2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consolidate-v2.js","sourceRoot":"","sources":["../src/consolidate-v2.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * [WHO]: consolidateEpisodes, extractFactsFromEpisodes, extractLessonsFromEpisodes
3
+ * [FROM]: Depends on ./config.js, ./diagnostics.js, ./i18n.js, ./llm-json.js, ./scoring.js, ./store.js, ./types.js
4
+ * [TO]: Consumed by packages/mem-core/src/index.ts
5
+ * [HERE]: packages/mem-core/src/consolidation.ts - episodic→semantic consolidation, heart of multi-store memory model
6
+ */
7
+ import type { NanomemConfig } from "./config.js";
8
+ import type { Episode, LlmFn, MemoryEntry } from "./types.js";
9
+ export declare function consolidateEpisodes(episodes: Episode[], cfg: NanomemConfig, llmFn?: LlmFn, options?: {
10
+ signal?: AbortSignal;
11
+ }): Promise<MemoryEntry[]>;
12
+ //# sourceMappingURL=consolidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consolidation.d.ts","sourceRoot":"","sources":["../src/consolidation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMjD,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAM9D,wBAAsB,mBAAmB,CACxC,QAAQ,EAAE,OAAO,EAAE,EACnB,GAAG,EAAE,aAAa,EAClB,KAAK,CAAC,EAAE,KAAK,EACb,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAChC,OAAO,CAAC,WAAW,EAAE,CAAC,CAmBxB"}