@pencil-agent/nano-mem 0.0.1

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 (93) hide show
  1. package/CLAUDE.md +258 -0
  2. package/README.md +146 -0
  3. package/dist/cli.d.ts +8 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +90 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config.d.ts +46 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +48 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/consolidation.d.ts +13 -0
  12. package/dist/consolidation.d.ts.map +1 -0
  13. package/dist/consolidation.js +111 -0
  14. package/dist/consolidation.js.map +1 -0
  15. package/dist/engine.d.ts +67 -0
  16. package/dist/engine.d.ts.map +1 -0
  17. package/dist/engine.js +492 -0
  18. package/dist/engine.js.map +1 -0
  19. package/dist/eviction.d.ts +16 -0
  20. package/dist/eviction.d.ts.map +1 -0
  21. package/dist/eviction.js +22 -0
  22. package/dist/eviction.js.map +1 -0
  23. package/dist/extension.d.ts +11 -0
  24. package/dist/extension.d.ts.map +1 -0
  25. package/dist/extension.js +264 -0
  26. package/dist/extension.js.map +1 -0
  27. package/dist/extraction.d.ts +10 -0
  28. package/dist/extraction.d.ts.map +1 -0
  29. package/dist/extraction.js +136 -0
  30. package/dist/extraction.js.map +1 -0
  31. package/dist/full-insights-html.d.ts +8 -0
  32. package/dist/full-insights-html.d.ts.map +1 -0
  33. package/dist/full-insights-html.js +311 -0
  34. package/dist/full-insights-html.js.map +1 -0
  35. package/dist/full-insights.d.ts +21 -0
  36. package/dist/full-insights.d.ts.map +1 -0
  37. package/dist/full-insights.js +327 -0
  38. package/dist/full-insights.js.map +1 -0
  39. package/dist/i18n.d.ts +50 -0
  40. package/dist/i18n.d.ts.map +1 -0
  41. package/dist/i18n.js +169 -0
  42. package/dist/i18n.js.map +1 -0
  43. package/dist/index.d.ts +18 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +14 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/insights-html.d.ts +8 -0
  48. package/dist/insights-html.d.ts.map +1 -0
  49. package/dist/insights-html.js +431 -0
  50. package/dist/insights-html.js.map +1 -0
  51. package/dist/linking.d.ts +11 -0
  52. package/dist/linking.d.ts.map +1 -0
  53. package/dist/linking.js +40 -0
  54. package/dist/linking.js.map +1 -0
  55. package/dist/privacy.d.ts +16 -0
  56. package/dist/privacy.d.ts.map +1 -0
  57. package/dist/privacy.js +52 -0
  58. package/dist/privacy.js.map +1 -0
  59. package/dist/scoring.d.ts +25 -0
  60. package/dist/scoring.d.ts.map +1 -0
  61. package/dist/scoring.js +63 -0
  62. package/dist/scoring.js.map +1 -0
  63. package/dist/store.d.ts +16 -0
  64. package/dist/store.d.ts.map +1 -0
  65. package/dist/store.js +68 -0
  66. package/dist/store.js.map +1 -0
  67. package/dist/types.d.ts +191 -0
  68. package/dist/types.d.ts.map +1 -0
  69. package/dist/types.js +7 -0
  70. package/dist/types.js.map +1 -0
  71. package/dist/update.d.ts +14 -0
  72. package/dist/update.d.ts.map +1 -0
  73. package/dist/update.js +126 -0
  74. package/dist/update.js.map +1 -0
  75. package/package.json +60 -0
  76. package/src/cli.ts +99 -0
  77. package/src/config.ts +72 -0
  78. package/src/consolidation.ts +127 -0
  79. package/src/engine.ts +699 -0
  80. package/src/eviction.ts +30 -0
  81. package/src/extension.ts +290 -0
  82. package/src/extraction.ts +152 -0
  83. package/src/full-insights-html.ts +342 -0
  84. package/src/full-insights.ts +396 -0
  85. package/src/i18n.ts +233 -0
  86. package/src/index.ts +50 -0
  87. package/src/insights-html.ts +476 -0
  88. package/src/linking.ts +43 -0
  89. package/src/privacy.ts +52 -0
  90. package/src/scoring.ts +94 -0
  91. package/src/store.ts +84 -0
  92. package/src/types.ts +209 -0
  93. package/src/update.ts +141 -0
