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.
- package/LICENSE +21 -0
- package/README.md +1387 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3753 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2267 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/archive.d.ts +95 -0
- package/dist/lib/archive.d.ts.map +1 -0
- package/dist/lib/archive.js +311 -0
- package/dist/lib/archive.js.map +1 -0
- package/dist/lib/ask.d.ts +77 -0
- package/dist/lib/ask.d.ts.map +1 -0
- package/dist/lib/ask.js +316 -0
- package/dist/lib/ask.js.map +1 -0
- package/dist/lib/audit.d.ts +47 -0
- package/dist/lib/audit.d.ts.map +1 -0
- package/dist/lib/audit.js +136 -0
- package/dist/lib/audit.js.map +1 -0
- package/dist/lib/bootstrap.d.ts +56 -0
- package/dist/lib/bootstrap.d.ts.map +1 -0
- package/dist/lib/bootstrap.js +163 -0
- package/dist/lib/bootstrap.js.map +1 -0
- package/dist/lib/config.d.ts +239 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +371 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/dashboard.d.ts +81 -0
- package/dist/lib/dashboard.d.ts.map +1 -0
- package/dist/lib/dashboard.js +314 -0
- package/dist/lib/dashboard.js.map +1 -0
- package/dist/lib/db.d.ts +182 -0
- package/dist/lib/db.d.ts.map +1 -0
- package/dist/lib/db.js +620 -0
- package/dist/lib/db.js.map +1 -0
- package/dist/lib/dbSearch.d.ts +65 -0
- package/dist/lib/dbSearch.d.ts.map +1 -0
- package/dist/lib/dbSearch.js +239 -0
- package/dist/lib/dbSearch.js.map +1 -0
- package/dist/lib/dbWrite.d.ts +56 -0
- package/dist/lib/dbWrite.d.ts.map +1 -0
- package/dist/lib/dbWrite.js +171 -0
- package/dist/lib/dbWrite.js.map +1 -0
- package/dist/lib/dream.d.ts +170 -0
- package/dist/lib/dream.d.ts.map +1 -0
- package/dist/lib/dream.js +706 -0
- package/dist/lib/dream.js.map +1 -0
- package/dist/lib/embeddings.d.ts +84 -0
- package/dist/lib/embeddings.d.ts.map +1 -0
- package/dist/lib/embeddings.js +226 -0
- package/dist/lib/embeddings.js.map +1 -0
- package/dist/lib/export.d.ts +92 -0
- package/dist/lib/export.d.ts.map +1 -0
- package/dist/lib/export.js +362 -0
- package/dist/lib/export.js.map +1 -0
- package/dist/lib/federated.d.ts +113 -0
- package/dist/lib/federated.d.ts.map +1 -0
- package/dist/lib/federated.js +346 -0
- package/dist/lib/federated.js.map +1 -0
- package/dist/lib/graph.d.ts +50 -0
- package/dist/lib/graph.d.ts.map +1 -0
- package/dist/lib/graph.js +118 -0
- package/dist/lib/graph.js.map +1 -0
- package/dist/lib/history.d.ts +39 -0
- package/dist/lib/history.d.ts.map +1 -0
- package/dist/lib/history.js +112 -0
- package/dist/lib/history.js.map +1 -0
- package/dist/lib/hybridSearch.d.ts +80 -0
- package/dist/lib/hybridSearch.d.ts.map +1 -0
- package/dist/lib/hybridSearch.js +296 -0
- package/dist/lib/hybridSearch.js.map +1 -0
- package/dist/lib/import.d.ts +52 -0
- package/dist/lib/import.d.ts.map +1 -0
- package/dist/lib/import.js +365 -0
- package/dist/lib/import.js.map +1 -0
- package/dist/lib/ingest.d.ts +51 -0
- package/dist/lib/ingest.d.ts.map +1 -0
- package/dist/lib/ingest.js +144 -0
- package/dist/lib/ingest.js.map +1 -0
- package/dist/lib/lensing.d.ts +35 -0
- package/dist/lib/lensing.d.ts.map +1 -0
- package/dist/lib/lensing.js +85 -0
- package/dist/lib/lensing.js.map +1 -0
- package/dist/lib/llm.d.ts +84 -0
- package/dist/lib/llm.d.ts.map +1 -0
- package/dist/lib/llm.js +386 -0
- package/dist/lib/llm.js.map +1 -0
- package/dist/lib/lock.d.ts +28 -0
- package/dist/lib/lock.d.ts.map +1 -0
- package/dist/lib/lock.js +145 -0
- package/dist/lib/lock.js.map +1 -0
- package/dist/lib/maintenance.d.ts +124 -0
- package/dist/lib/maintenance.d.ts.map +1 -0
- package/dist/lib/maintenance.js +587 -0
- package/dist/lib/maintenance.js.map +1 -0
- package/dist/lib/migrate.d.ts +19 -0
- package/dist/lib/migrate.d.ts.map +1 -0
- package/dist/lib/migrate.js +260 -0
- package/dist/lib/migrate.js.map +1 -0
- package/dist/lib/preferences.d.ts +49 -0
- package/dist/lib/preferences.d.ts.map +1 -0
- package/dist/lib/preferences.js +149 -0
- package/dist/lib/preferences.js.map +1 -0
- package/dist/lib/projectIdentity.d.ts +66 -0
- package/dist/lib/projectIdentity.d.ts.map +1 -0
- package/dist/lib/projectIdentity.js +148 -0
- package/dist/lib/projectIdentity.js.map +1 -0
- package/dist/lib/recall.d.ts +82 -0
- package/dist/lib/recall.d.ts.map +1 -0
- package/dist/lib/recall.js +289 -0
- package/dist/lib/recall.js.map +1 -0
- package/dist/lib/resolver.d.ts +116 -0
- package/dist/lib/resolver.d.ts.map +1 -0
- package/dist/lib/resolver.js +372 -0
- package/dist/lib/resolver.js.map +1 -0
- package/dist/lib/retry.d.ts +24 -0
- package/dist/lib/retry.d.ts.map +1 -0
- package/dist/lib/retry.js +60 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/lib/rulesGen.d.ts +51 -0
- package/dist/lib/rulesGen.d.ts.map +1 -0
- package/dist/lib/rulesGen.js +167 -0
- package/dist/lib/rulesGen.js.map +1 -0
- package/dist/lib/search.d.ts +51 -0
- package/dist/lib/search.d.ts.map +1 -0
- package/dist/lib/search.js +190 -0
- package/dist/lib/search.js.map +1 -0
- package/dist/lib/staticSearch.d.ts +70 -0
- package/dist/lib/staticSearch.d.ts.map +1 -0
- package/dist/lib/staticSearch.js +162 -0
- package/dist/lib/staticSearch.js.map +1 -0
- package/dist/lib/store.d.ts +79 -0
- package/dist/lib/store.d.ts.map +1 -0
- package/dist/lib/store.js +227 -0
- package/dist/lib/store.js.map +1 -0
- package/dist/lib/structuredIngest.d.ts +37 -0
- package/dist/lib/structuredIngest.d.ts.map +1 -0
- package/dist/lib/structuredIngest.js +208 -0
- package/dist/lib/structuredIngest.js.map +1 -0
- package/dist/lib/tags.d.ts +26 -0
- package/dist/lib/tags.d.ts.map +1 -0
- package/dist/lib/tags.js +109 -0
- package/dist/lib/tags.js.map +1 -0
- package/dist/lib/timeline.d.ts +34 -0
- package/dist/lib/timeline.d.ts.map +1 -0
- package/dist/lib/timeline.js +116 -0
- package/dist/lib/timeline.js.map +1 -0
- package/dist/lib/trace.d.ts +42 -0
- package/dist/lib/trace.d.ts.map +1 -0
- package/dist/lib/trace.js +338 -0
- package/dist/lib/trace.js.map +1 -0
- package/dist/lib/webIndex.d.ts +28 -0
- package/dist/lib/webIndex.d.ts.map +1 -0
- package/dist/lib/webIndex.js +208 -0
- package/dist/lib/webIndex.js.map +1 -0
- package/dist/lib/webIngest.d.ts +51 -0
- package/dist/lib/webIngest.d.ts.map +1 -0
- package/dist/lib/webIngest.js +533 -0
- package/dist/lib/webIngest.js.map +1 -0
- package/dist/lib/wikilinks.d.ts +63 -0
- package/dist/lib/wikilinks.d.ts.map +1 -0
- package/dist/lib/wikilinks.js +146 -0
- package/dist/lib/wikilinks.js.map +1 -0
- package/dist/sandbox/client.d.ts +82 -0
- package/dist/sandbox/client.d.ts.map +1 -0
- package/dist/sandbox/client.js +128 -0
- package/dist/sandbox/client.js.map +1 -0
- package/dist/sandbox/helper-template.d.ts +14 -0
- package/dist/sandbox/helper-template.d.ts.map +1 -0
- package/dist/sandbox/helper-template.js +285 -0
- package/dist/sandbox/helper-template.js.map +1 -0
- package/dist/sandbox/index.d.ts +10 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +10 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/sandbox/manager.d.ts +40 -0
- package/dist/sandbox/manager.d.ts.map +1 -0
- package/dist/sandbox/manager.js +220 -0
- package/dist/sandbox/manager.js.map +1 -0
- package/dist/sandbox/server.d.ts +44 -0
- package/dist/sandbox/server.d.ts.map +1 -0
- package/dist/sandbox/server.js +661 -0
- package/dist/sandbox/server.js.map +1 -0
- package/package.json +103 -0
- 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"}
|