@devflow-tools/memory-engine 0.17.8 → 0.18.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 (155) hide show
  1. package/LICENSE +21 -0
  2. package/dist/consolidator.d.ts.map +1 -1
  3. package/dist/consolidator.js +2 -0
  4. package/dist/consolidator.js.map +1 -1
  5. package/dist/embedding-model-store.d.ts +1 -4
  6. package/dist/embedding-model-store.d.ts.map +1 -1
  7. package/dist/embedding-model-store.js +3 -75
  8. package/dist/embedding-model-store.js.map +1 -1
  9. package/dist/embedding-provider.d.ts +3 -2
  10. package/dist/embedding-provider.d.ts.map +1 -1
  11. package/dist/embedding-provider.js +151 -43
  12. package/dist/embedding-provider.js.map +1 -1
  13. package/dist/hybrid-search.d.ts +5 -1
  14. package/dist/hybrid-search.d.ts.map +1 -1
  15. package/dist/hybrid-search.js +92 -56
  16. package/dist/hybrid-search.js.map +1 -1
  17. package/dist/index.d.ts +16 -3
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +8 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/lease-store.d.ts.map +1 -1
  22. package/dist/lease-store.js +30 -0
  23. package/dist/lease-store.js.map +1 -1
  24. package/dist/memory-command-service.d.ts +73 -0
  25. package/dist/memory-command-service.d.ts.map +1 -0
  26. package/dist/memory-command-service.js +283 -0
  27. package/dist/memory-command-service.js.map +1 -0
  28. package/dist/memory-engine.d.ts +19 -15
  29. package/dist/memory-engine.d.ts.map +1 -1
  30. package/dist/memory-engine.js +207 -158
  31. package/dist/memory-engine.js.map +1 -1
  32. package/dist/memory-episode-repository.d.ts +77 -0
  33. package/dist/memory-episode-repository.d.ts.map +1 -0
  34. package/dist/memory-episode-repository.js +262 -0
  35. package/dist/memory-episode-repository.js.map +1 -0
  36. package/dist/memory-fact-provider-port.d.ts +83 -0
  37. package/dist/memory-fact-provider-port.d.ts.map +1 -0
  38. package/dist/memory-fact-provider-port.js +22 -0
  39. package/dist/memory-fact-provider-port.js.map +1 -0
  40. package/dist/memory-fact-validator.d.ts +16 -0
  41. package/dist/memory-fact-validator.d.ts.map +1 -0
  42. package/dist/memory-fact-validator.js +52 -0
  43. package/dist/memory-fact-validator.js.map +1 -0
  44. package/dist/memory-gate.d.ts +14 -17
  45. package/dist/memory-gate.d.ts.map +1 -1
  46. package/dist/memory-gate.js +369 -329
  47. package/dist/memory-gate.js.map +1 -1
  48. package/dist/memory-identity-compiler.d.ts +18 -0
  49. package/dist/memory-identity-compiler.d.ts.map +1 -0
  50. package/dist/memory-identity-compiler.js +26 -0
  51. package/dist/memory-identity-compiler.js.map +1 -0
  52. package/dist/memory-index-projector.d.ts +22 -0
  53. package/dist/memory-index-projector.d.ts.map +1 -0
  54. package/dist/memory-index-projector.js +11 -0
  55. package/dist/memory-index-projector.js.map +1 -0
  56. package/dist/memory-lifecycle-reducer.d.ts +21 -0
  57. package/dist/memory-lifecycle-reducer.d.ts.map +1 -0
  58. package/dist/memory-lifecycle-reducer.js +34 -0
  59. package/dist/memory-lifecycle-reducer.js.map +1 -0
  60. package/dist/memory-maintenance.d.ts +1 -4
  61. package/dist/memory-maintenance.d.ts.map +1 -1
  62. package/dist/memory-maintenance.js +3 -20
  63. package/dist/memory-maintenance.js.map +1 -1
  64. package/dist/memory-query-service.d.ts +24 -0
  65. package/dist/memory-query-service.d.ts.map +1 -0
  66. package/dist/memory-query-service.js +180 -0
  67. package/dist/memory-query-service.js.map +1 -0
  68. package/dist/memory-relevance.d.ts +16 -1
  69. package/dist/memory-relevance.d.ts.map +1 -1
  70. package/dist/memory-relevance.js +83 -139
  71. package/dist/memory-relevance.js.map +1 -1
  72. package/dist/memory-store.d.ts +52 -36
  73. package/dist/memory-store.d.ts.map +1 -1
  74. package/dist/memory-store.js +406 -704
  75. package/dist/memory-store.js.map +1 -1
  76. package/dist/semantic-memory-compiler.d.ts +0 -2
  77. package/dist/semantic-memory-compiler.d.ts.map +1 -1
  78. package/dist/semantic-memory-compiler.js +4 -4
  79. package/dist/semantic-memory-compiler.js.map +1 -1
  80. package/dist/session-summarizer.d.ts +3 -0
  81. package/dist/session-summarizer.d.ts.map +1 -1
  82. package/dist/session-summarizer.js.map +1 -1
  83. package/dist/signal-analyzer.d.ts +2 -2
  84. package/dist/signal-analyzer.d.ts.map +1 -1
  85. package/dist/signal-analyzer.js +10 -16
  86. package/dist/signal-analyzer.js.map +1 -1
  87. package/package.json +14 -5
  88. package/dist/lease-store.test.d.ts +0 -2
  89. package/dist/lease-store.test.d.ts.map +0 -1
  90. package/dist/lease-store.test.js +0 -182
  91. package/dist/lease-store.test.js.map +0 -1
  92. package/dist/migrations/v10-to-v11.d.ts +0 -3
  93. package/dist/migrations/v10-to-v11.d.ts.map +0 -1
  94. package/dist/migrations/v10-to-v11.js +0 -21
  95. package/dist/migrations/v10-to-v11.js.map +0 -1
  96. package/dist/migrations/v11-to-v12.d.ts +0 -66
  97. package/dist/migrations/v11-to-v12.d.ts.map +0 -1
  98. package/dist/migrations/v11-to-v12.js +0 -577
  99. package/dist/migrations/v11-to-v12.js.map +0 -1
  100. package/dist/migrations/v12-to-v13.d.ts +0 -3
  101. package/dist/migrations/v12-to-v13.d.ts.map +0 -1
  102. package/dist/migrations/v12-to-v13.js +0 -50
  103. package/dist/migrations/v12-to-v13.js.map +0 -1
  104. package/dist/migrations/v2-to-v3.d.ts +0 -3
  105. package/dist/migrations/v2-to-v3.d.ts.map +0 -1
  106. package/dist/migrations/v2-to-v3.js +0 -122
  107. package/dist/migrations/v2-to-v3.js.map +0 -1
  108. package/dist/migrations/v2-to-v3.test.d.ts +0 -2
  109. package/dist/migrations/v2-to-v3.test.d.ts.map +0 -1
  110. package/dist/migrations/v2-to-v3.test.js +0 -88
  111. package/dist/migrations/v2-to-v3.test.js.map +0 -1
  112. package/dist/migrations/v3-to-v4.d.ts +0 -3
  113. package/dist/migrations/v3-to-v4.d.ts.map +0 -1
  114. package/dist/migrations/v3-to-v4.js +0 -97
  115. package/dist/migrations/v3-to-v4.js.map +0 -1
  116. package/dist/migrations/v4-to-v5.d.ts +0 -3
  117. package/dist/migrations/v4-to-v5.d.ts.map +0 -1
  118. package/dist/migrations/v4-to-v5.js +0 -34
  119. package/dist/migrations/v4-to-v5.js.map +0 -1
  120. package/dist/migrations/v4-to-v5.test.d.ts +0 -2
  121. package/dist/migrations/v4-to-v5.test.d.ts.map +0 -1
  122. package/dist/migrations/v4-to-v5.test.js +0 -32
  123. package/dist/migrations/v4-to-v5.test.js.map +0 -1
  124. package/dist/migrations/v6-to-v7.d.ts +0 -3
  125. package/dist/migrations/v6-to-v7.d.ts.map +0 -1
  126. package/dist/migrations/v6-to-v7.js +0 -18
  127. package/dist/migrations/v6-to-v7.js.map +0 -1
  128. package/dist/migrations/v6-to-v7.test.d.ts +0 -2
  129. package/dist/migrations/v6-to-v7.test.d.ts.map +0 -1
  130. package/dist/migrations/v6-to-v7.test.js +0 -33
  131. package/dist/migrations/v6-to-v7.test.js.map +0 -1
  132. package/dist/migrations/v7-to-v8.d.ts +0 -3
  133. package/dist/migrations/v7-to-v8.d.ts.map +0 -1
  134. package/dist/migrations/v7-to-v8.js +0 -20
  135. package/dist/migrations/v7-to-v8.js.map +0 -1
  136. package/dist/migrations/v8-to-v9.d.ts +0 -3
  137. package/dist/migrations/v8-to-v9.d.ts.map +0 -1
  138. package/dist/migrations/v8-to-v9.js +0 -18
  139. package/dist/migrations/v8-to-v9.js.map +0 -1
  140. package/dist/migrations/v9-to-v10.d.ts +0 -3
  141. package/dist/migrations/v9-to-v10.d.ts.map +0 -1
  142. package/dist/migrations/v9-to-v10.js +0 -45
  143. package/dist/migrations/v9-to-v10.js.map +0 -1
  144. package/dist/migrations/v9-to-v10.test.d.ts +0 -2
  145. package/dist/migrations/v9-to-v10.test.d.ts.map +0 -1
  146. package/dist/migrations/v9-to-v10.test.js +0 -40
  147. package/dist/migrations/v9-to-v10.test.js.map +0 -1
  148. package/dist/preference-conflicts.test.d.ts +0 -2
  149. package/dist/preference-conflicts.test.d.ts.map +0 -1
  150. package/dist/preference-conflicts.test.js +0 -80
  151. package/dist/preference-conflicts.test.js.map +0 -1
  152. package/dist/semantic-memory.test.d.ts +0 -2
  153. package/dist/semantic-memory.test.d.ts.map +0 -1
  154. package/dist/semantic-memory.test.js +0 -61
  155. package/dist/semantic-memory.test.js.map +0 -1
