ds4-context-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -0
  3. package/dist/artifacts/artifact-manager.d.ts +58 -0
  4. package/dist/artifacts/artifact-manager.d.ts.map +1 -0
  5. package/dist/artifacts/artifact-manager.js +445 -0
  6. package/dist/artifacts/artifact-manager.js.map +1 -0
  7. package/dist/artifacts/artifact-store.d.ts +33 -0
  8. package/dist/artifacts/artifact-store.d.ts.map +1 -0
  9. package/dist/artifacts/artifact-store.js +116 -0
  10. package/dist/artifacts/artifact-store.js.map +1 -0
  11. package/dist/compaction/compaction-record.d.ts +74 -0
  12. package/dist/compaction/compaction-record.d.ts.map +1 -0
  13. package/dist/compaction/compaction-record.js +113 -0
  14. package/dist/compaction/compaction-record.js.map +1 -0
  15. package/dist/compaction/summary-contract.d.ts +68 -0
  16. package/dist/compaction/summary-contract.d.ts.map +1 -0
  17. package/dist/compaction/summary-contract.js +315 -0
  18. package/dist/compaction/summary-contract.js.map +1 -0
  19. package/dist/compaction/summary-graph.d.ts +48 -0
  20. package/dist/compaction/summary-graph.d.ts.map +1 -0
  21. package/dist/compaction/summary-graph.js +123 -0
  22. package/dist/compaction/summary-graph.js.map +1 -0
  23. package/dist/config/config-loader.d.ts +18 -0
  24. package/dist/config/config-loader.d.ts.map +1 -0
  25. package/dist/config/config-loader.js +305 -0
  26. package/dist/config/config-loader.js.map +1 -0
  27. package/dist/config/config.d.ts +113 -0
  28. package/dist/config/config.d.ts.map +1 -0
  29. package/dist/config/config.js +89 -0
  30. package/dist/config/config.js.map +1 -0
  31. package/dist/continuation/native-continuation.d.ts +107 -0
  32. package/dist/continuation/native-continuation.d.ts.map +1 -0
  33. package/dist/continuation/native-continuation.js +374 -0
  34. package/dist/continuation/native-continuation.js.map +1 -0
  35. package/dist/core/budget-manager.d.ts +26 -0
  36. package/dist/core/budget-manager.d.ts.map +1 -0
  37. package/dist/core/budget-manager.js +42 -0
  38. package/dist/core/budget-manager.js.map +1 -0
  39. package/dist/core/canonical-message.d.ts +69 -0
  40. package/dist/core/canonical-message.d.ts.map +1 -0
  41. package/dist/core/canonical-message.js +2 -0
  42. package/dist/core/canonical-message.js.map +1 -0
  43. package/dist/core/model-awareness.d.ts +59 -0
  44. package/dist/core/model-awareness.d.ts.map +1 -0
  45. package/dist/core/model-awareness.js +177 -0
  46. package/dist/core/model-awareness.js.map +1 -0
  47. package/dist/core/model-profile.d.ts +27 -0
  48. package/dist/core/model-profile.d.ts.map +1 -0
  49. package/dist/core/model-profile.js +29 -0
  50. package/dist/core/model-profile.js.map +1 -0
  51. package/dist/core/token-estimator.d.ts +4 -0
  52. package/dist/core/token-estimator.d.ts.map +1 -0
  53. package/dist/core/token-estimator.js +64 -0
  54. package/dist/core/token-estimator.js.map +1 -0
  55. package/dist/index.d.ts +37 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +37 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/manifest/context-manifest.d.ts +163 -0
  60. package/dist/manifest/context-manifest.d.ts.map +1 -0
  61. package/dist/manifest/context-manifest.js +2 -0
  62. package/dist/manifest/context-manifest.js.map +1 -0
  63. package/dist/manifest/observer.d.ts +63 -0
  64. package/dist/manifest/observer.d.ts.map +1 -0
  65. package/dist/manifest/observer.js +150 -0
  66. package/dist/manifest/observer.js.map +1 -0
  67. package/dist/memory/memory-manager.d.ts +112 -0
  68. package/dist/memory/memory-manager.d.ts.map +1 -0
  69. package/dist/memory/memory-manager.js +499 -0
  70. package/dist/memory/memory-manager.js.map +1 -0
  71. package/dist/memory/memory-types.d.ts +126 -0
  72. package/dist/memory/memory-types.d.ts.map +1 -0
  73. package/dist/memory/memory-types.js +73 -0
  74. package/dist/memory/memory-types.js.map +1 -0
  75. package/dist/persistence/migrations.d.ts +17 -0
  76. package/dist/persistence/migrations.d.ts.map +1 -0
  77. package/dist/persistence/migrations.js +588 -0
  78. package/dist/persistence/migrations.js.map +1 -0
  79. package/dist/persistence/repositories/artifact-repository.d.ts +50 -0
  80. package/dist/persistence/repositories/artifact-repository.d.ts.map +1 -0
  81. package/dist/persistence/repositories/artifact-repository.js +186 -0
  82. package/dist/persistence/repositories/artifact-repository.js.map +1 -0
  83. package/dist/persistence/repositories/context-manifest-repository.d.ts +19 -0
  84. package/dist/persistence/repositories/context-manifest-repository.d.ts.map +1 -0
  85. package/dist/persistence/repositories/context-manifest-repository.js +144 -0
  86. package/dist/persistence/repositories/context-manifest-repository.js.map +1 -0
  87. package/dist/persistence/repositories/memory-repository.d.ts +33 -0
  88. package/dist/persistence/repositories/memory-repository.d.ts.map +1 -0
  89. package/dist/persistence/repositories/memory-repository.js +429 -0
  90. package/dist/persistence/repositories/memory-repository.js.map +1 -0
  91. package/dist/persistence/repositories/project-knowledge-repository.d.ts +65 -0
  92. package/dist/persistence/repositories/project-knowledge-repository.d.ts.map +1 -0
  93. package/dist/persistence/repositories/project-knowledge-repository.js +248 -0
  94. package/dist/persistence/repositories/project-knowledge-repository.js.map +1 -0
  95. package/dist/persistence/repositories/session-index-repository.d.ts +81 -0
  96. package/dist/persistence/repositories/session-index-repository.d.ts.map +1 -0
  97. package/dist/persistence/repositories/session-index-repository.js +220 -0
  98. package/dist/persistence/repositories/session-index-repository.js.map +1 -0
  99. package/dist/persistence/repositories/summary-repository.d.ts +16 -0
  100. package/dist/persistence/repositories/summary-repository.d.ts.map +1 -0
  101. package/dist/persistence/repositories/summary-repository.js +242 -0
  102. package/dist/persistence/repositories/summary-repository.js.map +1 -0
  103. package/dist/persistence/sqlite.d.ts +45 -0
  104. package/dist/persistence/sqlite.d.ts.map +1 -0
  105. package/dist/persistence/sqlite.js +137 -0
  106. package/dist/persistence/sqlite.js.map +1 -0
  107. package/dist/planner/atomic-groups.d.ts +15 -0
  108. package/dist/planner/atomic-groups.d.ts.map +1 -0
  109. package/dist/planner/atomic-groups.js +177 -0
  110. package/dist/planner/atomic-groups.js.map +1 -0
  111. package/dist/planner/context-planner.d.ts +49 -0
  112. package/dist/planner/context-planner.d.ts.map +1 -0
  113. package/dist/planner/context-planner.js +367 -0
  114. package/dist/planner/context-planner.js.map +1 -0
  115. package/dist/privacy/privacy-policy.d.ts +58 -0
  116. package/dist/privacy/privacy-policy.d.ts.map +1 -0
  117. package/dist/privacy/privacy-policy.js +412 -0
  118. package/dist/privacy/privacy-policy.js.map +1 -0
  119. package/dist/project/file-indexer.d.ts +32 -0
  120. package/dist/project/file-indexer.d.ts.map +1 -0
  121. package/dist/project/file-indexer.js +374 -0
  122. package/dist/project/file-indexer.js.map +1 -0
  123. package/dist/project/git-state.d.ts +12 -0
  124. package/dist/project/git-state.d.ts.map +1 -0
  125. package/dist/project/git-state.js +109 -0
  126. package/dist/project/git-state.js.map +1 -0
  127. package/dist/project/project-knowledge.d.ts +63 -0
  128. package/dist/project/project-knowledge.d.ts.map +1 -0
  129. package/dist/project/project-knowledge.js +332 -0
  130. package/dist/project/project-knowledge.js.map +1 -0
  131. package/dist/retrieval/retrieval-engine.d.ts +55 -0
  132. package/dist/retrieval/retrieval-engine.d.ts.map +1 -0
  133. package/dist/retrieval/retrieval-engine.js +290 -0
  134. package/dist/retrieval/retrieval-engine.js.map +1 -0
  135. package/dist/retrieval/task-descriptor.d.ts +17 -0
  136. package/dist/retrieval/task-descriptor.d.ts.map +1 -0
  137. package/dist/retrieval/task-descriptor.js +107 -0
  138. package/dist/retrieval/task-descriptor.js.map +1 -0
  139. package/dist/shared/hash.d.ts +2 -0
  140. package/dist/shared/hash.d.ts.map +1 -0
  141. package/dist/shared/hash.js +5 -0
  142. package/dist/shared/hash.js.map +1 -0
  143. package/dist/shared/logging.d.ts +27 -0
  144. package/dist/shared/logging.d.ts.map +1 -0
  145. package/dist/shared/logging.js +83 -0
  146. package/dist/shared/logging.js.map +1 -0
  147. package/dist/shared/stable-json.d.ts +2 -0
  148. package/dist/shared/stable-json.d.ts.map +1 -0
  149. package/dist/shared/stable-json.js +38 -0
  150. package/dist/shared/stable-json.js.map +1 -0
  151. package/package.json +56 -0
