@lore-co/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.
package/dist/engine.js ADDED
@@ -0,0 +1,345 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { AgentInteractionSchema, AgentTaskSchema, CandidateMemorySchema, CorrectMemoryDtoSchema, CreateMemoryDtoSchema, ForgetMemoryDtoSchema, GetMemoryDtoSchema, ListMemoriesDtoSchema, MemorySchema, normalizeInteractionScope, } from "./schemas.js";
3
+ import { redactSensitiveText } from "./redaction.js";
4
+ function normalizedContent(content) {
5
+ return content.trim().replace(/\s+/gu, " ");
6
+ }
7
+ function normalizedComparison(content) {
8
+ return normalizedContent(content).normalize("NFKC").toLocaleLowerCase();
9
+ }
10
+ const RECONCILIATION_STOP_WORDS = new Set([
11
+ "about",
12
+ "always",
13
+ "from",
14
+ "instead",
15
+ "must",
16
+ "never",
17
+ "should",
18
+ "that",
19
+ "the",
20
+ "this",
21
+ "use",
22
+ "with",
23
+ ]);
24
+ function reconciliationTokens(content) {
25
+ return [
26
+ ...new Set((content.normalize("NFKC").match(/[\p{L}\p{N}_-]+/gu) ?? [])
27
+ .map((token) => token.toLocaleLowerCase())
28
+ .filter((token) => token.length >= 3 && !RECONCILIATION_STOP_WORDS.has(token))),
29
+ ];
30
+ }
31
+ function tokenOverlap(left, right) {
32
+ if (left.length === 0 || right.length === 0) {
33
+ return 0;
34
+ }
35
+ const rightSet = new Set(right);
36
+ return left.filter((token) => rightSet.has(token)).length / left.length;
37
+ }
38
+ export function createMemoryFingerprint(input) {
39
+ const canonical = JSON.stringify([
40
+ normalizedContent(input.content).normalize("NFKC"),
41
+ input.category,
42
+ input.scope.organization ?? null,
43
+ input.scope.project ?? null,
44
+ input.scope.repo ?? null,
45
+ input.scope.path ?? null,
46
+ input.scope.component ?? null,
47
+ input.supersedesMemoryId ?? null,
48
+ ]);
49
+ return createHash("sha256").update(canonical).digest("hex");
50
+ }
51
+ function createMemory(input) {
52
+ const timestamp = input.timestamp ?? new Date().toISOString();
53
+ const supersedesMemoryId = input.supersedesMemoryId ?? null;
54
+ return MemorySchema.parse({
55
+ id: randomUUID(),
56
+ ...(input.workspaceId === undefined
57
+ ? {}
58
+ : { workspaceId: input.workspaceId }),
59
+ content: normalizedContent(input.content),
60
+ scope: input.scope,
61
+ category: input.category,
62
+ status: "active",
63
+ source: input.source,
64
+ ...(input.confidence === undefined ? {} : { confidence: input.confidence }),
65
+ ...(input.confirmation === undefined
66
+ ? {}
67
+ : { confirmation: input.confirmation }),
68
+ ...(input.reconciliationKey === undefined
69
+ ? {}
70
+ : { reconciliationKey: input.reconciliationKey }),
71
+ fingerprint: createMemoryFingerprint({
72
+ content: input.content,
73
+ scope: input.scope,
74
+ category: input.category,
75
+ supersedesMemoryId,
76
+ }),
77
+ supersedesMemoryId,
78
+ createdAt: timestamp,
79
+ updatedAt: timestamp,
80
+ deletedAt: null,
81
+ });
82
+ }
83
+ async function findEquivalentMemory(repository, scope, candidate, workspaceId) {
84
+ const content = normalizedComparison(candidate.content);
85
+ const matches = await repository.findActiveScopeCandidates(scope, {
86
+ ...(workspaceId === undefined ? {} : { workspaceId }),
87
+ keywords: reconciliationTokens(candidate.content),
88
+ limit: 100,
89
+ });
90
+ return matches.find((memory) => normalizedComparison(memory.content) === content);
91
+ }
92
+ async function findReconciliationTarget(repository, scope, candidate, workspaceId) {
93
+ if (candidate.category !== "correction" ||
94
+ candidate.confirmation !== "explicit" ||
95
+ candidate.reconciliationKey === undefined) {
96
+ return undefined;
97
+ }
98
+ const keyTokens = reconciliationTokens(candidate.reconciliationKey);
99
+ if (keyTokens.length === 0) {
100
+ return undefined;
101
+ }
102
+ const previousTokens = candidate.supersedesContent === undefined
103
+ ? []
104
+ : reconciliationTokens(candidate.supersedesContent);
105
+ const matches = await repository.findActiveScopeCandidates(scope, {
106
+ ...(workspaceId === undefined ? {} : { workspaceId }),
107
+ keywords: [...new Set([...keyTokens, ...previousTokens])],
108
+ limit: 100,
109
+ });
110
+ const replacement = normalizedComparison(candidate.content);
111
+ return matches
112
+ .filter((memory) => normalizedComparison(memory.content) !== replacement)
113
+ .map((memory) => {
114
+ const memoryTokens = reconciliationTokens(memory.content);
115
+ const keyScore = tokenOverlap(keyTokens, memoryTokens);
116
+ const previousScore = tokenOverlap(previousTokens, memoryTokens);
117
+ return {
118
+ memory,
119
+ score: keyScore * 2 + previousScore,
120
+ };
121
+ })
122
+ .filter(({ score }) => score >= 1)
123
+ .sort((left, right) => right.score - left.score ||
124
+ right.memory.updatedAt.localeCompare(left.memory.updatedAt))[0]?.memory;
125
+ }
126
+ function redactInteraction(interaction) {
127
+ const redactedMessageIds = new Set();
128
+ const messages = interaction.messages.map((message, index) => {
129
+ const result = redactSensitiveText(message.content);
130
+ if (result.redacted) {
131
+ redactedMessageIds.add(message.id ?? `index:${index}`);
132
+ }
133
+ return { ...message, content: result.text };
134
+ });
135
+ return {
136
+ interaction: AgentInteractionSchema.parse({ ...interaction, messages }),
137
+ redactedMessageIds,
138
+ };
139
+ }
140
+ export class SharedMemoryEngine {
141
+ #repository;
142
+ #extractor;
143
+ #retriever;
144
+ #minimumConfidence;
145
+ constructor(dependenciesOrRepository, extractor, retriever) {
146
+ if ("repository" in dependenciesOrRepository &&
147
+ "extractor" in dependenciesOrRepository &&
148
+ "retriever" in dependenciesOrRepository) {
149
+ this.#repository = dependenciesOrRepository.repository;
150
+ this.#extractor = dependenciesOrRepository.extractor;
151
+ this.#retriever = dependenciesOrRepository.retriever;
152
+ this.#minimumConfidence = Math.min(Math.max(dependenciesOrRepository.minimumConfidence ?? 0.8, 0), 1);
153
+ return;
154
+ }
155
+ if (extractor === undefined || retriever === undefined) {
156
+ throw new Error("SharedMemoryEngine requires a repository, extractor, and retriever");
157
+ }
158
+ this.#repository = dependenciesOrRepository;
159
+ this.#extractor = extractor;
160
+ this.#retriever = retriever;
161
+ this.#minimumConfidence = 0.8;
162
+ }
163
+ async observe(interactionInput) {
164
+ const parsedInteraction = AgentInteractionSchema.parse(interactionInput);
165
+ const { interaction, redactedMessageIds, } = redactInteraction(parsedInteraction);
166
+ const scope = normalizeInteractionScope(interaction);
167
+ if (Object.keys(scope).length === 0) {
168
+ throw new Error("Observed learnings require an organization, project, repository, path, or component scope");
169
+ }
170
+ const candidates = (await this.#extractor.extract(interaction))
171
+ .map((candidate) => {
172
+ const content = redactSensitiveText(candidate.content);
173
+ const rawText = candidate.rawText === undefined
174
+ ? undefined
175
+ : redactSensitiveText(candidate.rawText);
176
+ const supersedesContent = candidate.supersedesContent === undefined
177
+ ? undefined
178
+ : redactSensitiveText(candidate.supersedesContent);
179
+ return CandidateMemorySchema.parse({
180
+ ...candidate,
181
+ content: content.text,
182
+ ...(rawText === undefined ? {} : { rawText: rawText.text }),
183
+ ...(supersedesContent === undefined
184
+ ? {}
185
+ : { supersedesContent: supersedesContent.text }),
186
+ });
187
+ })
188
+ .filter((candidate) => candidate.confidence >= this.#minimumConfidence);
189
+ const stored = [];
190
+ let created = 0;
191
+ let reconciled = 0;
192
+ let superseded = 0;
193
+ for (const candidate of candidates) {
194
+ const triggeringMessage = (candidate.triggeringMessageId === undefined
195
+ ? undefined
196
+ : interaction.messages.find((message) => message.id === candidate.triggeringMessageId)) ??
197
+ [...interaction.messages]
198
+ .reverse()
199
+ .find((message) => message.role === "user");
200
+ const rawText = candidate.rawText ?? triggeringMessage?.content;
201
+ const triggeringMessageIndex = triggeringMessage === undefined
202
+ ? -1
203
+ : interaction.messages.indexOf(triggeringMessage);
204
+ const sourceWasRedacted = triggeringMessage !== undefined &&
205
+ redactedMessageIds.has(triggeringMessage.id ?? `index:${triggeringMessageIndex}`);
206
+ const source = {
207
+ agent: interaction.agent,
208
+ ...(interaction.sessionId === undefined
209
+ ? {}
210
+ : { sessionId: interaction.sessionId }),
211
+ ...(triggeringMessage?.id === undefined
212
+ ? {}
213
+ : {
214
+ messageId: triggeringMessage.id,
215
+ }),
216
+ ...(rawText === undefined ? {} : { rawText }),
217
+ ...(interaction.workspaceId === undefined
218
+ ? {}
219
+ : { workspaceId: interaction.workspaceId }),
220
+ ...(interaction.eventId === undefined
221
+ ? {}
222
+ : { eventId: interaction.eventId }),
223
+ ...(sourceWasRedacted ? { redacted: true } : {}),
224
+ };
225
+ const equivalent = await findEquivalentMemory(this.#repository, scope, candidate, interaction.workspaceId);
226
+ if (equivalent !== undefined) {
227
+ stored.push(equivalent);
228
+ continue;
229
+ }
230
+ const inferredTarget = candidate.supersedesMemoryId === undefined
231
+ ? await findReconciliationTarget(this.#repository, scope, candidate, interaction.workspaceId)
232
+ : undefined;
233
+ const supersedesMemoryId = candidate.supersedesMemoryId ?? inferredTarget?.id;
234
+ const memory = createMemory({
235
+ ...(interaction.workspaceId === undefined
236
+ ? {}
237
+ : { workspaceId: interaction.workspaceId }),
238
+ content: candidate.content,
239
+ scope,
240
+ category: candidate.category,
241
+ source,
242
+ confidence: candidate.confidence,
243
+ confirmation: candidate.confirmation ?? "unconfirmed",
244
+ ...(candidate.reconciliationKey === undefined
245
+ ? {}
246
+ : { reconciliationKey: candidate.reconciliationKey }),
247
+ ...(supersedesMemoryId === undefined ? {} : { supersedesMemoryId }),
248
+ });
249
+ if (supersedesMemoryId === undefined) {
250
+ const result = await this.#repository.insert(memory);
251
+ stored.push(result.memory);
252
+ if (result.inserted) {
253
+ created += 1;
254
+ }
255
+ }
256
+ else {
257
+ const result = await this.#repository.supersede(supersedesMemoryId, memory);
258
+ stored.push(result.memory);
259
+ if (result.memory.id === memory.id) {
260
+ created += 1;
261
+ superseded += 1;
262
+ if (inferredTarget !== undefined) {
263
+ reconciled += 1;
264
+ }
265
+ }
266
+ }
267
+ }
268
+ return {
269
+ memories: stored,
270
+ created,
271
+ duplicates: stored.length - created,
272
+ reconciled,
273
+ superseded,
274
+ };
275
+ }
276
+ async getContext(taskInput, context) {
277
+ const task = AgentTaskSchema.parse(taskInput);
278
+ return { memories: await this.#retriever.retrieve(task, context) };
279
+ }
280
+ async remember(input) {
281
+ const value = CreateMemoryDtoSchema.parse(input);
282
+ const content = redactSensitiveText(value.content);
283
+ const rawText = value.source.rawText === undefined || value.source.rawText === null
284
+ ? undefined
285
+ : redactSensitiveText(value.source.rawText);
286
+ const source = {
287
+ ...value.source,
288
+ ...(rawText === undefined ? {} : { rawText: rawText.text }),
289
+ ...((content.redacted || rawText?.redacted) === true
290
+ ? { redacted: true }
291
+ : {}),
292
+ };
293
+ return this.#repository.insert(createMemory({
294
+ ...(source.workspaceId === undefined
295
+ ? {}
296
+ : { workspaceId: source.workspaceId }),
297
+ content: content.text,
298
+ scope: value.scope,
299
+ category: value.category ?? "other",
300
+ source,
301
+ confidence: 1,
302
+ confirmation: "explicit",
303
+ }));
304
+ }
305
+ async correct(input) {
306
+ const value = CorrectMemoryDtoSchema.parse(input);
307
+ const current = await this.#repository.get(value.memoryId);
308
+ if (current === null) {
309
+ throw new Error(`Memory not found: ${value.memoryId}`);
310
+ }
311
+ if (current.status !== "active") {
312
+ throw new Error(`Only active memories can be corrected: ${value.memoryId} is ${current.status}`);
313
+ }
314
+ const replacement = createMemory({
315
+ ...(current.workspaceId === undefined
316
+ ? {}
317
+ : { workspaceId: current.workspaceId }),
318
+ content: redactSensitiveText(value.content).text,
319
+ scope: value.scope ?? current.scope,
320
+ category: value.category ?? "correction",
321
+ source: value.source ?? current.source,
322
+ confidence: 1,
323
+ confirmation: "explicit",
324
+ supersedesMemoryId: current.id,
325
+ });
326
+ return this.#repository.supersede(current.id, replacement);
327
+ }
328
+ async forget(input) {
329
+ const value = ForgetMemoryDtoSchema.parse(typeof input === "string" ? { id: input } : input);
330
+ const memory = await this.#repository.softDelete(value.id);
331
+ if (memory === null) {
332
+ throw new Error(`Memory not found: ${value.id}`);
333
+ }
334
+ return { memory };
335
+ }
336
+ async listMemories(input = {}) {
337
+ return this.#repository.list(ListMemoriesDtoSchema.parse(input));
338
+ }
339
+ async getMemory(input) {
340
+ const value = GetMemoryDtoSchema.parse(typeof input === "string" ? { id: input } : input);
341
+ return { memory: await this.#repository.get(value.id) };
342
+ }
343
+ }
344
+ export { SharedMemoryEngine as LoreEngine };
345
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type InsertMemoryResult, type ListMemoriesDto, type ListMemoriesResponse, type Memory, type MemoryScope, type MemoryUpdate } from "./schemas.js";
2
+ import type { FindActiveCandidatesOptions, MemoryRepository, SupersedeMemoryResult } from "./ports.js";
3
+ export declare function memoryScopeAppliesTo(memoryScope: MemoryScope, taskScope: MemoryScope): boolean;
4
+ export declare class InMemoryMemoryRepository implements MemoryRepository {
5
+ #private;
6
+ constructor(initialMemories?: readonly Memory[]);
7
+ insert(memoryInput: Memory): Promise<InsertMemoryResult>;
8
+ get(id: string): Promise<Memory | null>;
9
+ list(input?: ListMemoriesDto): Promise<ListMemoriesResponse>;
10
+ update(id: string, updateInput: MemoryUpdate): Promise<Memory | null>;
11
+ softDelete(id: string, deletedAt?: string): Promise<Memory | null>;
12
+ findActiveScopeCandidates(scope: MemoryScope, options?: FindActiveCandidatesOptions): Promise<Memory[]>;
13
+ supersede(memoryId: string, replacementInput: Memory): Promise<SupersedeMemoryResult>;
14
+ }
15
+ //# sourceMappingURL=in-memory-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-repository.d.ts","sourceRoot":"","sources":["../src/in-memory-repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,2BAA2B,EAC3B,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAcpB,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,WAAW,GACrB,OAAO,CAQT;AAMD,qBAAa,wBAAyB,YAAW,gBAAgB;;gBAInD,eAAe,GAAE,SAAS,MAAM,EAAO;IAkB7C,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoBxD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKvC,IAAI,CAAC,KAAK,GAAE,eAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA4ChE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAyDrE,UAAU,CACd,EAAE,EAAE,MAAM,EACV,SAAS,SAA2B,GACnC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgBnB,yBAAyB,CAC7B,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,MAAM,EAAE,CAAC;IAkDd,SAAS,CACb,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,qBAAqB,CAAC;CAgElC"}
@@ -0,0 +1,238 @@
1
+ import { ListMemoriesDtoSchema, MemorySchema, MemoryUpdateSchema, } from "./schemas.js";
2
+ import { createMemoryFingerprint } from "./engine.js";
3
+ function copyMemory(memory) {
4
+ return structuredClone(memory);
5
+ }
6
+ function scopeValueMatches(memoryValue, taskValue) {
7
+ return memoryValue === undefined || memoryValue === taskValue;
8
+ }
9
+ export function memoryScopeAppliesTo(memoryScope, taskScope) {
10
+ return (scopeValueMatches(memoryScope.organization, taskScope.organization) &&
11
+ scopeValueMatches(memoryScope.project, taskScope.project) &&
12
+ scopeValueMatches(memoryScope.repo, taskScope.repo) &&
13
+ scopeValueMatches(memoryScope.path, taskScope.path) &&
14
+ scopeValueMatches(memoryScope.component, taskScope.component));
15
+ }
16
+ function toArray(value) {
17
+ return value === undefined ? undefined : Array.isArray(value) ? value : [value];
18
+ }
19
+ export class InMemoryMemoryRepository {
20
+ #memories = new Map();
21
+ #fingerprints = new Map();
22
+ constructor(initialMemories = []) {
23
+ for (const initialMemory of initialMemories) {
24
+ const memory = MemorySchema.parse(initialMemory);
25
+ if (memory.status === "active" &&
26
+ this.#fingerprints.has(memory.fingerprint)) {
27
+ throw new Error(`Duplicate initial memory fingerprint: ${memory.fingerprint}`);
28
+ }
29
+ this.#memories.set(memory.id, copyMemory(memory));
30
+ if (memory.status === "active") {
31
+ this.#fingerprints.set(memory.fingerprint, memory.id);
32
+ }
33
+ }
34
+ }
35
+ async insert(memoryInput) {
36
+ const memory = MemorySchema.parse(memoryInput);
37
+ const existingId = this.#fingerprints.get(memory.fingerprint);
38
+ if (existingId !== undefined) {
39
+ const existing = this.#memories.get(existingId);
40
+ if (existing === undefined) {
41
+ throw new Error("In-memory fingerprint index is inconsistent");
42
+ }
43
+ return { memory: copyMemory(existing), inserted: false };
44
+ }
45
+ if (this.#memories.has(memory.id)) {
46
+ throw new Error(`Memory ID already exists: ${memory.id}`);
47
+ }
48
+ this.#memories.set(memory.id, copyMemory(memory));
49
+ this.#fingerprints.set(memory.fingerprint, memory.id);
50
+ return { memory: copyMemory(memory), inserted: true };
51
+ }
52
+ async get(id) {
53
+ const memory = this.#memories.get(id);
54
+ return memory === undefined ? null : copyMemory(memory);
55
+ }
56
+ async list(input = {}) {
57
+ const filters = ListMemoriesDtoSchema.parse(input);
58
+ const categories = toArray(filters.category);
59
+ const statuses = toArray(filters.status);
60
+ const query = filters.query?.toLocaleLowerCase();
61
+ const offset = filters.offset ?? 0;
62
+ const limit = filters.limit ?? 50;
63
+ const matching = [...this.#memories.values()]
64
+ .filter((memory) => {
65
+ if (filters.scope !== undefined &&
66
+ !memoryScopeAppliesTo(filters.scope, memory.scope)) {
67
+ return false;
68
+ }
69
+ if (categories !== undefined &&
70
+ !categories.includes(memory.category)) {
71
+ return false;
72
+ }
73
+ if (statuses !== undefined && !statuses.includes(memory.status)) {
74
+ return false;
75
+ }
76
+ return (query === undefined ||
77
+ memory.content.toLocaleLowerCase().includes(query));
78
+ })
79
+ .sort((left, right) => right.createdAt.localeCompare(left.createdAt) ||
80
+ left.id.localeCompare(right.id));
81
+ return {
82
+ memories: matching.slice(offset, offset + limit).map(copyMemory),
83
+ total: matching.length,
84
+ limit,
85
+ offset,
86
+ };
87
+ }
88
+ async update(id, updateInput) {
89
+ const current = this.#memories.get(id);
90
+ if (current === undefined) {
91
+ return null;
92
+ }
93
+ const update = MemoryUpdateSchema.parse(updateInput);
94
+ const content = update.content ?? current.content;
95
+ const scope = update.scope ?? current.scope;
96
+ const category = update.category ?? current.category;
97
+ const supersedesMemoryId = update.supersedesMemoryId === undefined
98
+ ? current.supersedesMemoryId
99
+ : update.supersedesMemoryId;
100
+ const shouldRecalculateFingerprint = update.fingerprint === undefined &&
101
+ (update.content !== undefined ||
102
+ update.scope !== undefined ||
103
+ update.category !== undefined ||
104
+ update.supersedesMemoryId !== undefined);
105
+ const fingerprint = shouldRecalculateFingerprint
106
+ ? createMemoryFingerprint({
107
+ content,
108
+ scope,
109
+ category,
110
+ supersedesMemoryId,
111
+ })
112
+ : (update.fingerprint ?? current.fingerprint);
113
+ const next = MemorySchema.parse({
114
+ ...current,
115
+ ...update,
116
+ id,
117
+ content,
118
+ scope,
119
+ category,
120
+ supersedesMemoryId,
121
+ fingerprint,
122
+ updatedAt: update.updatedAt ?? new Date().toISOString(),
123
+ });
124
+ if (next.status === "active") {
125
+ const existingId = this.#fingerprints.get(next.fingerprint);
126
+ if (existingId !== undefined && existingId !== id) {
127
+ throw new Error(`Memory fingerprint already exists: ${next.fingerprint}`);
128
+ }
129
+ }
130
+ if (current.status === "active") {
131
+ this.#fingerprints.delete(current.fingerprint);
132
+ }
133
+ if (next.status === "active") {
134
+ this.#fingerprints.set(next.fingerprint, id);
135
+ }
136
+ this.#memories.set(id, copyMemory(next));
137
+ return copyMemory(next);
138
+ }
139
+ async softDelete(id, deletedAt = new Date().toISOString()) {
140
+ const current = this.#memories.get(id);
141
+ if (current === undefined) {
142
+ return null;
143
+ }
144
+ if (current.status === "deleted") {
145
+ return copyMemory(current);
146
+ }
147
+ return this.update(id, {
148
+ status: "deleted",
149
+ deletedAt,
150
+ updatedAt: deletedAt,
151
+ });
152
+ }
153
+ async findActiveScopeCandidates(scope, options = {}) {
154
+ const keywords = options.keywords
155
+ ?.map((keyword) => keyword.trim().toLocaleLowerCase())
156
+ .filter((keyword) => keyword.length > 0);
157
+ const limit = options.limit ?? 100;
158
+ const paths = [
159
+ ...new Set([scope.path, ...(options.paths ?? [])].filter((value) => value !== undefined)),
160
+ ];
161
+ const components = new Set([scope.component, ...(options.components ?? [])].filter((value) => value !== undefined));
162
+ return [...this.#memories.values()]
163
+ .filter((memory) => memory.status === "active" &&
164
+ (options.workspaceId === undefined ||
165
+ memory.workspaceId === options.workspaceId) &&
166
+ memory.scope.organization === scope.organization &&
167
+ scopeValueMatches(memory.scope.project, scope.project) &&
168
+ scopeValueMatches(memory.scope.repo, scope.repo) &&
169
+ (memory.scope.path === undefined ||
170
+ paths.some((path) => path === memory.scope.path ||
171
+ path.startsWith(`${memory.scope.path}/`))) &&
172
+ (memory.scope.component === undefined ||
173
+ components.has(memory.scope.component)) &&
174
+ (keywords === undefined ||
175
+ keywords.length === 0 ||
176
+ keywords.some((keyword) => memory.content.toLocaleLowerCase().includes(keyword))))
177
+ .sort((left, right) => right.createdAt.localeCompare(left.createdAt) ||
178
+ left.id.localeCompare(right.id))
179
+ .slice(0, limit)
180
+ .map(copyMemory);
181
+ }
182
+ async supersede(memoryId, replacementInput) {
183
+ const current = this.#memories.get(memoryId);
184
+ if (current === undefined) {
185
+ throw new Error(`Memory not found: ${memoryId}`);
186
+ }
187
+ const replacement = MemorySchema.parse(replacementInput);
188
+ if (replacement.supersedesMemoryId !== memoryId) {
189
+ throw new Error("Replacement must reference the memory it supersedes");
190
+ }
191
+ const existingId = this.#fingerprints.get(replacement.fingerprint);
192
+ if (current.status === "superseded") {
193
+ const existing = existingId === undefined ? undefined : this.#memories.get(existingId);
194
+ if (existing?.supersedesMemoryId === memoryId) {
195
+ return {
196
+ memory: copyMemory(existing),
197
+ supersededMemory: copyMemory(current),
198
+ };
199
+ }
200
+ throw new Error(`Memory has already been superseded: ${memoryId}`);
201
+ }
202
+ if (current.status !== "active") {
203
+ throw new Error(`Only active memories can be superseded: ${memoryId} is ${current.status}`);
204
+ }
205
+ let storedReplacement;
206
+ if (existingId !== undefined) {
207
+ const existing = this.#memories.get(existingId);
208
+ if (existing === undefined) {
209
+ throw new Error("In-memory fingerprint index is inconsistent");
210
+ }
211
+ if (existing.supersedesMemoryId !== memoryId) {
212
+ throw new Error("Replacement fingerprint belongs to an unrelated memory");
213
+ }
214
+ storedReplacement = existing;
215
+ }
216
+ else {
217
+ if (this.#memories.has(replacement.id)) {
218
+ throw new Error(`Memory ID already exists: ${replacement.id}`);
219
+ }
220
+ this.#memories.set(replacement.id, copyMemory(replacement));
221
+ this.#fingerprints.set(replacement.fingerprint, replacement.id);
222
+ storedReplacement = replacement;
223
+ }
224
+ const timestamp = replacement.createdAt;
225
+ const superseded = MemorySchema.parse({
226
+ ...current,
227
+ status: "superseded",
228
+ updatedAt: timestamp,
229
+ });
230
+ this.#fingerprints.delete(current.fingerprint);
231
+ this.#memories.set(memoryId, copyMemory(superseded));
232
+ return {
233
+ memory: copyMemory(storedReplacement),
234
+ supersededMemory: copyMemory(superseded),
235
+ };
236
+ }
237
+ }
238
+ //# sourceMappingURL=in-memory-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-repository.js","sourceRoot":"","sources":["../src/in-memory-repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export * from "./schemas.js";
2
+ export * from "./pilot-schemas.js";
3
+ export * from "./auth-schemas.js";
4
+ export { AuthenticatedWorkspaceSchema, type AuthenticatedWorkspace, } from "./auth-schemas.js";
5
+ export * from "./ports.js";
6
+ export * from "./in-memory-repository.js";
7
+ export * from "./engine.js";
8
+ export * from "./redaction.js";
9
+ export * from "./injected-context.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EACL,4BAA4B,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}