@@ -1,577 +0,0 @@
1
- import { createHash, randomUUID } from 'node:crypto';
2
- import { enrichExplicitMemory } from '../explicit-memory-enricher.js';
3
- import { isExecutionNarration, sanitizeDurableMemoryNarrative, } from '../durable-memory-text.js';
4
- export function applyV11ToV12Migration(db, projectRoot) {
5
- ensureRepairAuditTable(db);
6
- const applied = db.prepare('SELECT 1 FROM schema_versions WHERE version = 12').get();
7
- if (applied)
8
- return null;
9
- const report = repairHistoricalMemoryData(db, {
10
- projectRoot,
11
- runId: 'migration:v11-to-v12',
12
- });
13
- db.prepare('INSERT OR REPLACE INTO schema_versions (version, applied_at) VALUES (12, ?)')
14
- .run(report.generatedAt);
15
- return report;
16
- }
17
- export function repairHistoricalMemoryData(db, options) {
18
- ensureRepairAuditTable(db);
19
- const generatedAt = options.generatedAt ?? Date.now();
20
- const runId = options.runId ?? `memory-repair:${generatedAt}:${randomUUID().slice(0, 8)}`;
21
- const existing = db.prepare('SELECT report FROM memory_data_repair_runs WHERE id = ?').get(runId);
22
- if (existing)
23
- return JSON.parse(existing.report);
24
- return db.transaction(() => {
25
- const sourceEventsBefore = countRows(db, 'session_events');
26
- const report = {
27
- runId,
28
- schemaVersion: 12,
29
- generatedAt,
30
- sourceEvents: { before: sourceEventsBefore, after: sourceEventsBefore, preserved: true },
31
- ruleEngineQuarantines: [],
32
- consolidatedMemoriesSanitized: [],
33
- duplicateConsolidatedMemoriesMerged: [],
34
- explicitSemanticsReenriched: [],
35
- duplicateExplicitMemoriesMerged: [],
36
- legacyAdoptionsMarked: [],
37
- indexes: {
38
- memoriesFtsRebuilt: false,
39
- observationsFtsRebuilt: false,
40
- conceptsRebuilt: 0,
41
- entitiesRebuilt: 0,
42
- vectorsRemoved: 0,
43
- observationVectorsSynchronized: 0,
44
- vectorBackfillRequired: 0,
45
- },
46
- };
47
- quarantineHistoricalRuleMemories(db, report, generatedAt, runId);
48
- repairConsolidatedMemoryProjections(db, report, options.projectRoot, generatedAt, runId);
49
- repairExplicitSemanticRecords(db, report, options.projectRoot, generatedAt);
50
- mergeDuplicateExplicitMemories(db, report, generatedAt);
51
- mergeDuplicateExplicitTurnObservations(db, report, generatedAt);
52
- markLegacyUnknownAdoptions(db, report);
53
- rebuildDerivedIndexes(db, report);
54
- report.sourceEvents.after = countRows(db, 'session_events');
55
- report.sourceEvents.preserved = report.sourceEvents.before === report.sourceEvents.after;
56
- if (!report.sourceEvents.preserved) {
57
- throw new Error('Historical memory repair must not change source session events');
58
- }
59
- db.prepare(`
60
- INSERT INTO memory_data_repair_runs (id, schema_version, report, created_at)
61
- VALUES (?, 12, ?, ?)
62
- `).run(runId, JSON.stringify(report), generatedAt);
63
- return report;
64
- })();
65
- }
66
- function repairConsolidatedMemoryProjections(db, report, projectRoot, now, runId) {
67
- const rows = db.prepare(`
68
- SELECT id, title, content, original_text, source, status, scope, strength,
69
- confidence, created_at, updated_at
70
- FROM memories
71
- WHERE source = 'consolidation' AND status IN ('active', 'approved')
72
- AND superseded_by IS NULL
73
- ORDER BY updated_at DESC, id DESC
74
- `).all();
75
- const update = db.prepare(`
76
- UPDATE memories SET content = ?, scope = ?, original_text = COALESCE(original_text, ?),
77
- updated_at = ? WHERE id = ?
78
- `);
79
- const insertHistory = db.prepare(`
80
- INSERT OR IGNORE INTO memory_history
81
- (id, memory_id, event, old_content, new_content, old_strength, new_strength, reason, created_at)
82
- VALUES (?, ?, 'UPDATE', ?, ?, ?, ?, 'durable_projection_cleanup', ?)
83
- `);
84
- const deleteVector = db.prepare('DELETE FROM memories_vec WHERE id = ?');
85
- const deleteEmbedding = db.prepare("DELETE FROM embeddings WHERE source_type = 'memory' AND source_id = ?");
86
- const currentRows = [];
87
- for (const row of rows) {
88
- const content = sanitizeDurableMemoryNarrative(row.content || row.title);
89
- const scope = row.scope.trim() || projectRoot;
90
- if (!content) {
91
- db.prepare(`
92
- UPDATE memories SET status = 'rejected', updated_at = ? WHERE id = ?
93
- `).run(now, row.id);
94
- deleteVector.run(row.id);
95
- deleteEmbedding.run(row.id);
96
- continue;
97
- }
98
- if (content !== row.content.normalize('NFKC').trim() || scope !== row.scope) {
99
- report.consolidatedMemoriesSanitized.push({
100
- id: row.id,
101
- previousContent: row.content,
102
- content,
103
- previousScope: row.scope,
104
- scope,
105
- });
106
- update.run(content, scope, row.content, now, row.id);
107
- const historyId = `history:${createHash('sha256')
108
- .update(`${runId}\0${row.id}\0durable_projection_cleanup`)
109
- .digest('hex').slice(0, 24)}`;
110
- insertHistory.run(historyId, row.id, row.content, content, row.strength, row.strength, now);
111
- report.indexes.vectorsRemoved += deleteVector.run(row.id).changes;
112
- report.indexes.vectorsRemoved += deleteEmbedding.run(row.id).changes;
113
- }
114
- currentRows.push({ ...row, content, scope });
115
- }
116
- const groups = new Map();
117
- for (const row of currentRows) {
118
- const semantic = enrichExplicitMemory({
119
- projectRoot: row.scope,
120
- content: row.content,
121
- });
122
- const key = `${row.scope}\0${semantic.facetKey}\0${semantic.semanticKey}`;
123
- const group = groups.get(key) ?? [];
124
- group.push({ ...row, semanticKey: semantic.semanticKey, facetKey: semantic.facetKey });
125
- groups.set(key, group);
126
- }
127
- for (const group of groups.values()) {
128
- if (group.length < 2)
129
- continue;
130
- group.sort((left, right) => right.confidence - left.confidence
131
- || right.updated_at - left.updated_at || right.id.localeCompare(left.id));
132
- const [winner, ...duplicates] = group;
133
- for (const duplicate of duplicates) {
134
- db.prepare(`
135
- UPDATE memories SET status = 'superseded', superseded_by = ?, updated_at = ?
136
- WHERE id = ? AND status IN ('active', 'approved')
137
- `).run(winner.id, now, duplicate.id);
138
- deleteVector.run(duplicate.id);
139
- deleteEmbedding.run(duplicate.id);
140
- }
141
- db.prepare(`
142
- UPDATE memories SET supersedes = COALESCE(supersedes, ?), updated_at = ? WHERE id = ?
143
- `).run(duplicates[0].id, now, winner.id);
144
- report.duplicateConsolidatedMemoriesMerged.push({
145
- winnerId: winner.id,
146
- supersededIds: duplicates.map(row => row.id),
147
- semanticKey: winner.semanticKey,
148
- facetKey: winner.facetKey,
149
- });
150
- }
151
- }
152
- function ensureRepairAuditTable(db) {
153
- db.exec(`
154
- CREATE TABLE IF NOT EXISTS memory_data_repair_runs (
155
- id TEXT PRIMARY KEY,
156
- schema_version INTEGER NOT NULL,
157
- report TEXT NOT NULL,
158
- created_at INTEGER NOT NULL
159
- );
160
- CREATE INDEX IF NOT EXISTS idx_memory_data_repair_runs_created
161
- ON memory_data_repair_runs(created_at DESC);
162
- `);
163
- }
164
- function quarantineHistoricalRuleMemories(db, report, now, runId) {
165
- const rows = db.prepare(`
166
- SELECT id, status, title, content
167
- FROM memories
168
- WHERE source = 'rule_engine'
169
- AND (status = 'approved' OR (
170
- status IN ('active', 'pending')
171
- AND lower(title || ' ' || content) LIKE '%grep%'
172
- ))
173
- ORDER BY id
174
- `).all();
175
- const update = db.prepare(`
176
- UPDATE memories SET status = 'rejected', updated_at = ? WHERE id = ?
177
- `);
178
- const history = db.prepare(`
179
- INSERT OR IGNORE INTO memory_history
180
- (id, memory_id, event, old_content, new_content, old_strength, new_strength, reason, created_at)
181
- SELECT ?, id, 'UPDATE', content, content, strength, strength, ?, ?
182
- FROM memories WHERE id = ?
183
- `);
184
- const deleteVector = db.prepare('DELETE FROM memories_vec WHERE id = ?');
185
- const deleteEmbedding = db.prepare("DELETE FROM embeddings WHERE source_type = 'memory' AND source_id = ?");
186
- for (const row of rows) {
187
- const falseGrep = /grep/iu.test(`${row.title} ${row.content}`);
188
- const reason = falseGrep ? 'false_grep_correction' : 'untrusted_rule_engine_approval';
189
- report.ruleEngineQuarantines.push({ id: row.id, previousStatus: row.status, reason });
190
- update.run(now, row.id);
191
- const historyId = `history:${createHash('sha256').update(`${runId}\0${row.id}\0${reason}`).digest('hex').slice(0, 24)}`;
192
- history.run(historyId, `memory_repair:${reason}; previous_status=${row.status}`, now, row.id);
193
- report.indexes.vectorsRemoved += deleteVector.run(row.id).changes;
194
- report.indexes.vectorsRemoved += deleteEmbedding.run(row.id).changes;
195
- }
196
- }
197
- function repairExplicitSemanticRecords(db, report, defaultProjectRoot, now) {
198
- const rows = db.prepare(`
199
- SELECT * FROM observations
200
- WHERE source = 'explicit_intent'
201
- ORDER BY project, COALESCE(explicit_accepted_at, timestamp), id
202
- `).all();
203
- const update = db.prepare(`
204
- UPDATE observations
205
- SET type = ?, title = ?, narrative = ?, facts = ?, files = ?, tools = ?, concepts = ?,
206
- dedup_key = NULL, evidence_status = ?, evidence_details = ?, updated_at = ?,
207
- semantic_subject = ?, semantic_predicate = ?, semantic_value = ?, semantic_polarity = ?,
208
- semantic_key = ?, facet_key = ?, entities = ?, temporal = ?, embedding = NULL
209
- WHERE id = ?
210
- `);
211
- const deleteEmbedding = db.prepare("DELETE FROM embeddings WHERE source_type = 'observation' AND source_id = ?");
212
- for (const row of rows) {
213
- const durableNarrative = sanitizeDurableMemoryNarrative(row.narrative || row.title);
214
- if (!durableNarrative)
215
- continue;
216
- const enrichment = enrichExplicitMemory({
217
- projectRoot: row.project || defaultProjectRoot,
218
- content: durableNarrative,
219
- sourceEventIds: parseStringArray(row.source_event_ids),
220
- });
221
- const mergedFacts = uniqueStrings([...parseStringArray(row.facts), ...enrichment.facts]);
222
- const mergedConcepts = uniqueStrings([...parseStringArray(row.concepts), ...enrichment.concepts]);
223
- const next = {
224
- type: enrichment.type,
225
- title: enrichment.title,
226
- narrative: enrichment.narrative,
227
- facts: JSON.stringify(mergedFacts),
228
- concepts: JSON.stringify(mergedConcepts),
229
- entities: JSON.stringify(enrichment.entities),
230
- semanticSubject: enrichment.subject,
231
- semanticPredicate: enrichment.predicate,
232
- semanticValue: enrichment.value,
233
- semanticPolarity: enrichment.polarity,
234
- semanticKey: enrichment.semanticKey,
235
- facetKey: enrichment.facetKey,
236
- temporal: enrichment.temporal ? JSON.stringify(enrichment.temporal) : null,
237
- };
238
- const malformed = row.type !== next.type
239
- || row.title !== next.title
240
- || row.narrative !== next.narrative
241
- || row.facts !== next.facts
242
- || row.concepts !== next.concepts
243
- || row.entities !== next.entities
244
- || row.semantic_subject !== next.semanticSubject
245
- || row.semantic_predicate !== next.semanticPredicate
246
- || row.semantic_value !== next.semanticValue
247
- || row.semantic_polarity !== next.semanticPolarity
248
- || row.semantic_key !== next.semanticKey
249
- || row.facet_key !== next.facetKey;
250
- if (!malformed)
251
- continue;
252
- report.explicitSemanticsReenriched.push({
253
- id: row.id,
254
- previousSemanticKey: row.semantic_key,
255
- semanticKey: next.semanticKey,
256
- facetKey: next.facetKey,
257
- });
258
- update.run(next.type, next.title, next.narrative, next.facts, JSON.stringify(enrichment.files), JSON.stringify(enrichment.tools), next.concepts, enrichment.evidenceStatus, JSON.stringify(enrichment.evidence), now, next.semanticSubject, next.semanticPredicate, next.semanticValue, next.semanticPolarity, next.semanticKey, next.facetKey, next.entities, next.temporal, row.id);
259
- report.indexes.vectorsRemoved += deleteEmbedding.run(row.id).changes;
260
- }
261
- }
262
- function mergeDuplicateExplicitMemories(db, report, now) {
263
- const rows = db.prepare(`
264
- SELECT * FROM observations
265
- WHERE source = 'explicit_intent'
266
- AND quality_status = 'accepted'
267
- AND resolution_state = 'current'
268
- AND semantic_key IS NOT NULL
269
- AND facet_key IS NOT NULL
270
- ORDER BY project, facet_key, semantic_key, COALESCE(explicit_accepted_at, timestamp) DESC, id DESC
271
- `).all();
272
- const groups = new Map();
273
- for (const row of rows) {
274
- const key = `${row.project}\0${row.facet_key}\0${row.semantic_key}`;
275
- const group = groups.get(key) ?? [];
276
- group.push(row);
277
- groups.set(key, group);
278
- }
279
- for (const unsortedGroup of groups.values()) {
280
- const group = [...unsortedGroup].sort((left, right) => semanticWinnerScore(right) - semanticWinnerScore(left)
281
- || (right.explicit_accepted_at ?? right.timestamp) - (left.explicit_accepted_at ?? left.timestamp)
282
- || right.id.localeCompare(left.id));
283
- if (group.length < 2)
284
- continue;
285
- const [winner, ...duplicates] = group;
286
- const sourceEventIds = uniqueStrings(group.flatMap(row => parseStringArray(row.source_event_ids)));
287
- const facts = uniqueStrings(group.flatMap(row => parseStringArray(row.facts)));
288
- const concepts = uniqueStrings(group.flatMap(row => parseStringArray(row.concepts)));
289
- const entities = uniqueStrings(group.flatMap(row => parseStringArray(row.entities)));
290
- const evidence = uniqueObjects(group.flatMap(row => parseObjectArray(row.evidence_details)));
291
- const reinforceCount = group.reduce((sum, row) => sum + row.reinforce_count, 0) + duplicates.length;
292
- const durableNarrative = sanitizeDurableMemoryNarrative(winner.narrative || winner.title);
293
- const releaseDerivedKeys = db.prepare(`UPDATE observations SET dedup_key = NULL WHERE id IN (${group.map(() => '?').join(', ')})`);
294
- releaseDerivedKeys.run(...group.map(row => row.id));
295
- const supersede = db.prepare(`
296
- UPDATE observations
297
- SET resolution_state = 'superseded', superseded_by_observation = ?, dedup_key = NULL,
298
- quality_details = ?, updated_at = ?
299
- WHERE id = ?
300
- `);
301
- for (const duplicate of duplicates) {
302
- const priorDetails = parseObject(duplicate.quality_details);
303
- supersede.run(winner.id, JSON.stringify({
304
- ...priorDetails,
305
- memoryRepair: {
306
- reason: 'duplicate_semantic_memory',
307
- previousResolutionState: duplicate.resolution_state,
308
- winnerId: winner.id,
309
- },
310
- }), now, duplicate.id);
311
- db.prepare(`
312
- INSERT OR IGNORE INTO observation_relations
313
- (source_observation_id, target_observation_id, type, created_at)
314
- VALUES (?, ?, 'supersedes', ?)
315
- `).run(winner.id, duplicate.id, now);
316
- }
317
- db.prepare(`
318
- UPDATE observations
319
- SET narrative = ?, source_event_ids = ?, facts = ?, concepts = ?, entities = ?, evidence_details = ?,
320
- reinforce_count = ?, last_reinforced_at = ?, updated_at = ?, dedup_key = semantic_key
321
- WHERE id = ?
322
- `).run(durableNarrative, JSON.stringify(sourceEventIds), JSON.stringify(facts), JSON.stringify(concepts), JSON.stringify(entities), JSON.stringify(evidence), reinforceCount, now, now, winner.id);
323
- report.duplicateExplicitMemoriesMerged.push({
324
- winnerId: winner.id,
325
- supersededIds: duplicates.map(row => row.id),
326
- semanticKey: winner.semantic_key,
327
- facetKey: winner.facet_key,
328
- reason: 'duplicate_semantic_memory',
329
- });
330
- }
331
- db.exec(`
332
- UPDATE observations AS target
333
- SET dedup_key = semantic_key
334
- WHERE source = 'explicit_intent'
335
- AND quality_status = 'accepted'
336
- AND resolution_state = 'current'
337
- AND semantic_key IS NOT NULL
338
- AND (
339
- SELECT COUNT(*) FROM observations AS candidate
340
- WHERE candidate.project = target.project
341
- AND candidate.semantic_key = target.semantic_key
342
- AND candidate.quality_status = 'accepted'
343
- AND candidate.resolution_state = 'current'
344
- ) = 1
345
- AND NOT EXISTS (
346
- SELECT 1 FROM observations AS collision
347
- WHERE collision.id <> target.id AND collision.dedup_key = target.semantic_key
348
- );
349
- `);
350
- }
351
- function mergeDuplicateExplicitTurnObservations(db, report, now) {
352
- const rows = db.prepare(`
353
- SELECT * FROM observations
354
- WHERE source = 'explicit_intent'
355
- AND quality_status = 'accepted'
356
- AND resolution_state = 'current'
357
- ORDER BY project, facet_key, timestamp DESC, id DESC
358
- `).all();
359
- const groups = new Map();
360
- for (const row of rows) {
361
- const sourceEvents = parseStringArray(row.source_event_ids).sort().join('\0');
362
- if (!sourceEvents)
363
- continue;
364
- const key = `${row.project}\0${sourceEvents}`;
365
- const group = groups.get(key) ?? [];
366
- group.push(row);
367
- groups.set(key, group);
368
- }
369
- for (const group of groups.values()) {
370
- if (group.length < 2)
371
- continue;
372
- const winner = [...group].sort((left, right) => semanticWinnerScore(right) - semanticWinnerScore(left))[0];
373
- const duplicates = group.filter(candidate => candidate.id !== winner.id
374
- && textSimilarity(winner.narrative, candidate.narrative) >= 0.55);
375
- if (duplicates.length === 0)
376
- continue;
377
- for (const duplicate of duplicates) {
378
- db.prepare(`
379
- UPDATE observations
380
- SET resolution_state = 'superseded', superseded_by_observation = ?, dedup_key = NULL,
381
- quality_details = ?, updated_at = ?
382
- WHERE id = ? AND resolution_state = 'current'
383
- `).run(winner.id, JSON.stringify({
384
- ...parseObject(duplicate.quality_details),
385
- memoryRepair: {
386
- reason: 'duplicate_explicit_turn_observation',
387
- winnerId: winner.id,
388
- sourceEventIds: parseStringArray(duplicate.source_event_ids),
389
- },
390
- }), now, duplicate.id);
391
- db.prepare(`
392
- INSERT OR IGNORE INTO observation_relations
393
- (source_observation_id, target_observation_id, type, created_at)
394
- VALUES (?, ?, 'supersedes', ?)
395
- `).run(winner.id, duplicate.id, now);
396
- }
397
- report.duplicateExplicitMemoriesMerged.push({
398
- winnerId: winner.id,
399
- supersededIds: duplicates.map(candidate => candidate.id),
400
- semanticKey: winner.semantic_key ?? '',
401
- facetKey: winner.facet_key ?? '',
402
- reason: 'duplicate_semantic_memory',
403
- });
404
- }
405
- }
406
- function textSimilarity(left, right) {
407
- const leftTerms = new Set([
408
- ...cjkBigrams(left),
409
- ...(left.match(/[a-z][a-z0-9_-]{2,}|\d+(?:\.\d+)*/giu) ?? []).map(value => value.toLocaleLowerCase('en-US')),
410
- ]);
411
- const rightTerms = new Set([
412
- ...cjkBigrams(right),
413
- ...(right.match(/[a-z][a-z0-9_-]{2,}|\d+(?:\.\d+)*/giu) ?? []).map(value => value.toLocaleLowerCase('en-US')),
414
- ]);
415
- if (leftTerms.size === 0 || rightTerms.size === 0)
416
- return 0;
417
- let overlap = 0;
418
- for (const term of leftTerms)
419
- if (rightTerms.has(term))
420
- overlap += 1;
421
- return overlap / Math.min(leftTerms.size, rightTerms.size);
422
- }
423
- function cjkBigrams(value) {
424
- const result = [];
425
- for (const run of value.normalize('NFKC').match(/[\p{Script=Han}]+/gu) ?? []) {
426
- const characters = [...run];
427
- for (let index = 0; index + 1 < characters.length; index += 1) {
428
- result.push(`${characters[index]}${characters[index + 1]}`);
429
- }
430
- }
431
- return result;
432
- }
433
- function semanticWinnerScore(row) {
434
- let score = 0;
435
- if (!isExecutionNarration(row.narrative))
436
- score += 4;
437
- if (sanitizeDurableMemoryNarrative(row.narrative) === row.narrative.normalize('NFKC').trim())
438
- score += 3;
439
- if (row.evidence_status === 'verified')
440
- score += 2;
441
- score += Math.min(2, parseStringArray(row.source_event_ids).length);
442
- return score;
443
- }
444
- function markLegacyUnknownAdoptions(db, report) {
445
- const rows = db.prepare(`
446
- SELECT id, source_type, source_id, outcome_reason
447
- FROM retrieval_access_log
448
- WHERE access_type = 'adopted'
449
- AND verification_receipt IS NULL
450
- AND (tool_evidence IS NULL OR tool_evidence = '' OR tool_evidence = '[]')
451
- AND (outcome_reason IS NULL OR outcome_reason = '')
452
- ORDER BY id
453
- `).all();
454
- const update = db.prepare("UPDATE retrieval_access_log SET outcome_reason = 'legacy_unknown' WHERE id = ?");
455
- for (const row of rows) {
456
- report.legacyAdoptionsMarked.push({
457
- id: row.id,
458
- sourceType: row.source_type,
459
- sourceId: row.source_id,
460
- previousOutcomeReason: row.outcome_reason,
461
- reason: 'legacy_unknown',
462
- });
463
- update.run(row.id);
464
- }
465
- }
466
- function rebuildDerivedIndexes(db, report) {
467
- db.exec("INSERT INTO memories_fts(memories_fts) VALUES('rebuild')");
468
- report.indexes.memoriesFtsRebuilt = true;
469
- db.exec(`
470
- DELETE FROM observations_fts;
471
- DELETE FROM observations_terms_fts;
472
- INSERT INTO observations_fts(rowid, id, title, narrative, facts, concepts)
473
- SELECT rowid, id, title, narrative, facts, concepts FROM observations
474
- WHERE quality_status = 'accepted' AND resolution_state = 'current';
475
- INSERT INTO observations_terms_fts(rowid, id, title, narrative, facts, concepts)
476
- SELECT rowid, id, title, narrative, facts, concepts FROM observations
477
- WHERE quality_status = 'accepted' AND resolution_state = 'current';
478
- `);
479
- report.indexes.observationsFtsRebuilt = true;
480
- db.exec('DELETE FROM observation_concepts');
481
- const insertConcept = db.prepare('INSERT OR IGNORE INTO observation_concepts (observation_id, concept) VALUES (?, ?)');
482
- const insertEntity = db.prepare(`
483
- INSERT OR IGNORE INTO observation_entities
484
- (observation_id, project, normalized_entity, display_entity)
485
- VALUES (?, ?, ?, ?)
486
- `);
487
- db.exec('DELETE FROM observation_entities');
488
- const observations = db.prepare('SELECT id, project, concepts, entities FROM observations ORDER BY id').all();
489
- for (const row of observations) {
490
- for (const concept of uniqueStrings(parseStringArray(row.concepts))) {
491
- report.indexes.conceptsRebuilt += insertConcept.run(row.id, concept).changes;
492
- }
493
- for (const entity of uniqueStrings(parseStringArray(row.entities))) {
494
- const normalized = entity.normalize('NFKC').trim().toLocaleLowerCase('en-US').replace(/\s+/gu, ' ');
495
- if (normalized)
496
- report.indexes.entitiesRebuilt += insertEntity.run(row.id, row.project, normalized, entity).changes;
497
- }
498
- }
499
- report.indexes.vectorsRemoved += db.prepare(`
500
- DELETE FROM embeddings
501
- WHERE source_type = 'observation' AND source_id IN (
502
- SELECT id FROM observations
503
- WHERE quality_status <> 'accepted' OR resolution_state <> 'current' OR embedding IS NULL
504
- )
505
- `).run().changes;
506
- db.exec(`
507
- INSERT OR REPLACE INTO embeddings(source_type, source_id, vector)
508
- SELECT 'observation', id, embedding FROM observations
509
- WHERE quality_status = 'accepted' AND resolution_state = 'current' AND embedding IS NOT NULL;
510
- `);
511
- report.indexes.observationVectorsSynchronized = db.prepare(`
512
- SELECT COUNT(*) AS count FROM embeddings e
513
- JOIN observations o ON o.id = e.source_id
514
- WHERE e.source_type = 'observation'
515
- AND o.quality_status = 'accepted' AND o.resolution_state = 'current'
516
- `).get().count;
517
- report.indexes.vectorBackfillRequired = db.prepare(`
518
- SELECT COUNT(*) AS count FROM observations
519
- WHERE quality_status = 'accepted' AND resolution_state = 'current' AND embedding IS NULL
520
- `).get().count;
521
- }
522
- function countRows(db, table) {
523
- return db.prepare(`SELECT COUNT(*) AS count FROM ${table}`).get().count;
524
- }
525
- function parseStringArray(value) {
526
- try {
527
- const parsed = JSON.parse(value ?? '[]');
528
- return Array.isArray(parsed) ? parsed.filter((item) => typeof item === 'string') : [];
529
- }
530
- catch {
531
- return [];
532
- }
533
- }
534
- function parseObjectArray(value) {
535
- try {
536
- const parsed = JSON.parse(value ?? '[]');
537
- return Array.isArray(parsed)
538
- ? parsed.filter((item) => Boolean(item) && typeof item === 'object' && !Array.isArray(item))
539
- : [];
540
- }
541
- catch {
542
- return [];
543
- }
544
- }
545
- function parseObject(value) {
546
- try {
547
- const parsed = JSON.parse(value ?? '{}');
548
- return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
549
- ? parsed
550
- : {};
551
- }
552
- catch {
553
- return {};
554
- }
555
- }
556
- function uniqueStrings(values) {
557
- const seen = new Set();
558
- return values.filter(value => {
559
- const normalized = value.normalize('NFKC').trim();
560
- const key = normalized.toLocaleLowerCase('en-US');
561
- if (!normalized || seen.has(key))
562
- return false;
563
- seen.add(key);
564
- return true;
565
- });
566
- }
567
- function uniqueObjects(values) {
568
- const seen = new Set();
569
- return values.filter(value => {
570
- const key = JSON.stringify(value);
571
- if (seen.has(key))
572
- return false;
573
- seen.add(key);
574
- return true;
575
- });
576
- }
577
- //# sourceMappingURL=v11-to-v12.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"v11-to-v12.js","sourceRoot":"","sources":["../../src/migrations/v11-to-v12.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type Database from 'better-sqlite3';
2
- export declare function applyV12ToV13Migration(db: Database.Database): void;
3
- //# sourceMappingURL=v12-to-v13.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"v12-to-v13.d.ts","sourceRoot":"","sources":["../../src/migrations/v12-to-v13.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CA+ClE"}