@@ -0,0 +1,429 @@
1
+ import { parseMemoryMutation, parsePinMutation, } from "../../memory/memory-types.js";
2
+ function runTransaction(database, operation) {
3
+ database.exec("BEGIN IMMEDIATE");
4
+ try {
5
+ const result = operation();
6
+ database.exec("COMMIT");
7
+ return result;
8
+ }
9
+ catch (error) {
10
+ if (database.isTransaction)
11
+ database.exec("ROLLBACK");
12
+ throw error;
13
+ }
14
+ }
15
+ function parseJson(value) {
16
+ try {
17
+ return JSON.parse(value);
18
+ }
19
+ catch {
20
+ return undefined;
21
+ }
22
+ }
23
+ function classificationFromMetadata(value) {
24
+ const metadata = parseJson(value);
25
+ if (!metadata || typeof metadata !== "object" || !("classification" in metadata))
26
+ return undefined;
27
+ const classification = metadata.classification;
28
+ return classification === "normal"
29
+ || classification === "internal"
30
+ || classification === "sensitive"
31
+ || classification === "local-only"
32
+ ? classification
33
+ : undefined;
34
+ }
35
+ function entryIdFromKey(entryKey) {
36
+ const separator = entryKey.indexOf(":");
37
+ return separator < 0 ? entryKey : entryKey.slice(separator + 1);
38
+ }
39
+ function identityKey(item) {
40
+ if (!item.key || item.status !== "active")
41
+ return undefined;
42
+ return [item.scope, item.sessionId ?? "", item.projectPath ?? "", item.key].join("\0");
43
+ }
44
+ function mapMemory(row, sourceEntryIds) {
45
+ return {
46
+ id: row.memory_id,
47
+ scope: row.scope,
48
+ ...(row.session_id ? { sessionId: row.session_id } : {}),
49
+ ...(row.project_path ? { projectPath: row.project_path } : {}),
50
+ ...(row.memory_key ? { key: row.memory_key } : {}),
51
+ ...(classificationFromMetadata(row.metadata_json)
52
+ ? { classification: classificationFromMetadata(row.metadata_json) }
53
+ : {}),
54
+ claim: row.claim,
55
+ status: row.status,
56
+ createdAt: row.created_at,
57
+ updatedAt: row.updated_at,
58
+ originSessionId: row.origin_session_id ?? row.session_id ?? "legacy",
59
+ ...(row.superseded_by ? { supersededBy: row.superseded_by } : {}),
60
+ ...(row.status_reason ? { statusReason: row.status_reason } : {}),
61
+ sourceEntryIds,
62
+ };
63
+ }
64
+ function mapPin(row) {
65
+ return {
66
+ id: row.pin_id,
67
+ scope: row.scope,
68
+ ...(row.session_id ? { sessionId: row.session_id } : {}),
69
+ ...(row.project_path ? { projectPath: row.project_path } : {}),
70
+ ...(row.branch_leaf_id ? { branchLeafId: row.branch_leaf_id } : {}),
71
+ ...(classificationFromMetadata(row.metadata_json)
72
+ ? { classification: classificationFromMetadata(row.metadata_json) }
73
+ : {}),
74
+ content: row.content,
75
+ status: row.status,
76
+ createdAt: row.created_at,
77
+ updatedAt: row.updated_at,
78
+ ...(row.superseded_by ? { supersededBy: row.superseded_by } : {}),
79
+ ...(row.status_reason ? { statusReason: row.status_reason } : {}),
80
+ ...(row.source_entry_id ? { sourceEntryId: row.source_entry_id } : {}),
81
+ ...(row.source_file ? { sourceFile: row.source_file } : {}),
82
+ };
83
+ }
84
+ export class MemoryRepository {
85
+ database;
86
+ constructor(database) {
87
+ this.database = database;
88
+ }
89
+ reconcileSession(sessionId, memoryMutations, pinMutations) {
90
+ return runTransaction(this.database, () => {
91
+ this.database.prepare("DELETE FROM memory_mutations WHERE session_id = ?").run(sessionId);
92
+ this.database.prepare("DELETE FROM pin_mutations WHERE session_id = ?").run(sessionId);
93
+ const insertMemoryMutation = this.database.prepare(`
94
+ INSERT INTO memory_mutations(
95
+ mutation_key, mutation_id, session_id, created_at, entry_order, payload_json
96
+ ) VALUES (?, ?, ?, ?, ?, ?)
97
+ `);
98
+ const insertPinMutation = this.database.prepare(`
99
+ INSERT INTO pin_mutations(
100
+ mutation_key, mutation_id, session_id, created_at, entry_order, payload_json
101
+ ) VALUES (?, ?, ?, ?, ?, ?)
102
+ `);
103
+ for (const mutation of memoryMutations) {
104
+ insertMemoryMutation.run(mutation.mutationKey, mutation.mutationId, mutation.sessionId, mutation.createdAt, mutation.entryOrder, JSON.stringify(mutation.payload));
105
+ }
106
+ for (const mutation of pinMutations) {
107
+ insertPinMutation.run(mutation.mutationKey, mutation.mutationId, mutation.sessionId, mutation.createdAt, mutation.entryOrder, JSON.stringify(mutation.payload));
108
+ }
109
+ return this.materialize();
110
+ });
111
+ }
112
+ getMemory(id) {
113
+ const row = this.database.prepare("SELECT * FROM memory_items WHERE memory_id = ?").get(id);
114
+ return row ? mapMemory(row, this.memorySourceIds(id)) : undefined;
115
+ }
116
+ listMemories(options) {
117
+ const status = options.activeOnly === false ? "" : "AND status = 'active'";
118
+ const rows = this.database.prepare(`
119
+ SELECT * FROM memory_items
120
+ WHERE (
121
+ (scope = 'session' AND session_id = ?)
122
+ OR (scope = 'project' AND project_path = ? AND ? = 1)
123
+ ) ${status}
124
+ ORDER BY created_at DESC, memory_id
125
+ `).all(options.sessionId, options.projectPath, options.includeProject ? 1 : 0);
126
+ const sources = this.memorySources(new Set(rows.map((row) => row.memory_id)));
127
+ return rows.map((row) => mapMemory(row, sources.get(row.memory_id) ?? []));
128
+ }
129
+ getPin(id) {
130
+ const row = this.database.prepare("SELECT * FROM pins WHERE pin_id = ?").get(id);
131
+ return row ? mapPin(row) : undefined;
132
+ }
133
+ listPins(options) {
134
+ const status = options.activeOnly === false ? "" : "AND status = 'active'";
135
+ const rows = this.database.prepare(`
136
+ SELECT * FROM pins
137
+ WHERE (
138
+ (scope IN ('session', 'branch') AND session_id = ?)
139
+ OR (scope = 'project' AND project_path = ? AND ? = 1)
140
+ ) ${status}
141
+ ORDER BY created_at ASC, pin_id
142
+ `).all(options.sessionId, options.projectPath, options.includeProject ? 1 : 0);
143
+ return rows.map(mapPin);
144
+ }
145
+ stats(sessionId, projectPath) {
146
+ const memories = this.database.prepare(`
147
+ SELECT
148
+ COALESCE(sum(status = 'active'), 0) AS active,
149
+ COALESCE(sum(status <> 'active'), 0) AS inactive
150
+ FROM memory_items
151
+ WHERE (scope = 'session' AND session_id = ?) OR (scope = 'project' AND project_path = ?)
152
+ `).get(sessionId, projectPath);
153
+ const pins = this.database.prepare(`
154
+ SELECT
155
+ COALESCE(sum(status = 'active'), 0) AS active,
156
+ COALESCE(sum(status <> 'active'), 0) AS inactive
157
+ FROM pins
158
+ WHERE (scope IN ('session', 'branch') AND session_id = ?)
159
+ OR (scope = 'project' AND project_path = ?)
160
+ `).get(sessionId, projectPath);
161
+ return {
162
+ activeMemories: memories.active,
163
+ inactiveMemories: memories.inactive,
164
+ activePins: pins.active,
165
+ inactivePins: pins.inactive,
166
+ };
167
+ }
168
+ materialize() {
169
+ const warnings = [];
170
+ let ignoredMutations = 0;
171
+ const memories = new Map();
172
+ const pins = new Map();
173
+ const memoryRows = this.database.prepare(`
174
+ SELECT mutation_key, mutation_id, session_id, created_at, entry_order, payload_json
175
+ FROM memory_mutations ORDER BY created_at, session_id, entry_order, mutation_id, mutation_key
176
+ `).all();
177
+ const memoryOperations = [];
178
+ for (const row of memoryRows) {
179
+ const mutation = parseMemoryMutation(parseJson(row.payload_json));
180
+ if (!mutation || mutation.mutationId !== row.mutation_id) {
181
+ warnings.push(`Ignored malformed memory mutation ${row.mutation_id}`);
182
+ ignoredMutations++;
183
+ continue;
184
+ }
185
+ memoryOperations.push({ mutation, row });
186
+ this.applyMemoryMutation(memories, mutation, row, warnings, false);
187
+ }
188
+ for (const { mutation, row } of memoryOperations) {
189
+ this.applyMemoryMutation(memories, mutation, row, warnings, true);
190
+ }
191
+ const pinRows = this.database.prepare(`
192
+ SELECT mutation_key, mutation_id, session_id, created_at, entry_order, payload_json
193
+ FROM pin_mutations ORDER BY created_at, session_id, entry_order, mutation_id, mutation_key
194
+ `).all();
195
+ const pinOperations = [];
196
+ for (const row of pinRows) {
197
+ const mutation = parsePinMutation(parseJson(row.payload_json));
198
+ if (!mutation || mutation.mutationId !== row.mutation_id) {
199
+ warnings.push(`Ignored malformed pin mutation ${row.mutation_id}`);
200
+ ignoredMutations++;
201
+ continue;
202
+ }
203
+ pinOperations.push({ mutation, row });
204
+ this.applyPinMutation(pins, mutation, row, warnings, false);
205
+ }
206
+ for (const { mutation, row } of pinOperations) {
207
+ this.applyPinMutation(pins, mutation, row, warnings, true);
208
+ }
209
+ const activeKeys = new Map();
210
+ for (const memory of memories.values()) {
211
+ const key = identityKey(memory.item);
212
+ if (!key)
213
+ continue;
214
+ const previousId = activeKeys.get(key);
215
+ if (!previousId) {
216
+ activeKeys.set(key, memory.item.id);
217
+ continue;
218
+ }
219
+ memory.item.status = "invalid";
220
+ memory.item.statusReason = `Conflicts with active memory ${previousId}`;
221
+ memory.item.updatedAt = Math.max(memory.item.updatedAt, memory.item.createdAt);
222
+ warnings.push(`Memory ${memory.item.id} invalidated because key conflicts with ${previousId}`);
223
+ }
224
+ this.database.exec(`
225
+ DELETE FROM memory_fts;
226
+ DELETE FROM memory_sources;
227
+ UPDATE memory_items SET superseded_by = NULL;
228
+ DELETE FROM memory_items;
229
+ UPDATE pins SET superseded_by = NULL;
230
+ DELETE FROM pins;
231
+ `);
232
+ const availableEntryKeys = new Set(this.database.prepare("SELECT entry_key FROM entries").all()
233
+ .map((row) => row.entry_key));
234
+ const insertMemory = this.database.prepare(`
235
+ INSERT INTO memory_items(
236
+ memory_id, scope, session_id, project_path, claim, status, created_at,
237
+ superseded_by, memory_key, origin_session_id, updated_at, status_reason, metadata_json
238
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
239
+ `);
240
+ const insertMemorySource = this.database.prepare("INSERT OR IGNORE INTO memory_sources(memory_id, entry_key) VALUES (?, ?)");
241
+ const insertMemoryFts = this.database.prepare("INSERT INTO memory_fts(claim, memory_id) VALUES (?, ?)");
242
+ for (const { item, sourceKeys } of memories.values()) {
243
+ insertMemory.run(item.id, item.scope, item.sessionId ?? null, item.projectPath ?? null, item.claim, item.status, item.createdAt, null, item.key ?? null, item.originSessionId, item.updatedAt, item.statusReason ?? null, JSON.stringify({ ...(item.classification ? { classification: item.classification } : {}) }));
244
+ for (const sourceKey of sourceKeys) {
245
+ if (availableEntryKeys.has(sourceKey))
246
+ insertMemorySource.run(item.id, sourceKey);
247
+ }
248
+ insertMemoryFts.run(item.claim, item.id);
249
+ }
250
+ const updateSupersededMemory = this.database.prepare("UPDATE memory_items SET superseded_by = ? WHERE memory_id = ?");
251
+ for (const { item } of memories.values()) {
252
+ if (item.supersededBy)
253
+ updateSupersededMemory.run(item.supersededBy, item.id);
254
+ }
255
+ const insertPin = this.database.prepare(`
256
+ INSERT INTO pins(
257
+ pin_id, scope, session_id, project_path, content, source_entry_key,
258
+ source_entry_id, source_file, status, created_at, branch_leaf_id,
259
+ superseded_by, updated_at, status_reason, metadata_json
260
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
261
+ `);
262
+ for (const item of pins.values()) {
263
+ const sourceEntryId = item.sourceEntryId ?? item.id;
264
+ const sourceEntryKey = item.sessionId ? `${item.sessionId}:${sourceEntryId}` : null;
265
+ const sourceExists = sourceEntryKey ? availableEntryKeys.has(sourceEntryKey) : false;
266
+ insertPin.run(item.id, item.scope, item.sessionId ?? null, item.projectPath ?? null, item.content, sourceExists ? sourceEntryKey : null, sourceExists ? sourceEntryId : null, item.sourceFile ?? null, item.status, item.createdAt, item.branchLeafId ?? null, null, item.updatedAt, item.statusReason ?? null, JSON.stringify({ ...(item.classification ? { classification: item.classification } : {}) }));
267
+ }
268
+ const updateSupersededPin = this.database.prepare("UPDATE pins SET superseded_by = ? WHERE pin_id = ?");
269
+ for (const item of pins.values()) {
270
+ if (item.supersededBy)
271
+ updateSupersededPin.run(item.supersededBy, item.id);
272
+ }
273
+ return {
274
+ memories: memories.size,
275
+ pins: pins.size,
276
+ memoryMutations: memoryRows.length,
277
+ pinMutations: pinRows.length,
278
+ ignoredMutations,
279
+ warnings,
280
+ };
281
+ }
282
+ applyMemoryMutation(memories, mutation, row, warnings, lifecycleOnly) {
283
+ if (lifecycleOnly) {
284
+ if (mutation.operation === "status") {
285
+ const existing = memories.get(mutation.memoryId);
286
+ if (!existing) {
287
+ warnings.push(`Memory status mutation ${mutation.mutationId} references missing ${mutation.memoryId}`);
288
+ return;
289
+ }
290
+ existing.item.status = mutation.status;
291
+ existing.item.updatedAt = mutation.createdAt;
292
+ existing.item.statusReason = mutation.reason;
293
+ existing.item.supersededBy = undefined;
294
+ return;
295
+ }
296
+ if (mutation.operation === "supersede") {
297
+ const previous = memories.get(mutation.previousId);
298
+ if (!previous) {
299
+ warnings.push(`Memory supersession ${mutation.mutationId} references missing ${mutation.previousId}`);
300
+ return;
301
+ }
302
+ previous.item.status = "superseded";
303
+ previous.item.supersededBy = mutation.item.id;
304
+ previous.item.updatedAt = mutation.createdAt;
305
+ previous.item.statusReason = `Superseded by ${mutation.item.id}`;
306
+ }
307
+ return;
308
+ }
309
+ if (mutation.operation === "status")
310
+ return;
311
+ const value = mutation.item;
312
+ const existing = memories.get(value.id);
313
+ if (existing) {
314
+ if (existing.item.claim !== value.claim || existing.item.scope !== value.scope) {
315
+ warnings.push(`Memory ID collision ignored for ${value.id}`);
316
+ }
317
+ return;
318
+ }
319
+ if (value.scope === "project" && !value.projectPath) {
320
+ warnings.push(`Project memory ${value.id} has no project path`);
321
+ return;
322
+ }
323
+ const sourceKeys = new Set([
324
+ row.mutation_key,
325
+ ...value.sourceEntryIds.map((entryId) => `${row.session_id}:${entryId}`),
326
+ ]);
327
+ const item = {
328
+ id: value.id,
329
+ scope: value.scope,
330
+ ...(value.scope === "session" ? { sessionId: row.session_id } : {}),
331
+ ...(value.projectPath ? { projectPath: value.projectPath } : {}),
332
+ ...(value.key ? { key: value.key } : {}),
333
+ ...(value.classification ? { classification: value.classification } : {}),
334
+ claim: value.claim,
335
+ status: "active",
336
+ createdAt: value.createdAt,
337
+ updatedAt: mutation.createdAt,
338
+ originSessionId: row.session_id,
339
+ sourceEntryIds: [...new Set([entryIdFromKey(row.mutation_key), ...value.sourceEntryIds])],
340
+ };
341
+ memories.set(item.id, { item, sourceKeys });
342
+ }
343
+ applyPinMutation(pins, mutation, row, warnings, lifecycleOnly) {
344
+ if (lifecycleOnly) {
345
+ if (mutation.operation === "status") {
346
+ const existing = pins.get(mutation.pinId);
347
+ if (!existing) {
348
+ warnings.push(`Pin status mutation ${mutation.mutationId} references missing ${mutation.pinId}`);
349
+ return;
350
+ }
351
+ existing.status = mutation.status;
352
+ existing.updatedAt = mutation.createdAt;
353
+ existing.statusReason = mutation.reason;
354
+ existing.supersededBy = undefined;
355
+ return;
356
+ }
357
+ if (mutation.operation === "supersede") {
358
+ const previous = pins.get(mutation.previousId);
359
+ if (!previous) {
360
+ warnings.push(`Pin supersession ${mutation.mutationId} references missing ${mutation.previousId}`);
361
+ return;
362
+ }
363
+ previous.status = "superseded";
364
+ previous.supersededBy = mutation.item.id;
365
+ previous.updatedAt = mutation.createdAt;
366
+ previous.statusReason = `Superseded by ${mutation.item.id}`;
367
+ }
368
+ return;
369
+ }
370
+ if (mutation.operation === "status")
371
+ return;
372
+ const value = mutation.item;
373
+ const existing = pins.get(value.id);
374
+ if (existing) {
375
+ if (existing.content !== value.content || existing.scope !== value.scope) {
376
+ warnings.push(`Pin ID collision ignored for ${value.id}`);
377
+ }
378
+ return;
379
+ }
380
+ if (value.scope === "project" && !value.projectPath) {
381
+ warnings.push(`Project pin ${value.id} has no project path`);
382
+ return;
383
+ }
384
+ if (value.scope === "branch" && !value.branchLeafId) {
385
+ warnings.push(`Branch pin ${value.id} has no branch leaf`);
386
+ return;
387
+ }
388
+ const item = {
389
+ id: value.id,
390
+ scope: value.scope,
391
+ sessionId: row.session_id,
392
+ ...(value.projectPath ? { projectPath: value.projectPath } : {}),
393
+ ...(value.branchLeafId ? { branchLeafId: value.branchLeafId } : {}),
394
+ ...(value.classification ? { classification: value.classification } : {}),
395
+ content: value.content,
396
+ status: "active",
397
+ createdAt: value.createdAt,
398
+ updatedAt: mutation.createdAt,
399
+ ...(value.sourceEntryId
400
+ ? { sourceEntryId: value.sourceEntryId }
401
+ : { sourceEntryId: entryIdFromKey(row.mutation_key) }),
402
+ ...(value.sourceFile ? { sourceFile: value.sourceFile } : {}),
403
+ };
404
+ pins.set(item.id, item);
405
+ }
406
+ memorySourceIds(memoryId) {
407
+ return this.memorySources(new Set([memoryId])).get(memoryId) ?? [];
408
+ }
409
+ memorySources(memoryIds) {
410
+ if (memoryIds.size === 0)
411
+ return new Map();
412
+ const rows = this.database.prepare(`
413
+ SELECT source.memory_id, entry.entry_id
414
+ FROM memory_sources AS source
415
+ JOIN entries AS entry ON entry.entry_key = source.entry_key
416
+ ORDER BY entry.created_at, entry.entry_id
417
+ `).all();
418
+ const result = new Map();
419
+ for (const row of rows) {
420
+ if (!memoryIds.has(row.memory_id))
421
+ continue;
422
+ const values = result.get(row.memory_id) ?? [];
423
+ values.push(row.entry_id);
424
+ result.set(row.memory_id, values);
425
+ }
426
+ return result;
427
+ }
428
+ }
429
+ //# sourceMappingURL=memory-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-repository.js","sourceRoot":"","sources":["../../../src/persistence/repositories/memory-repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type { DatabaseSync } from "node:sqlite";
2
+ export interface StoredProjectState {
3
+ projectPath: string;
4
+ gitRoot?: string;
5
+ gitBranch?: string;
6
+ gitHead?: string;
7
+ dirty: boolean;
8
+ changedFiles: string[];
9
+ indexedAt: number;
10
+ }
11
+ export interface StoredProjectFile {
12
+ projectPath: string;
13
+ filePath: string;
14
+ contentHash: string;
15
+ sizeBytes: number;
16
+ mtimeMs: number;
17
+ language?: string;
18
+ gitCommit?: string;
19
+ modified: boolean;
20
+ tracked: boolean;
21
+ status: "current" | "deleted";
22
+ indexedAt: number;
23
+ }
24
+ export interface StoredProjectSnippet {
25
+ snippetId: string;
26
+ projectPath: string;
27
+ filePath: string;
28
+ fileHash: string;
29
+ startLine: number;
30
+ endLine: number;
31
+ content: string;
32
+ symbols: string[];
33
+ tokenEstimate: number;
34
+ stale: boolean;
35
+ indexedAt: number;
36
+ }
37
+ export interface ProjectSnippetSearchResult extends StoredProjectSnippet {
38
+ language?: string;
39
+ gitCommit?: string;
40
+ modified: boolean;
41
+ tracked: boolean;
42
+ ftsRank?: number;
43
+ }
44
+ export interface ProjectIndexStats {
45
+ files: number;
46
+ deletedFiles: number;
47
+ currentSnippets: number;
48
+ staleSnippets: number;
49
+ indexedTokens: number;
50
+ }
51
+ export declare class ProjectKnowledgeRepository {
52
+ private readonly database;
53
+ constructor(database: DatabaseSync);
54
+ getState(projectPath: string): StoredProjectState | undefined;
55
+ saveState(state: StoredProjectState): void;
56
+ listFiles(projectPath: string): StoredProjectFile[];
57
+ getFile(projectPath: string, filePath: string): StoredProjectFile | undefined;
58
+ replaceFile(file: StoredProjectFile, snippets: readonly StoredProjectSnippet[]): void;
59
+ markDeleted(projectPath: string, filePaths: readonly string[], indexedAt: number): void;
60
+ searchExact(projectPath: string, term: string, limit: number): ProjectSnippetSearchResult[];
61
+ searchFts(projectPath: string, query: string, limit: number): ProjectSnippetSearchResult[];
62
+ getStats(projectPath: string): ProjectIndexStats;
63
+ clearProject(projectPath: string): void;
64
+ }
65
+ //# sourceMappingURL=project-knowledge-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-knowledge-repository.d.ts","sourceRoot":"","sources":["../../../src/persistence/repositories/project-knowledge-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA2B,SAAQ,oBAAoB;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAkHD,qBAAa,0BAA0B;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAEnD,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAQ7D,SAAS,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAuB1C,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,EAAE;IASnD,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAS7E,WAAW,CAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,oBAAoB,EAAE,GAAG,IAAI;IAoFrF,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAuBvF,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,0BAA0B,EAAE;IAU3F,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,0BAA0B,EAAE;IAsB1F,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB;IAwBhD,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;CAWxC"}