gnosys 4.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 (188) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1387 -0
  3. package/dist/cli.d.ts +7 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +3753 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/index.d.ts +8 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +2267 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/lib/archive.d.ts +95 -0
  12. package/dist/lib/archive.d.ts.map +1 -0
  13. package/dist/lib/archive.js +311 -0
  14. package/dist/lib/archive.js.map +1 -0
  15. package/dist/lib/ask.d.ts +77 -0
  16. package/dist/lib/ask.d.ts.map +1 -0
  17. package/dist/lib/ask.js +316 -0
  18. package/dist/lib/ask.js.map +1 -0
  19. package/dist/lib/audit.d.ts +47 -0
  20. package/dist/lib/audit.d.ts.map +1 -0
  21. package/dist/lib/audit.js +136 -0
  22. package/dist/lib/audit.js.map +1 -0
  23. package/dist/lib/bootstrap.d.ts +56 -0
  24. package/dist/lib/bootstrap.d.ts.map +1 -0
  25. package/dist/lib/bootstrap.js +163 -0
  26. package/dist/lib/bootstrap.js.map +1 -0
  27. package/dist/lib/config.d.ts +239 -0
  28. package/dist/lib/config.d.ts.map +1 -0
  29. package/dist/lib/config.js +371 -0
  30. package/dist/lib/config.js.map +1 -0
  31. package/dist/lib/dashboard.d.ts +81 -0
  32. package/dist/lib/dashboard.d.ts.map +1 -0
  33. package/dist/lib/dashboard.js +314 -0
  34. package/dist/lib/dashboard.js.map +1 -0
  35. package/dist/lib/db.d.ts +182 -0
  36. package/dist/lib/db.d.ts.map +1 -0
  37. package/dist/lib/db.js +620 -0
  38. package/dist/lib/db.js.map +1 -0
  39. package/dist/lib/dbSearch.d.ts +65 -0
  40. package/dist/lib/dbSearch.d.ts.map +1 -0
  41. package/dist/lib/dbSearch.js +239 -0
  42. package/dist/lib/dbSearch.js.map +1 -0
  43. package/dist/lib/dbWrite.d.ts +56 -0
  44. package/dist/lib/dbWrite.d.ts.map +1 -0
  45. package/dist/lib/dbWrite.js +171 -0
  46. package/dist/lib/dbWrite.js.map +1 -0
  47. package/dist/lib/dream.d.ts +170 -0
  48. package/dist/lib/dream.d.ts.map +1 -0
  49. package/dist/lib/dream.js +706 -0
  50. package/dist/lib/dream.js.map +1 -0
  51. package/dist/lib/embeddings.d.ts +84 -0
  52. package/dist/lib/embeddings.d.ts.map +1 -0
  53. package/dist/lib/embeddings.js +226 -0
  54. package/dist/lib/embeddings.js.map +1 -0
  55. package/dist/lib/export.d.ts +92 -0
  56. package/dist/lib/export.d.ts.map +1 -0
  57. package/dist/lib/export.js +362 -0
  58. package/dist/lib/export.js.map +1 -0
  59. package/dist/lib/federated.d.ts +113 -0
  60. package/dist/lib/federated.d.ts.map +1 -0
  61. package/dist/lib/federated.js +346 -0
  62. package/dist/lib/federated.js.map +1 -0
  63. package/dist/lib/graph.d.ts +50 -0
  64. package/dist/lib/graph.d.ts.map +1 -0
  65. package/dist/lib/graph.js +118 -0
  66. package/dist/lib/graph.js.map +1 -0
  67. package/dist/lib/history.d.ts +39 -0
  68. package/dist/lib/history.d.ts.map +1 -0
  69. package/dist/lib/history.js +112 -0
  70. package/dist/lib/history.js.map +1 -0
  71. package/dist/lib/hybridSearch.d.ts +80 -0
  72. package/dist/lib/hybridSearch.d.ts.map +1 -0
  73. package/dist/lib/hybridSearch.js +296 -0
  74. package/dist/lib/hybridSearch.js.map +1 -0
  75. package/dist/lib/import.d.ts +52 -0
  76. package/dist/lib/import.d.ts.map +1 -0
  77. package/dist/lib/import.js +365 -0
  78. package/dist/lib/import.js.map +1 -0
  79. package/dist/lib/ingest.d.ts +51 -0
  80. package/dist/lib/ingest.d.ts.map +1 -0
  81. package/dist/lib/ingest.js +144 -0
  82. package/dist/lib/ingest.js.map +1 -0
  83. package/dist/lib/lensing.d.ts +35 -0
  84. package/dist/lib/lensing.d.ts.map +1 -0
  85. package/dist/lib/lensing.js +85 -0
  86. package/dist/lib/lensing.js.map +1 -0
  87. package/dist/lib/llm.d.ts +84 -0
  88. package/dist/lib/llm.d.ts.map +1 -0
  89. package/dist/lib/llm.js +386 -0
  90. package/dist/lib/llm.js.map +1 -0
  91. package/dist/lib/lock.d.ts +28 -0
  92. package/dist/lib/lock.d.ts.map +1 -0
  93. package/dist/lib/lock.js +145 -0
  94. package/dist/lib/lock.js.map +1 -0
  95. package/dist/lib/maintenance.d.ts +124 -0
  96. package/dist/lib/maintenance.d.ts.map +1 -0
  97. package/dist/lib/maintenance.js +587 -0
  98. package/dist/lib/maintenance.js.map +1 -0
  99. package/dist/lib/migrate.d.ts +19 -0
  100. package/dist/lib/migrate.d.ts.map +1 -0
  101. package/dist/lib/migrate.js +260 -0
  102. package/dist/lib/migrate.js.map +1 -0
  103. package/dist/lib/preferences.d.ts +49 -0
  104. package/dist/lib/preferences.d.ts.map +1 -0
  105. package/dist/lib/preferences.js +149 -0
  106. package/dist/lib/preferences.js.map +1 -0
  107. package/dist/lib/projectIdentity.d.ts +66 -0
  108. package/dist/lib/projectIdentity.d.ts.map +1 -0
  109. package/dist/lib/projectIdentity.js +148 -0
  110. package/dist/lib/projectIdentity.js.map +1 -0
  111. package/dist/lib/recall.d.ts +82 -0
  112. package/dist/lib/recall.d.ts.map +1 -0
  113. package/dist/lib/recall.js +289 -0
  114. package/dist/lib/recall.js.map +1 -0
  115. package/dist/lib/resolver.d.ts +116 -0
  116. package/dist/lib/resolver.d.ts.map +1 -0
  117. package/dist/lib/resolver.js +372 -0
  118. package/dist/lib/resolver.js.map +1 -0
  119. package/dist/lib/retry.d.ts +24 -0
  120. package/dist/lib/retry.d.ts.map +1 -0
  121. package/dist/lib/retry.js +60 -0
  122. package/dist/lib/retry.js.map +1 -0
  123. package/dist/lib/rulesGen.d.ts +51 -0
  124. package/dist/lib/rulesGen.d.ts.map +1 -0
  125. package/dist/lib/rulesGen.js +167 -0
  126. package/dist/lib/rulesGen.js.map +1 -0
  127. package/dist/lib/search.d.ts +51 -0
  128. package/dist/lib/search.d.ts.map +1 -0
  129. package/dist/lib/search.js +190 -0
  130. package/dist/lib/search.js.map +1 -0
  131. package/dist/lib/staticSearch.d.ts +70 -0
  132. package/dist/lib/staticSearch.d.ts.map +1 -0
  133. package/dist/lib/staticSearch.js +162 -0
  134. package/dist/lib/staticSearch.js.map +1 -0
  135. package/dist/lib/store.d.ts +79 -0
  136. package/dist/lib/store.d.ts.map +1 -0
  137. package/dist/lib/store.js +227 -0
  138. package/dist/lib/store.js.map +1 -0
  139. package/dist/lib/structuredIngest.d.ts +37 -0
  140. package/dist/lib/structuredIngest.d.ts.map +1 -0
  141. package/dist/lib/structuredIngest.js +208 -0
  142. package/dist/lib/structuredIngest.js.map +1 -0
  143. package/dist/lib/tags.d.ts +26 -0
  144. package/dist/lib/tags.d.ts.map +1 -0
  145. package/dist/lib/tags.js +109 -0
  146. package/dist/lib/tags.js.map +1 -0
  147. package/dist/lib/timeline.d.ts +34 -0
  148. package/dist/lib/timeline.d.ts.map +1 -0
  149. package/dist/lib/timeline.js +116 -0
  150. package/dist/lib/timeline.js.map +1 -0
  151. package/dist/lib/trace.d.ts +42 -0
  152. package/dist/lib/trace.d.ts.map +1 -0
  153. package/dist/lib/trace.js +338 -0
  154. package/dist/lib/trace.js.map +1 -0
  155. package/dist/lib/webIndex.d.ts +28 -0
  156. package/dist/lib/webIndex.d.ts.map +1 -0
  157. package/dist/lib/webIndex.js +208 -0
  158. package/dist/lib/webIndex.js.map +1 -0
  159. package/dist/lib/webIngest.d.ts +51 -0
  160. package/dist/lib/webIngest.d.ts.map +1 -0
  161. package/dist/lib/webIngest.js +533 -0
  162. package/dist/lib/webIngest.js.map +1 -0
  163. package/dist/lib/wikilinks.d.ts +63 -0
  164. package/dist/lib/wikilinks.d.ts.map +1 -0
  165. package/dist/lib/wikilinks.js +146 -0
  166. package/dist/lib/wikilinks.js.map +1 -0
  167. package/dist/sandbox/client.d.ts +82 -0
  168. package/dist/sandbox/client.d.ts.map +1 -0
  169. package/dist/sandbox/client.js +128 -0
  170. package/dist/sandbox/client.js.map +1 -0
  171. package/dist/sandbox/helper-template.d.ts +14 -0
  172. package/dist/sandbox/helper-template.d.ts.map +1 -0
  173. package/dist/sandbox/helper-template.js +285 -0
  174. package/dist/sandbox/helper-template.js.map +1 -0
  175. package/dist/sandbox/index.d.ts +10 -0
  176. package/dist/sandbox/index.d.ts.map +1 -0
  177. package/dist/sandbox/index.js +10 -0
  178. package/dist/sandbox/index.js.map +1 -0
  179. package/dist/sandbox/manager.d.ts +40 -0
  180. package/dist/sandbox/manager.d.ts.map +1 -0
  181. package/dist/sandbox/manager.js +220 -0
  182. package/dist/sandbox/manager.js.map +1 -0
  183. package/dist/sandbox/server.d.ts +44 -0
  184. package/dist/sandbox/server.d.ts.map +1 -0
  185. package/dist/sandbox/server.js +661 -0
  186. package/dist/sandbox/server.js.map +1 -0
  187. package/package.json +103 -0
  188. package/prompts/synthesize.md +21 -0