@@ -0,0 +1,111 @@
1
+ /**
2
+ * [INPUT]: unconsolidated episodes, LlmFn (optional), config
3
+ * [OUTPUT]: newly extracted MemoryEntries (facts + lessons) promoted to long-term storage
4
+ * [POS]: Episodic→Semantic consolidation — heart of multi-store memory model
5
+ *
6
+ * Two modes:
7
+ * LLM-powered (preferred): produces high-quality semantic extraction
8
+ * Heuristic fallback: frequency-based file/error extraction
9
+ */
10
+ import { PROMPTS } from "./i18n.js";
11
+ import { extractTags } from "./scoring.js";
12
+ function makeId() {
13
+ return `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
14
+ }
15
+ export async function consolidateEpisodes(episodes, cfg, llmFn) {
16
+ const unconsolidated = episodes.filter((ep) => !ep.consolidated);
17
+ if (unconsolidated.length < cfg.consolidationThreshold)
18
+ return [];
19
+ let newEntries;
20
+ if (llmFn) {
21
+ newEntries = await llmConsolidation(unconsolidated, cfg, llmFn);
22
+ }
23
+ else {
24
+ newEntries = heuristicConsolidation(unconsolidated, cfg);
25
+ }
26
+ for (const ep of unconsolidated)
27
+ ep.consolidated = true;
28
+ return newEntries;
29
+ }
30
+ async function llmConsolidation(episodes, cfg, llmFn) {
31
+ const p = PROMPTS[cfg.locale] ?? PROMPTS.en;
32
+ const summary = episodes
33
+ .map((ep) => `[${ep.date}] ${ep.project}: ${ep.summary}\nFiles: ${ep.filesModified.join(", ")}\nErrors: ${ep.errors.join("; ") || "none"}`)
34
+ .join("\n\n");
35
+ const raw = await llmFn(p.consolidationSystem, summary);
36
+ try {
37
+ const items = JSON.parse(raw);
38
+ const now = new Date().toISOString();
39
+ return items.map((item) => {
40
+ const type = item.type === "lesson" ? "lesson" : "fact";
41
+ return {
42
+ id: makeId(),
43
+ type,
44
+ content: item.content,
45
+ tags: extractTags(item.content),
46
+ project: episodes[0]?.project ?? "unknown",
47
+ importance: item.importance ?? 6,
48
+ strength: cfg.halfLife[type] ?? 30,
49
+ created: now,
50
+ eventTime: now,
51
+ accessCount: 0,
52
+ relatedIds: [],
53
+ scope: cfg.defaultScope,
54
+ };
55
+ });
56
+ }
57
+ catch {
58
+ return heuristicConsolidation(episodes, cfg);
59
+ }
60
+ }
61
+ function heuristicConsolidation(episodes, cfg) {
62
+ const now = new Date().toISOString();
63
+ const result = [];
64
+ const fileCounts = new Map();
65
+ for (const ep of episodes) {
66
+ for (const f of ep.filesModified)
67
+ fileCounts.set(f, (fileCounts.get(f) ?? 0) + 1);
68
+ }
69
+ const hotFiles = [...fileCounts.entries()]
70
+ .filter(([, c]) => c >= 3)
71
+ .sort((a, b) => b[1] - a[1])
72
+ .slice(0, 5);
73
+ if (hotFiles.length) {
74
+ const content = `Frequently modified files: ${hotFiles.map(([f, c]) => `${f} (${c}x)`).join(", ")}`;
75
+ result.push({
76
+ id: makeId(),
77
+ type: "fact",
78
+ content,
79
+ tags: extractTags(content),
80
+ project: episodes[0]?.project ?? "unknown",
81
+ importance: 5,
82
+ strength: cfg.halfLife.fact ?? 60,
83
+ created: now,
84
+ eventTime: now,
85
+ accessCount: 0,
86
+ relatedIds: [],
87
+ scope: cfg.defaultScope,
88
+ });
89
+ }
90
+ const allErrors = episodes.flatMap((ep) => ep.errors).filter(Boolean);
91
+ if (allErrors.length) {
92
+ const errorSet = [...new Set(allErrors)].slice(0, 5);
93
+ const content = `Recurring issues: ${errorSet.join("; ")}`;
94
+ result.push({
95
+ id: makeId(),
96
+ type: "lesson",
97
+ content,
98
+ tags: extractTags(content),
99
+ project: episodes[0]?.project ?? "unknown",
100
+ importance: 7,
101
+ strength: cfg.halfLife.lesson ?? 90,
102
+ created: now,
103
+ eventTime: now,
104
+ accessCount: 0,
105
+ relatedIds: [],
106
+ scope: cfg.defaultScope,
107
+ });
108
+ }
109
+ return result;
110
+ }
111
+ //# sourceMappingURL=consolidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consolidation.js","sourceRoot":"","sources":["../src/consolidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,SAAS,MAAM;IACd,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,QAAmB,EACnB,GAAkB,EAClB,KAAa;IAEb,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;IACjE,IAAI,cAAc,CAAC,MAAM,GAAG,GAAG,CAAC,sBAAsB;QAAE,OAAO,EAAE,CAAC;IAElE,IAAI,UAAyB,CAAC;IAC9B,IAAI,KAAK,EAAE,CAAC;QACX,UAAU,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACP,UAAU,GAAG,sBAAsB,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,cAAc;QAAE,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC;IACxD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,QAAmB,EAAE,GAAkB,EAAE,KAAY;IACpF,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,QAAQ;SACtB,GAAG,CACH,CAAC,EAAE,EAAE,EAAE,CACN,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,YAAY,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAC9H;SACA,IAAI,CAAC,MAAM,CAAC,CAAC;IAEf,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAExD,IAAI,CAAC;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkE,CAAC;QAC/F,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,MAAM,IAAI,GAAwB,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7E,OAAO;gBACN,EAAE,EAAE,MAAM,EAAE;gBACZ,IAAI;gBACJ,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC/B,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,SAAS;gBAC1C,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;gBAChC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;gBAClC,OAAO,EAAE,GAAG;gBACZ,SAAS,EAAE,GAAG;gBACd,WAAW,EAAE,CAAC;gBACd,UAAU,EAAE,EAAE;gBACd,KAAK,EAAE,GAAG,CAAC,YAAY;aACvB,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,sBAAsB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;AACF,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAmB,EAAE,GAAkB;IACtE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,aAAa;YAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;SACxC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;SACzB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEd,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,8BAA8B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpG,MAAM,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,MAAM,EAAE;YACZ,IAAI,EAAE,MAAM;YACZ,OAAO;YACP,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;YAC1B,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,SAAS;YAC1C,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;YACjC,OAAO,EAAE,GAAG;YACZ,SAAS,EAAE,GAAG;YACd,WAAW,EAAE,CAAC;YACd,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,GAAG,CAAC,YAAY;SACvB,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtE,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,qBAAqB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,MAAM,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;YAC1B,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,SAAS;YAC1C,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE;YACnC,OAAO,EAAE,GAAG;YACZ,SAAS,EAAE,GAAG;YACd,WAAW,EAAE,CAAC;YACd,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,GAAG,CAAC,YAAY;SACvB,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * [INPUT]: NanomemConfig, optional LlmFn
3
+ * [OUTPUT]: NanoMemEngine — unified API for memory CRUD, injection, consolidation
4
+ * [POS]: Facade layer — composes store, scoring, eviction, update, linking, privacy, extraction, consolidation
5
+ *
6
+ * Host products create an engine instance and call its methods.
7
+ * No dependency on any specific AI framework — LLM is pluggable.
8
+ */
9
+ import { type NanomemConfig } from "./config.js";
10
+ import type { Episode, ExtractedItem, FullInsightsReport, InsightsReport, LlmFn, MemoryEntry, MemoryScope, Meta, WorkEntry } from "./types.js";
11
+ export declare class NanoMemEngine {
12
+ readonly cfg: NanomemConfig;
13
+ private llmFn?;
14
+ private knowledgePath;
15
+ private lessonsPath;
16
+ private preferencesPath;
17
+ private facetsPath;
18
+ private workPath;
19
+ private metaPath;
20
+ private episodesDir;
21
+ constructor(overrides?: Partial<NanomemConfig>, llmFn?: LlmFn);
22
+ setLlmFn(fn: LlmFn): void;
23
+ extractAndStore(conversation: string, project: string): Promise<ExtractedItem[]>;
24
+ extractAndStoreWork(conversation: string, project: string, sessionGoal?: string): Promise<void>;
25
+ saveEpisode(ep: Episode): Promise<void>;
26
+ consolidate(): Promise<MemoryEntry[]>;
27
+ getMemoryInjection(project: string, contextTags: string[], scope?: MemoryScope): Promise<string>;
28
+ getStats(): Promise<{
29
+ knowledge: number;
30
+ lessons: number;
31
+ preferences: number;
32
+ facets: number;
33
+ episodes: number;
34
+ work: number;
35
+ totalSessions: number;
36
+ }>;
37
+ getAllEntries(): Promise<{
38
+ knowledge: MemoryEntry[];
39
+ lessons: MemoryEntry[];
40
+ preferences: MemoryEntry[];
41
+ facets: MemoryEntry[];
42
+ }>;
43
+ getAllWork(): Promise<WorkEntry[]>;
44
+ getAllEpisodes(): Promise<Episode[]>;
45
+ searchEntries(query: string, scope?: MemoryScope): Promise<MemoryEntry[]>;
46
+ forgetEntry(id: string): Promise<boolean>;
47
+ exportAll(): Promise<{
48
+ knowledge: MemoryEntry[];
49
+ lessons: MemoryEntry[];
50
+ preferences: MemoryEntry[];
51
+ facets: MemoryEntry[];
52
+ work: WorkEntry[];
53
+ episodes: Episode[];
54
+ meta: Meta;
55
+ }>;
56
+ generateFullInsights(): Promise<FullInsightsReport>;
57
+ generateInsights(): Promise<InsightsReport>;
58
+ private generateRecommendations;
59
+ private generateRulesBasedRecommendations;
60
+ private filterAndCleanEntries;
61
+ private filterAndCleanWork;
62
+ private reinforceEntries;
63
+ private reinforceWork;
64
+ private reconsolidateIfNeeded;
65
+ private buildInjectionText;
66
+ }
67
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}