@@ -0,0 +1,587 @@
1
+ /**
2
+ * Gnosys Maintenance Engine — Keeps the vault clean and useful forever.
3
+ *
4
+ * Features:
5
+ * - Duplicate detection (semantic similarity + title overlap)
6
+ * - Stale marking (confidence decay based on days since last reinforced)
7
+ * - Reinforcement (increment counter when memories are used)
8
+ * - Auto-consolidation (LLM-powered merge of similar memories)
9
+ *
10
+ * All operations produce safe Git commits with rollback on failure.
11
+ */
12
+ import { GnosysEmbeddings } from "./embeddings.js";
13
+ import { DEFAULT_CONFIG } from "./config.js";
14
+ import { getLLMProvider } from "./llm.js";
15
+ import { GnosysArchive, getArchiveEligible } from "./archive.js";
16
+ import { acquireWriteLock } from "./lock.js";
17
+ import { auditLog } from "./audit.js";
18
+ import { execFileSync } from "child_process";
19
+ // ─── Constants ────────────────────────────────────────────────────────────
20
+ /** Decay rate lambda — 0.005 gives ~50% decay after 139 days */
21
+ const DECAY_LAMBDA = 0.005;
22
+ /** Cosine similarity threshold for duplicate detection */
23
+ const DUPLICATE_SIMILARITY_THRESHOLD = 0.85;
24
+ /** Minimum Jaccard word overlap on titles to flag as duplicate */
25
+ const TITLE_OVERLAP_THRESHOLD = 0.4;
26
+ /** Confidence below which a memory is considered stale */
27
+ const STALE_CONFIDENCE_THRESHOLD = 0.3;
28
+ // ─── Core Engine ──────────────────────────────────────────────────────────
29
+ export class GnosysMaintenanceEngine {
30
+ resolver;
31
+ config;
32
+ embeddings = null;
33
+ provider = null;
34
+ constructor(resolver, config) {
35
+ this.resolver = resolver;
36
+ this.config = config || DEFAULT_CONFIG;
37
+ try {
38
+ this.provider = getLLMProvider(this.config, "structuring");
39
+ }
40
+ catch {
41
+ this.provider = null;
42
+ }
43
+ }
44
+ /**
45
+ * Run the full maintenance cycle.
46
+ */
47
+ async maintain(options) {
48
+ const log = options?.onLog || (() => { });
49
+ const progress = options?.onProgress || (() => { });
50
+ const dryRun = options?.dryRun ?? false;
51
+ const autoApply = options?.autoApply ?? false;
52
+ log("info", `Starting maintenance${dryRun ? " (dry run)" : ""}...`);
53
+ // Get all memories from all stores
54
+ const stores = this.resolver.getStores();
55
+ const writeTarget = this.resolver.getWriteTarget();
56
+ // Acquire write lock for concurrent safety (skip in dry-run)
57
+ let releaseLock = null;
58
+ if (!dryRun && writeTarget) {
59
+ try {
60
+ releaseLock = await acquireWriteLock(writeTarget.path, "maintain");
61
+ }
62
+ catch (err) {
63
+ log("warn", `Could not acquire write lock: ${err.message}`);
64
+ }
65
+ }
66
+ if (!writeTarget) {
67
+ throw new Error("No writable store found. Run gnosys init first.");
68
+ }
69
+ const allMemories = await this.loadAllActiveMemories();
70
+ log("info", `Found ${allMemories.length} active memories across ${stores.length} store(s)`);
71
+ const report = {
72
+ totalMemories: allMemories.length,
73
+ duplicates: [],
74
+ staleMemories: [],
75
+ avgConfidence: 0,
76
+ avgDecayedConfidence: 0,
77
+ consolidated: 0,
78
+ decayUpdated: 0,
79
+ archived: 0,
80
+ totalArchived: 0,
81
+ actions: [],
82
+ };
83
+ if (allMemories.length === 0) {
84
+ log("info", "No memories to maintain.");
85
+ releaseLock?.();
86
+ return report;
87
+ }
88
+ // Step 1: Detect duplicates (requires embeddings)
89
+ progress("Detecting duplicates", 0, 4);
90
+ log("info", "Step 1/4: Detecting duplicates...");
91
+ report.duplicates = await this.detectDuplicates(allMemories, writeTarget, log);
92
+ log("info", ` Found ${report.duplicates.length} duplicate pair(s)`);
93
+ // Step 2: Calculate confidence decay
94
+ progress("Calculating decay", 1, 4);
95
+ log("info", "Step 2/4: Calculating confidence decay...");
96
+ const { stale, avgConfidence, avgDecayedConfidence } = this.calculateDecay(allMemories);
97
+ report.staleMemories = stale;
98
+ report.avgConfidence = avgConfidence;
99
+ report.avgDecayedConfidence = avgDecayedConfidence;
100
+ log("info", ` ${stale.length} stale memorie(s) (confidence < ${STALE_CONFIDENCE_THRESHOLD})`);
101
+ log("info", ` Average confidence: ${avgConfidence.toFixed(3)} → decayed: ${avgDecayedConfidence.toFixed(3)}`);
102
+ // Step 3: Archive old/low-confidence memories
103
+ progress("Archiving", 2, 4);
104
+ log("info", "Step 3/4: Archiving old/low-confidence memories...");
105
+ const archiveResult = await this.archiveOldMemories(allMemories, writeTarget, dryRun, autoApply, log);
106
+ report.archived = archiveResult.archived;
107
+ report.totalArchived = archiveResult.totalArchived;
108
+ report.actions.push(...archiveResult.actions);
109
+ // Step 4: Apply changes
110
+ progress("Applying changes", 3, 4);
111
+ log("info", "Step 4/4: Applying changes...");
112
+ if (dryRun) {
113
+ // Report what would happen
114
+ for (const dup of report.duplicates) {
115
+ const action = `[DRY RUN] Would consolidate: "${dup.memoryA.frontmatter.title}" + "${dup.memoryB.frontmatter.title}" (similarity: ${dup.similarity.toFixed(3)})`;
116
+ report.actions.push(action);
117
+ log("action", action);
118
+ }
119
+ for (const sm of report.staleMemories) {
120
+ const action = `[DRY RUN] Would update decay: "${sm.memory.frontmatter.title}" (${sm.originalConfidence.toFixed(2)} → ${sm.decayedConfidence.toFixed(2)}, ${sm.daysSinceReinforced} days since reinforced)`;
121
+ report.actions.push(action);
122
+ log("action", action);
123
+ }
124
+ }
125
+ else if (autoApply) {
126
+ // Auto-consolidate duplicates
127
+ for (const dup of report.duplicates) {
128
+ try {
129
+ await this.consolidatePair(dup, writeTarget, log);
130
+ report.consolidated++;
131
+ report.actions.push(`Consolidated: "${dup.memoryA.frontmatter.title}" + "${dup.memoryB.frontmatter.title}"`);
132
+ }
133
+ catch (err) {
134
+ const msg = `Failed to consolidate "${dup.memoryA.frontmatter.title}": ${err instanceof Error ? err.message : String(err)}`;
135
+ log("warn", msg);
136
+ report.actions.push(msg);
137
+ }
138
+ }
139
+ // Update decayed confidences
140
+ for (const sm of report.staleMemories) {
141
+ try {
142
+ await this.updateDecayedConfidence(sm, writeTarget, log);
143
+ report.decayUpdated++;
144
+ report.actions.push(`Decay updated: "${sm.memory.frontmatter.title}" (${sm.originalConfidence.toFixed(2)} → ${sm.decayedConfidence.toFixed(2)})`);
145
+ }
146
+ catch (err) {
147
+ const msg = `Failed to update decay for "${sm.memory.frontmatter.title}": ${err instanceof Error ? err.message : String(err)}`;
148
+ log("warn", msg);
149
+ report.actions.push(msg);
150
+ }
151
+ }
152
+ }
153
+ progress("Complete", 4, 4);
154
+ log("info", `Maintenance complete. ${report.actions.length} action(s) ${dryRun ? "identified" : "taken"}.`);
155
+ // Release write lock
156
+ releaseLock?.();
157
+ // Audit log
158
+ auditLog({
159
+ operation: "maintain",
160
+ details: {
161
+ dryRun,
162
+ duplicates: report.duplicates.length,
163
+ stale: report.staleMemories.length,
164
+ consolidated: report.consolidated,
165
+ archived: report.archived,
166
+ decayUpdated: report.decayUpdated,
167
+ },
168
+ });
169
+ return report;
170
+ }
171
+ // ─── Duplicate Detection ──────────────────────────────────────────────
172
+ /**
173
+ * Find duplicate pairs using semantic similarity + title overlap.
174
+ */
175
+ async detectDuplicates(memories, writeTarget, log) {
176
+ // Initialize embeddings from the write target store
177
+ this.embeddings = new GnosysEmbeddings(writeTarget.path);
178
+ if (!this.embeddings.hasEmbeddings()) {
179
+ log("info", " No embeddings found — skipping duplicate detection. Run gnosys reindex first.");
180
+ return [];
181
+ }
182
+ const duplicates = [];
183
+ const allEmbeddings = this.embeddings.getAllEmbeddings();
184
+ // Build a map from file path to embedding
185
+ const embeddingMap = new Map();
186
+ for (const e of allEmbeddings) {
187
+ // Strip store prefix if present (format: "label:relativePath")
188
+ const key = e.filePath.includes(":") ? e.filePath.split(":").slice(1).join(":") : e.filePath;
189
+ embeddingMap.set(key, e.embedding);
190
+ }
191
+ // Compare all pairs
192
+ const checked = new Set();
193
+ for (let i = 0; i < memories.length; i++) {
194
+ for (let j = i + 1; j < memories.length; j++) {
195
+ const a = memories[i];
196
+ const b = memories[j];
197
+ const pairKey = `${a.relativePath}|${b.relativePath}`;
198
+ if (checked.has(pairKey))
199
+ continue;
200
+ checked.add(pairKey);
201
+ // Get embeddings for both
202
+ const embA = embeddingMap.get(a.relativePath);
203
+ const embB = embeddingMap.get(b.relativePath);
204
+ if (!embA || !embB)
205
+ continue;
206
+ const similarity = GnosysEmbeddings.cosineSimilarity(embA, embB);
207
+ if (similarity >= DUPLICATE_SIMILARITY_THRESHOLD) {
208
+ const titleOverlap = jaccardSimilarity(a.frontmatter.title.toLowerCase(), b.frontmatter.title.toLowerCase());
209
+ if (titleOverlap >= TITLE_OVERLAP_THRESHOLD) {
210
+ duplicates.push({ memoryA: a, memoryB: b, similarity, titleOverlap });
211
+ }
212
+ }
213
+ }
214
+ }
215
+ return duplicates;
216
+ }
217
+ // ─── Confidence Decay ─────────────────────────────────────────────────
218
+ /**
219
+ * Calculate decayed confidence for all memories.
220
+ * Formula: decayed = base_confidence * e^(-lambda * days_since_reinforced)
221
+ */
222
+ calculateDecay(memories) {
223
+ const now = new Date();
224
+ const stale = [];
225
+ let sumConfidence = 0;
226
+ let sumDecayed = 0;
227
+ for (const memory of memories) {
228
+ const baseConfidence = memory.frontmatter.confidence || 0.8;
229
+ const lastReinforced = memory.frontmatter.last_reinforced
230
+ || memory.frontmatter.modified
231
+ || memory.frontmatter.created;
232
+ const lastDate = new Date(lastReinforced);
233
+ const daysSince = Math.max(0, Math.floor((now.getTime() - lastDate.getTime()) / (1000 * 60 * 60 * 24)));
234
+ const decayed = baseConfidence * Math.exp(-DECAY_LAMBDA * daysSince);
235
+ sumConfidence += baseConfidence;
236
+ sumDecayed += decayed;
237
+ if (decayed < STALE_CONFIDENCE_THRESHOLD) {
238
+ stale.push({
239
+ memory,
240
+ originalConfidence: baseConfidence,
241
+ decayedConfidence: decayed,
242
+ daysSinceReinforced: daysSince,
243
+ });
244
+ }
245
+ }
246
+ return {
247
+ stale,
248
+ avgConfidence: memories.length > 0 ? sumConfidence / memories.length : 0,
249
+ avgDecayedConfidence: memories.length > 0 ? sumDecayed / memories.length : 0,
250
+ };
251
+ }
252
+ // ─── Consolidation ────────────────────────────────────────────────────
253
+ /**
254
+ * Use LLM to merge two duplicate memories into one.
255
+ * Creates a new memory that supersedes both.
256
+ */
257
+ async consolidatePair(pair, writeTarget, log) {
258
+ if (!this.provider) {
259
+ log("warn", " No LLM provider available — skipping consolidation. Configure Anthropic or Ollama.");
260
+ return;
261
+ }
262
+ const prompt = `You are a knowledge management assistant. Merge these two memories into a single, comprehensive memory. Preserve all unique information from both. Output ONLY the merged markdown content (no frontmatter).
263
+
264
+ ## Memory A: ${pair.memoryA.frontmatter.title}
265
+ ${pair.memoryA.content}
266
+
267
+ ## Memory B: ${pair.memoryB.frontmatter.title}
268
+ ${pair.memoryB.content}
269
+
270
+ Merged content:`;
271
+ const mergedContent = await this.provider.generate(prompt, { maxTokens: 4096 });
272
+ // Determine the merged title
273
+ const mergedTitle = pair.memoryA.frontmatter.title.length >= pair.memoryB.frontmatter.title.length
274
+ ? pair.memoryA.frontmatter.title
275
+ : pair.memoryB.frontmatter.title;
276
+ // Merge tags
277
+ const tagsA = Array.isArray(pair.memoryA.frontmatter.tags) ? pair.memoryA.frontmatter.tags : [];
278
+ const tagsB = Array.isArray(pair.memoryB.frontmatter.tags) ? pair.memoryB.frontmatter.tags : [];
279
+ const mergedTags = [...new Set([...tagsA, ...tagsB])];
280
+ // Merge relevance
281
+ const relA = pair.memoryA.frontmatter.relevance || "";
282
+ const relB = pair.memoryB.frontmatter.relevance || "";
283
+ const mergedRelevance = [...new Set([...relA.split(/\s+/), ...relB.split(/\s+/)])].filter(Boolean).join(" ");
284
+ // Generate new ID
285
+ const category = pair.memoryA.frontmatter.category || pair.memoryA.relativePath.split("/")[0];
286
+ const newId = await writeTarget.store.generateId(category);
287
+ const today = new Date().toISOString().split("T")[0];
288
+ const newFrontmatter = {
289
+ id: newId,
290
+ title: mergedTitle,
291
+ category,
292
+ tags: mergedTags,
293
+ relevance: mergedRelevance,
294
+ author: "human+ai",
295
+ authority: pair.memoryA.frontmatter.authority,
296
+ confidence: Math.max(pair.memoryA.frontmatter.confidence || 0.8, pair.memoryB.frontmatter.confidence || 0.8),
297
+ created: today,
298
+ modified: today,
299
+ last_reviewed: today,
300
+ status: "active",
301
+ supersedes: `${pair.memoryA.frontmatter.id}, ${pair.memoryB.frontmatter.id}`,
302
+ };
303
+ // Write the merged memory
304
+ const filename = `${mergedTitle.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "")}.md`;
305
+ await safeGitOperation(writeTarget.path, `Consolidate: ${pair.memoryA.frontmatter.id} + ${pair.memoryB.frontmatter.id}`, async () => {
306
+ await writeTarget.store.writeMemory(category, filename, newFrontmatter, mergedContent, { autoCommit: false });
307
+ // Mark originals as superseded
308
+ await writeTarget.store.updateMemory(pair.memoryA.relativePath, {
309
+ status: "superseded",
310
+ superseded_by: newId,
311
+ });
312
+ await writeTarget.store.updateMemory(pair.memoryB.relativePath, {
313
+ status: "superseded",
314
+ superseded_by: newId,
315
+ });
316
+ });
317
+ log("action", ` Consolidated "${pair.memoryA.frontmatter.title}" + "${pair.memoryB.frontmatter.title}" → ${newId}`);
318
+ }
319
+ // ─── Decay Updates ────────────────────────────────────────────────────
320
+ /**
321
+ * Update a stale memory's confidence to its decayed value.
322
+ */
323
+ async updateDecayedConfidence(stale, writeTarget, log) {
324
+ await safeGitOperation(writeTarget.path, `Decay: ${stale.memory.frontmatter.id} (${stale.originalConfidence.toFixed(2)} → ${stale.decayedConfidence.toFixed(2)})`, async () => {
325
+ await writeTarget.store.updateMemory(stale.memory.relativePath, {
326
+ confidence: Math.round(stale.decayedConfidence * 100) / 100,
327
+ });
328
+ });
329
+ log("action", ` Decay updated: "${stale.memory.frontmatter.title}" → ${stale.decayedConfidence.toFixed(2)}`);
330
+ }
331
+ // ─── Reinforcement ────────────────────────────────────────────────────
332
+ /**
333
+ * Reinforce a memory — increment its usage counter and update last_reinforced.
334
+ * This is a lightweight operation called by search/ask/import.
335
+ */
336
+ static async reinforce(store, relativePath) {
337
+ const memory = await store.readMemory(relativePath);
338
+ if (!memory)
339
+ return;
340
+ const currentCount = memory.frontmatter.reinforcement_count || 0;
341
+ const today = new Date().toISOString().split("T")[0];
342
+ await store.updateMemory(relativePath, {
343
+ reinforcement_count: currentCount + 1,
344
+ last_reinforced: today,
345
+ });
346
+ }
347
+ /**
348
+ * Batch reinforce multiple memories (e.g., all results from a search).
349
+ * Lightweight — just updates counters, no LLM calls.
350
+ */
351
+ static async reinforceBatch(store, relativePaths) {
352
+ let reinforced = 0;
353
+ const today = new Date().toISOString().split("T")[0];
354
+ for (const rp of relativePaths) {
355
+ try {
356
+ const memory = await store.readMemory(rp);
357
+ if (!memory)
358
+ continue;
359
+ const currentCount = memory.frontmatter.reinforcement_count || 0;
360
+ await store.updateMemory(rp, {
361
+ reinforcement_count: currentCount + 1,
362
+ last_reinforced: today,
363
+ });
364
+ reinforced++;
365
+ }
366
+ catch {
367
+ // Skip — reinforcement is best-effort
368
+ }
369
+ }
370
+ return reinforced;
371
+ }
372
+ // ─── Archive Operations ──────────────────────────────────────────────
373
+ /**
374
+ * Archive old/low-confidence memories to archive.db.
375
+ */
376
+ async archiveOldMemories(allMemories, writeTarget, dryRun, autoApply, log) {
377
+ const actions = [];
378
+ let archived = 0;
379
+ const archive = new GnosysArchive(writeTarget.path);
380
+ if (!archive.isAvailable()) {
381
+ log("info", " Archive not available (better-sqlite3 not installed). Skipping.");
382
+ return { archived: 0, totalArchived: 0, actions };
383
+ }
384
+ const eligible = getArchiveEligible(allMemories, this.config);
385
+ log("info", ` ${eligible.length} memorie(s) eligible for archiving`);
386
+ if (dryRun) {
387
+ for (const m of eligible) {
388
+ const action = `[DRY RUN] Would archive: "${m.frontmatter.title}" (confidence: ${m.frontmatter.confidence}, last active: ${m.frontmatter.last_reinforced || m.frontmatter.modified})`;
389
+ actions.push(action);
390
+ log("action", action);
391
+ }
392
+ }
393
+ else if (autoApply) {
394
+ for (const m of eligible) {
395
+ try {
396
+ const success = await archive.archiveMemory(m);
397
+ if (success) {
398
+ archived++;
399
+ const action = `Archived: "${m.frontmatter.title}" → archive.db`;
400
+ actions.push(action);
401
+ log("action", ` ${action}`);
402
+ }
403
+ }
404
+ catch (err) {
405
+ const msg = `Failed to archive "${m.frontmatter.title}": ${err instanceof Error ? err.message : String(err)}`;
406
+ log("warn", msg);
407
+ actions.push(msg);
408
+ }
409
+ }
410
+ // Git commit archived changes (file deletions)
411
+ if (archived > 0) {
412
+ try {
413
+ execFileSync("git", ["add", "-A"], { cwd: writeTarget.path, stdio: "pipe" });
414
+ execFileSync("git", ["commit", "-m", `maintenance: archive ${archived} old memories`], { cwd: writeTarget.path, stdio: "pipe" });
415
+ }
416
+ catch {
417
+ // Ignore commit errors (nothing to commit, no git, etc.)
418
+ }
419
+ }
420
+ }
421
+ const stats = archive.getStats();
422
+ archive.close();
423
+ return { archived, totalArchived: stats.totalArchived, actions };
424
+ }
425
+ // ─── Health Report ────────────────────────────────────────────────────
426
+ /**
427
+ * Get a quick health snapshot (used by gnosys doctor).
428
+ * No LLM calls, no embeddings loading — just frontmatter analysis.
429
+ */
430
+ async getHealthReport() {
431
+ const memories = await this.loadAllActiveMemories();
432
+ const { stale, avgConfidence, avgDecayedConfidence } = this.calculateDecay(memories);
433
+ let neverReinforced = 0;
434
+ let totalReinforcements = 0;
435
+ for (const m of memories) {
436
+ const count = m.frontmatter.reinforcement_count || 0;
437
+ if (count === 0)
438
+ neverReinforced++;
439
+ totalReinforcements += count;
440
+ }
441
+ // Archive stats
442
+ const writeTarget = this.resolver.getWriteTarget();
443
+ let totalArchived = 0;
444
+ let archiveEligible = 0;
445
+ if (writeTarget) {
446
+ const archive = new GnosysArchive(writeTarget.path);
447
+ if (archive.isAvailable()) {
448
+ totalArchived = archive.getStats().totalArchived;
449
+ archiveEligible = getArchiveEligible(memories, this.config).length;
450
+ archive.close();
451
+ }
452
+ }
453
+ return {
454
+ totalActive: memories.length,
455
+ totalArchived,
456
+ staleCount: stale.length,
457
+ avgConfidence,
458
+ avgDecayedConfidence,
459
+ neverReinforced,
460
+ totalReinforcements,
461
+ archiveEligible,
462
+ };
463
+ }
464
+ // ─── Internals ────────────────────────────────────────────────────────
465
+ /**
466
+ * Load all active (non-superseded, non-archived) memories from all stores.
467
+ */
468
+ async loadAllActiveMemories() {
469
+ const layered = await this.resolver.getAllMemories();
470
+ return layered.filter((m) => m.frontmatter.status === "active");
471
+ }
472
+ }
473
+ // ─── Utilities ──────────────────────────────────────────────────────────
474
+ /**
475
+ * Jaccard similarity between two strings (word-level).
476
+ */
477
+ function jaccardSimilarity(a, b) {
478
+ const wordsA = new Set(a.split(/\s+/).filter(Boolean));
479
+ const wordsB = new Set(b.split(/\s+/).filter(Boolean));
480
+ if (wordsA.size === 0 && wordsB.size === 0)
481
+ return 1;
482
+ let intersection = 0;
483
+ for (const w of wordsA) {
484
+ if (wordsB.has(w))
485
+ intersection++;
486
+ }
487
+ const union = wordsA.size + wordsB.size - intersection;
488
+ return union > 0 ? intersection / union : 0;
489
+ }
490
+ /**
491
+ * Execute an operation with safe Git commit and rollback on failure.
492
+ */
493
+ async function safeGitOperation(storePath, commitMessage, operation) {
494
+ // Record the current HEAD for rollback
495
+ let headBefore;
496
+ try {
497
+ headBefore = execFileSync("git", ["rev-parse", "HEAD"], { cwd: storePath, stdio: "pipe" }).toString().trim();
498
+ }
499
+ catch {
500
+ // No git or no commits yet — just run the operation
501
+ await operation();
502
+ return;
503
+ }
504
+ try {
505
+ await operation();
506
+ // Commit the changes
507
+ try {
508
+ execFileSync("git", ["add", "-A"], { cwd: storePath, stdio: "pipe" });
509
+ execFileSync("git", ["commit", "-m", `maintenance: ${commitMessage}`], { cwd: storePath, stdio: "pipe" });
510
+ }
511
+ catch (err) {
512
+ const errMsg = err instanceof Error ? err.message : String(err);
513
+ if (!errMsg.includes("nothing to commit") && !errMsg.includes("no changes added")) {
514
+ throw err;
515
+ }
516
+ }
517
+ }
518
+ catch (err) {
519
+ // Rollback on failure
520
+ try {
521
+ execFileSync("git", ["reset", "--hard", headBefore], { cwd: storePath, stdio: "pipe" });
522
+ }
523
+ catch {
524
+ // If even rollback fails, nothing we can do
525
+ }
526
+ throw err;
527
+ }
528
+ }
529
+ /**
530
+ * Format a maintenance report as a human-readable string.
531
+ */
532
+ export function formatMaintenanceReport(report) {
533
+ const lines = [];
534
+ lines.push("Gnosys Maintenance Report");
535
+ lines.push("=".repeat(40));
536
+ lines.push("");
537
+ lines.push(`Total memories scanned: ${report.totalMemories}`);
538
+ lines.push(`Average confidence: ${report.avgConfidence.toFixed(3)} (decayed: ${report.avgDecayedConfidence.toFixed(3)})`);
539
+ lines.push("");
540
+ // Duplicates
541
+ lines.push(`Duplicates found: ${report.duplicates.length}`);
542
+ if (report.duplicates.length > 0) {
543
+ for (const dup of report.duplicates) {
544
+ lines.push(` • "${dup.memoryA.frontmatter.title}" ↔ "${dup.memoryB.frontmatter.title}"`);
545
+ lines.push(` Similarity: ${dup.similarity.toFixed(3)} | Title overlap: ${dup.titleOverlap.toFixed(3)}`);
546
+ }
547
+ }
548
+ lines.push("");
549
+ // Stale memories
550
+ lines.push(`Stale memories: ${report.staleMemories.length} (confidence < ${STALE_CONFIDENCE_THRESHOLD})`);
551
+ if (report.staleMemories.length > 0) {
552
+ for (const sm of report.staleMemories) {
553
+ lines.push(` • "${sm.memory.frontmatter.title}"`);
554
+ lines.push(` Confidence: ${sm.originalConfidence.toFixed(2)} → ${sm.decayedConfidence.toFixed(2)} (${sm.daysSinceReinforced} days unreinforced)`);
555
+ }
556
+ }
557
+ lines.push("");
558
+ // Actions
559
+ if (report.actions.length > 0) {
560
+ lines.push(`Actions (${report.actions.length}):`);
561
+ for (const action of report.actions) {
562
+ lines.push(` ${action}`);
563
+ }
564
+ }
565
+ else {
566
+ lines.push("No actions taken.");
567
+ }
568
+ // Archive
569
+ if (report.archived > 0 || report.totalArchived > 0) {
570
+ lines.push(`Archived this run: ${report.archived}`);
571
+ lines.push(`Total in archive: ${report.totalArchived}`);
572
+ lines.push("");
573
+ }
574
+ // Summary
575
+ if (report.consolidated > 0 || report.decayUpdated > 0 || report.archived > 0) {
576
+ lines.push("");
577
+ lines.push("Summary:");
578
+ if (report.consolidated > 0)
579
+ lines.push(` Consolidated: ${report.consolidated} pair(s)`);
580
+ if (report.decayUpdated > 0)
581
+ lines.push(` Decay updated: ${report.decayUpdated} memorie(s)`);
582
+ if (report.archived > 0)
583
+ lines.push(` Archived: ${report.archived} memorie(s)`);
584
+ }
585
+ return lines.join("\n");
586
+ }
587
+ //# sourceMappingURL=maintenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../src/lib/maintenance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Gnosys Migrate — Moves data from v1.x (Markdown + archive.db + embeddings.db)
3
+ * into the unified gnosys.db (v2.0).
4
+ *
5
+ * Safe: original .md files and old DBs are untouched.
6
+ * Reversible: delete gnosys.db to revert.
7
+ */
8
+ import { MigrationStats } from "./db.js";
9
+ /**
10
+ * Migrate all data from v1.x format into gnosys.db.
11
+ */
12
+ export declare function migrate(storePath: string, options?: {
13
+ verbose?: boolean;
14
+ }): Promise<MigrationStats>;
15
+ /**
16
+ * Format migration results for CLI output.
17
+ */
18
+ export declare function formatMigrationReport(stats: MigrationStats): string;
19
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/lib/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAmB,cAAc,EAAE,MAAM,SAAS,CAAC;AA2C1D;;GAEG;AACH,wBAAsB,OAAO,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9B,OAAO,CAAC,cAAc,CAAC,CA6MzB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAenE"}